如何将跨微服务的端到端测试包含到多个持续交付管道中?

How do I include end-to-end tests across microservices into multiple continuous delivery pipelines?

我的团队开发了三个微服务。三者共同提供一个业务场景。他们与 REST 和 RabbitMQ 通信。看起来像 Toby Clemson's presentation on Microservice Testing.

每个微服务都有自己的持续交付管道。它们是交付,而不是部署管道,这意味着最后有一个手动发布决定。

如何将 业务场景 的端到端测试,即跨所有微服务,纳入交付管道?

我的团队建议这样做:

我们添加了一个 shared 端到端阶段,用于部署所有三个微服务和 运行s 对它们的端到端测试。每当其中一个管道到达此阶段时,它就会进行部署和测试。信号量确保管道一个接一个地通过阶段。失败会停止所有三个管道。

对我来说,这似乎牺牲了微服务架构最初赢得的所有独立性:

那么更好的方法是什么?

简而言之 - 这样的集成测试将不是微服务 development/deployement 团队和流程的一部分,而是一个拥有自己流程的独立团队。你可以在那个团队中尽可能自动化,但最终你需要决定是否发布。

较长的解释:

微服务架构风格的发明是为了帮助大型组织管理大型应用程序并避免团队之间的通信开销和依赖性。所以如果你想遵循这种风格,你真的应该有 3 个独立的团队——每个服务一个。这些团队中的每一个都将对各自服务的整个生命周期负全部责任。现在,当您想要进行端到端测试(通常称为集成测试)时,您将建立一个负责这些测试的第四团队。并且您将有一个人担任负责的发布经理,他拥有一个 staging/testing 集群,并决定何时测试证明足以将新版本的服务发布到野外。您的目标应该是在服务的依赖性和发布周期方面尽可能地解耦团队。如果您希望服务团队完全独立,您还可以将集成测试作为每个团队的一部分。这意味着每个团队都有 testing/staging 个集群,每个团队都有一个负责任的 testing/release 经理角色。