为多个 Spring
运行端到端集成测试的推荐方法是什么?启动 Maven
中的应用程序构建的验证阶段?
基本上,我有一个多模块 Maven 项目,其中几个模块是单独的 Spring Boot 应用程序。这些单独的应用程序有自己的数据源配置,与 JMS
的集成流队列等。例如,应用程序 A 将轮询数据库中的事件,当该事件发生时,它会生成 JSON
数据文件并将消息放在 JMS
上队列。应用程序 B 正在轮询 JMS
队列,因此获取消息,读取文件,使用另一个数据库进行一些处理,然后将消息放在不同的队列中。然后应用程序 C 将获取该消息等。
我已经为各个应用程序设置了集成测试;这些在 Maven 故障安全插件下运行。但是,我想在 Maven 下对整个系统进行端到端的集成测试。我在项目中设置了一个单独的模块专门用于此任务,因此希望此模块的验证构建阶段使用其他依赖模块进行端到端测试。
有没有这样做的最佳实践方法?我看到了 3 种可能的方式:
将每个应用程序的配置加载到相同的应用程序上下文中。但是,由于多个数据源等,这会产生冲突,因此这些数据源都必须手动配置才能启用端到端集成测试 - 所以这对我来说似乎是错误的。 将每个应用程序作为一个单独的进程启动 - 那么如何正确跟踪它们并确保它们在测试模块构建停止/崩溃/等时被关闭? 有没有办法在同一个过程中轻松加载单独的 Spring Boot 应用程序,每个应用程序都有自己的配置上下文?这似乎是最明智的选择。关于 Maven
是否有任何考虑?构建/故障保护插件?
只是跟进并说出我最终做了什么(继续运作良好):
我在我的测试模块中创建了以下 Maven 配置文件:“default”默认跳过测试(我们使用 jgitflow 插件,因此只希望在明确请求时运行端到端测试),“standalone-e2e”用于端到端-end 测试不需要外部资源,例如数据库(针对想要进行完整端到端测试的开发人员),以及使用真实数据库等进行端到端测试的“集成 e2e”(可以触发为CI 的一部分)。 Spring 配置文件(由相应的 Maven 配置文件激活)控制各个组件的配置。 对于standalone-e2e,相关插件如activemq-maven-plugin , hsqldb-maven-plugin等启动(然后关闭)资源作为端到端测试的一部分,在 build-helper-maven-plugin 保留的端口上运行. process-exec-maven-plugin用于在预集成测试阶段启动所有要测试的组件(作为标准 Spring Boot 应用程序),并在集成测试后阶段自动关闭它们。 Spring 配置和特定的 Maven 测试依赖关系负责其他资源,例如 a fake FTP server .在所有资源和组件运行之后,测试代码本身会根据需要填充数据库和文件系统,并使用 JMS 触发流(并等待相应的回复等)。 集成 e2e 配置文件几乎相同,但使用关联 Spring 属性中配置的“真实”外部资源(在我们的例子中,Amazon SQS 队列、MySQL 数据库等)。 测试所需和生成的所有文件(例如数据文件、HSQLDB 文件、日志文件等)都在“目标”构建目录下创建,因此可以轻松检查该区域以查看测试期间发生的情况,并且还允许“mvn clean”清除一切。 我希望这很有用——发现无论我需要做什么,都有一个 Maven 插件来处理它,这确实令人耳目一新!