Maven下多个Spring Boot应用的端到端集成测试

2024-02-14

对多个项目运行端到端集成测试的推荐方法是什么?Spring启动应用程序在Maven构建的验证阶段?

基本上,我有一个多模块 Maven 项目,其中几个模块是单独的 Spring Boot 应用程序。这些单独的应用程序有自己的数据源配置、集成流程JMS队列等。例如,应用程序 A 将轮询数据库中的事件,当该事件发生时,它会生成一个JSON数据文件并将消息放在JMS队列。应用程序 B 正在轮询JMS队列,因此拾取消息,读取文件,使用另一个数据库进行一些处理,然后将消息放入不同的队列中。然后应用程序 C 将获取该消息,等等。

我已经为各个应用程序设置了集成测试;它们在 Maven 故障安全插件下运行。但是,我想在 Maven 下端到端地集成测试整个系统。我在项目中设置了一个专门用于此任务的单独模块,因此希望此模块的验证构建阶段使用其他依赖模块进行端到端测试。

有这样做的最佳实践方法吗?我看到了 3 种潜在的方法:

  1. 将每个应用程序的配置加载到同一应用程序上下文中。然而,由于多个数据源等,这会产生冲突,因此这些数据源都必须手动配置才能启用端到端集成测试 - 所以这对我来说似乎是错误的。
  2. 作为单独的进程启动每个应用程序 - 那么如何正确跟踪它们并确保它们在测试模块构建停止/崩溃/等情况下关闭?
  3. 有没有一种方法可以在同一进程中轻松加载单独的 Spring Boot 应用程序,每个应用程序都有自己的配置上下文?这似乎是最明智的选择。在这方面有什么考虑吗Maven构建/故障安全插件?

只是为了跟进并说出我最终做了什么(继续运作良好):

  • 我在测试模块中创建了以下 Maven 配置文件:“default”,默认情况下跳过测试(我们使用jgitflow https://bitbucket.org/atlassian/jgit-flow插件,因此只希望在明确请求时运行端到端测试),“standalone-e2e”用于端到端测试,不需要数据库等外部资源(针对想要进行完整端到端测试的开发人员) ),以及使用真实数据库等进行端到端测试的“integrated-e2e”(可以作为 CI 的一部分触发)。 Spring 配置文件(由相应的 Maven 配置文件激活)控制各个组件的配置。
  • 对于standalone-e2e,相关插件例如activemq-maven-插件 http://activemq.apache.org/maven2-activemq-broker-plugin.html, hsqldb-maven-插件 https://github.com/avianey/hsqldb-maven-plugin等。作为端到端测试的一部分启动(然后关闭)资源,在保留的端口上运行构建助手 maven 插件 http://www.mojohaus.org/build-helper-maven-plugin/reserve-network-port-mojo.html. The 进程执行 maven 插件 https://github.com/bazaarvoice/maven-process-plugin用于在预集成测试阶段启动所有要测试的组件(作为标准 Spring Boot 应用程序),并在集成测试后阶段自动关闭它们。 Spring 配置和特定的 Maven 测试依赖关系负责其他资源,例如假冒的 FTP 服务器 http://mockftpserver.sourceforge.net/fakeftpserver-getting-started.html。所有资源和组件运行后,测试代码本身会根据需要填充数据库和文件系统,并使用 JMS 触发流程(并等待相应的回复等)。
  • Integrated-e2e 配置文件几乎相同,但使用在关联的 Spring 属性中配置的“真实”外部资源(在我们的示例中为 Amazon SQS 队列、MySQL 数据库等)。
  • 测试所需和生成的所有文件(例如数据文件、HSQLDB 文件、日志文件等)都在“目标”构建目录下创建,因此可以轻松检查该区域以查看测试期间发生的情况,并且还允许“mvn clean”清除所有内容。

我希望这是有用的 - 发现无论我需要做什么,都有一个 Maven 插件来处理它,这确实令人耳目一新!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Maven下多个Spring Boot应用的端到端集成测试 的相关文章

随机推荐