Gar*_*ick 19 integration-testing end-to-end maven multi-module spring-boot
Spring在Maven构建的验证阶段,为多个引导应用程序运行端到端集成测试的推荐方法是什么?
基本上,我有一个多模块Maven项目,其中几个模块是独立的弹簧启动应用程序.这些单独的应用程序有自己的数据源配置,带JMS队列的集成流等.例如,应用程序A将轮询数据库中的事件,当发生这种情况时,它会生成JSON数据文件并将消息放入JMS队列.应用程序B正在轮询JMS队列,因此选择消息,读取文件,使用另一个数据库执行某些处理,并将消息放在不同的队列中.然后,应用程序C将接收该消息等.
我已经为各个应用程序设置了集成测试; 这些在Maven故障安全插件下运行.但是,我想整合测试整个系统,端到端,在Maven下.我在专用于此任务的项目中设置了一个单独的模块,因此希望此模块的验证构建阶段使用其他相关模块进行端到端测试.
这样做有最佳实践方法吗?我看到3种可能的方式:
Mavenbuild/failsafe插件的任何注意事项吗?Gar*_*ick 12
只是为了跟进并说出我最终做的事情(继续运作良好):
我希望这很有用 - 我发现无论我需要做什么,都可以使用Maven插件来处理它!
非常好的问题!我自己会对其他人的回答感兴趣.我会分享我的意见.
首先,在我的理解中你应该知道你想要测试什么.集成测试应该至少与其中的一部分应用程序一起使用,并确保您开发的组件在半真实环境中正常工作.好像你已经做到了.
现在,关于系统测试(我有意区分集成和系统测试).这些应该"模仿"QA人:)所以,他们将系统视为黑盒子.他们无法调用任何内部API并运行实际流程.端到端测试IMO属于这一类.
在这种情况下,您希望针对像生产中那样部署的系统检查它们,并使用类似生产的类路径.
所以我真的不相信选项1就像你一样.
关于选项3,我不确定它是否也是一个好的解决方案.即使你用不同的应用程序上下文运行你的东西(我不太了解Spring引导,所以我不能在技术上对它进行评论),在我的理解中它们将在运行时共享相同的类路径,所以可能你有风险在你的第三方之间发生冲突(虽然我知道spring boot本身定义了很多版本的jar,你知道我的意思),特别是当你只升级一个模块并且可能改变了依赖关系时.所以当你运行这个方法时,你真的不知道内存中究竟运行了什么.
因此,对于端到端测试,我会选择选项2.关于同步,可能选项是在应用程序级别结合操作系统级别的进程状态跟踪实现某些逻辑.我想评论的另一点是,端到端测试通常仍然是功能测试(它们检查系统的功能行为),因此通常不应检查每次测试中的系统崩溃.如果检查每个流的系统崩溃,这些测试将太慢.当然,您可以维护一个相对较小的测试套件来检查角落情况.
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
2581 次 |
| 最近记录: |