11

我的团队开发了三个微服务。三者协同工作以提供业务场景。它们与 REST 和 RabbitMQ 进行通信。看起来像Toby Clemson 关于微服务测试的演讲

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

如何将业务场景的端到端测试(即跨所有微服务)包含到交付管道中?

我的团队建议这样做:

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

共享端到端阶段

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

  • 端到端阶段是一个瓶颈。快速流水线可以阻止慢速流水线,因为它更频繁地保留端到端阶段,使其他流水线在运行测试之前等待。

  • 一个管道中的故障将阻止其他管道交付,也使它们无法交付紧急错误修复。

  • 该解决方案不适应需要不同微服务组合的新业务场景。我们要么最终得到一个连接所有微服务的超级阶段,要么每个业务场景都需要自己的新端到端阶段。

  • 端到端阶段只显示了一个狭窄的结果,因为它只确认了一个精确的微服务版本组合可以一起工作。如果生产包含不同的版本,则不保证这也能正常工作。

  • 该阶段也与最后的手动发布决定相冲突:如果构建通过端到端但我们决定不将其发布到生产环境怎么办?然后,生产将包含与端到端不同版本的该微服务,从而导致结果扭曲。

那么有什么更好的方法来做到这一点呢?

4

1 回答 1

2

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

更长的解释:

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

于 2017-05-19T19:22:40.223 回答