《微服务架构设计模式》读书笔记 | 第10章 微服务架构中的测试策略(下)
- 2021 年 9 月 28 日
- 筆記
- 《微服务架构设计模式》阅读笔记, 学习笔记
前言
本章介绍集成测试、组件测试与端到端测试;
这是一本关于微服务架构设计方面的书,这是本人阅读的学习笔记。以下对一些符号做些说明:
()为补充,一般是书本里的内容;
[]符号为笔者笔注;
1. 编写集成测试
集成测试验证服务是否可以与其客户端和依赖关系进行通信;
1.1 服务通常与其他服务交互
测试服务间的交互方法:
- 端到端测试:启动所有服务并通过其API进行测试;
- 集成测试:不启动服务,可以通过一些策略简化测试;
1.2 集成测试的策略
集成测试的两种策略:
- 第一种:测试每个服务的适配器,以及可能的适配器支持类,如JPA持久化测试;
- 第二种:使用契约,契约是一对服务之间交互的具体实例;契约的结构取决于服务之间的交互类型;
- 实现契约的方法取决于测试消费者还是提供者:
- 消费者端测试:用于消费者适配器的测试。它们使用契约来配置桩,以此模拟提供者程序的行为,使你能够直接运行测试,而不需要运行消费者对应的提供者程序;
- 提供者端测试:用于提供者适配器的测试。它们使用契约来测试适配器,使用模拟来满足适配器的依赖关系;
1.3 针对持久化层的集成测试
持久化集成测试每个阶段的行为:
- 设置:通过创建数据库结构设置数据库,并将其初始化为已知状态。也可能开始执行一些必要的数据库事务;
- 执行:执行数据库操作;
- 验证:对数据库的状态和从数据库中检索的对象进行断言;
- 验证:对数据库的状态和从数据库中检索的对象进行断言;
- 拆解:可选阶段,可以撤销对数据库所做的更改,如回滚在设置阶段提交的事务;
1.4 针对基于REST的请求 / 响应式交互的集成测试
图解:
- 消费者端:消费者端的API Gateway集成测试会使用契约来配置一个模拟Order Service行为的HTTP桩服务器;
- 图示的WireMock是一个有效模拟HTTP服务器的工具;
- 提供者端:Spring Cloud Contract 使用契约来生成提供者端Order Service集成测试代码,该测试使用Spring Cloud MVC 或 Rest Assured Mock MVC测试控制器;
- 这里的测试代码在HttpTest测试类中;
- 契约:契约中的请求内容指定了从API Gateway发出的HTTP请求;契约的响应指定了桩向API Gateway发送回的响应;
- 该契约描述了API Gateway成功从Order Service检索Order的尝试;
- 该测试将验证Order Service的API是否满足消费者的期望;
- 该测试验证是否符合契约;
1.5 针对发布 / 订阅式交互的集成测试
