当微服务有独立的发布计划时,端到端测试的有效性?

Effectiveness of end-to-end testing when microservices have independent release schedules?

我是 20 多个开发人员团队的一员,他们为我们公司的单个域(例如交付跟踪域)维护大约 7 个组件(网站和微服务)。

为了保证质量,我们有一个“领域范围的端到端测试”。然而,我们的 E2E 测试有一个问题:我们的 E2E 环境可能有一个组件的版本与生产版本不同。造成这种差异的原因是组件(例如微服务)有自己的发布时间表。

你是怎么处理这个问题的?

你们是否强制 E2E 必须 运行 在正确的微服务版本上?如果有怎么办?

或者您是否接受 CI 和生产永远不会有相同的微服务版本并且只依赖于监控生产的事实?

最后,E2E 在您的 CI/CD 管道中有多重要?

请注意,我只对微服务的端到端测试感兴趣,因为我无法控制第三方服务何时发布。

谢谢

将一般测试视为捕获错误的网络,将 e2e 视为该网络的另一部分。人们不能指望建立一个无限密集的网络来捕获所有错误,并且随着我们投入更多精力来改进该网络,边际价值会降低。

根据这些术语,我们试图通过网络的端到端部分捕获哪些错误,特别是在测试不同版本的多个微服务时?我们可能关注的是 class 两个服务在更改后无法正确集成时出现的错误,或者更糟糕的是,一些特殊的边缘情况直到现在才被隐藏,但会被新行为揭示。

无论如何,由于端到端测试的工作量很大,特别是围绕正确启动环境,因此最好以不同的方式覆盖这些错误 - API 测试,两个服务之间的集成测试。

所以实际上,e2e 测试在哪里有用?在我看来,优势在于发现可能影响整个系统质量的不是细微的而是重大的故障。我倾向于将我的 e2e 工作重点放在涵盖尽可能多的 架构 上,以便涵盖每个微服务、数据库、通信路径等。通常在这方面与特征组有很好的相关性,因此就产品而言也有很好的覆盖率。

总而言之——我是否应该关心我合并了未经测试的代码,具体将如何部署产品?我不这么认为 - 如果出现重大故障,将会用一组不同的版本注意到它。如果有一个细微的错误,它会被集成或 API 测试捕获。如果真的很难发现错误,那么我会付出代价在生产中看到它 - 有时就是这种情况。