契约测试是什么
契约测试由消费方定义对接口的期望——什么请求、匹配规则、期望响应——生成契约文件并纳入版本库,提供方在自己的流水线里执行这些契约,验证实现是否满足所有消费方的约定。这样不兼容的改动会在合并前失败,而不是等到联调或上线后才发现。它验证的是接口约定与兼容性,不覆盖业务流程与真实数据链路,因此不能替代端到端测试;单元测试关注内部逻辑,与它同样互补。
基本信息
| 契约来源 | 消费方编写期望并生成契约文件,进版本库管理 |
|---|---|
| 验证位置 | 提供方流水线执行契约验证,失败阻断合并 |
| 覆盖范围 | 请求响应结构、状态码、必要字段与兼容性 |
| 不覆盖 | 业务流程正确性、真实数据链路与性能表现 |
| 维护要求 | 消费方接口调用变化时同步更新契约,避免脱节 |
典型使用场景
- 多消费方服务:一支服务被多个调用方依赖,新版本不得破坏任一方的期望
- 前后端联调:前端定义期望,后端流水线验证,减少联调期间的返工
- 微服务改造:接口迁移期间同时验证新旧契约,保证灰度切换安全
- 第三方对接:外部系统接口变更时用契约明确约定边界
- 发布门禁:把契约验证纳入流水线,破坏性变更在合并前拦截
- 文档校验:契约文件同时充当接口说明的可执行版本
与其他测试的分工
| 手段 | 验证内容 | 不覆盖 |
|---|---|---|
| 契约测试 | 请求响应约定与兼容性 | 业务流程与真实数据链路 |
| 端到端测试 | 核心链路贯通 | 全部分支与边界条件 |
| 单元测试 | 内部逻辑正确性 | 跨系统交互 |
| 集成测试 | 与真实依赖的交互 | 消费方的实际使用方式 |
流程与门禁
流程与门禁
# 1 消费方编写期望:给定请求 → 匹配规则 → 期望响应
# 2 生成契约文件并提交到版本库,与接口代码一起评审
# 3 提供方流水线执行契约验证,作为发布前的必过步骤
# 4 不兼容变更在合并前失败,不允许绕过(例外需书面审批)
# 5 契约版本与该接口版本关联,旧契约在版本下线后一并清理
# 6 消费方接口调用方式变化时同步更新契约,避免长期脱节契约测试不能替代端到端测试:它验证约定,不验证业务流程与真实数据链路,二者覆盖的失败类型不同,缺一都会留下盲区。
只有提供方文档而没有消费方期望时,兼容性实际上无人覆盖:文档容易过期,而契约是可执行、会被流水线强制核对的那一份。