微服务的测试策略( 三 )


微服务的测试策略

文章插图
组件测试在和微服务相同的进程内运行 。测试在适配器中注入一个模拟服务,以模拟与其他组件的交互 。
进程内测试仅适用于组件是单个微服务的情况 。乍看之下,组件测试和端到端测试或验收测试非常类似 。唯一的区别是,组件测试只选取系统的一部分(组件),并将其与其余部分隔离开来 。它会对这个组件做全面的测试,以验证它是否提供了用户或消费者需要的功能 。
微服务的测试策略

文章插图
组件测试和端到端测试可能看上去类似 。但区别在于,端到端测试在一个类生产环境中测试整个系统(所有微服务),而组件测试只隔出系统的一部分进行测试 。两种测试都会从用户(或消费者)的角度来检查系统行为,模拟用户可能执行的操作 。我们可以使用任何语言或框架来编写组件,但最流行的可能要数 Cucumber 和 Capybara 了 。
进程外组件测试
进程外测试适用于任意大小的组件,包括由许多微服务组成的组件 。在这类测试中,组件被(原封不动地)部署在一个测试环境中,所有的外部依赖都是以模拟或存根方式提供 。
微服务的测试策略

文章插图
在这类组件测试中,测试环境会比较复杂,因为它要模拟系统的其余部分 。
要全面了解契约测试的概念,建议研究下 JAVA Spring 契约测试的示例代码 。此外,对于 Java 开发人员,这篇博文提供了一些在各个层面测试 Java 微服务的代码样例 。
微服务的端到端测试
到目前为止,我们都是分块测试系统 。单元测试用于分别测试微服务的各个部分,契约测试验证 API 兼容性,集成测试检查网络调用,组件测试用于验证子系统的行为 。只有在自动化测试金字塔的最顶端,我们才是对整个系统进行测试 。
端到端(E2E)测试用于确保系统可以满足用户需求并实现其业务目标 。E2E 套件应该覆盖应用程序的所有微服务,并且使用与用户相同的界面——通常搭配 UI 和 API 测试 。
应用程序的运行环境应尽量接近生产环境 。在理想情况下,测试环境中应包含应用程序通常需要的所有第三方服务,但有时候,为了降低成本或防止滥用,也可以模拟 。
微服务的测试策略

文章插图
端到端测试是模拟用户交互的自动化测试 。只有外部第三方服务可以是模拟的 。
从测试金字塔可以看出,E2E 测试数量最少,这很好,因为它们通常最难运行,也最难维护 。只要专注于用户的操作过程及需求,我们就可以从少数几个 E2E 测试中获得很大的价值 。
小 结
范式变了,策略也要跟着变 。在微服务架构下,测试比以往任何时候都重要,但我们需要调整技术来适应新的开发模型 。系统不再是由单个团队管理 。取而代之,每个微服务的所有者都必须完成好自己的部分,才能保证整个应用程序的正常运行 。
有些组织可能会认为,单元、契约和组件测试已经足够了 。其他的则认为需要端到端和集成测试,他们可能会选择组建一支 QA 团队,以推动跨团队的测试 。
想要进一步了解微服务吗?可以阅读以下几篇文章:
 
  •  
    什么是微服务架构?
     
 
https://semaphoreci.com/blog/microservice-architecture
 
  •  
    微服务架构的领域驱动设计原则
     
 
https://semaphoreci.com/blog/domain-driven-design-microservices
 
  •  
    微服务的发布管理
     
 
https://semaphoreci.com/blog/release-management-microservices
 
  •  
    转向微服务之前要了解的 12 种单体架构优化方法
     
 
https://semaphoreci.com/blog/monolith-microservices


推荐阅读