用途
Contract Testing Builder 用于实施 API 契约测试,确保服务提供者(Provider)与消费者(Consumer)之间的兼容性,防止接口变更破坏下游使用方。其思路是让消费者定义期望的契约,提供者必须满足该契约,从而在无需完整集成环境的情况下尽早捕获破坏性变更。
主要能力
资料涵盖以下几类能力:
-
Pact 消费者测试:使用
@pact-foundation/pact的PactV3创建 mock server,定义期望的请求与响应,并对真实 API 调用结果进行断言。示例中定义了“按 ID 获取用户”和“用户不存在返回 404”两个交互。 -
Pact 提供者验证:使用
Verifier拉取契约(本地文件或 Pact Broker),设置providerBaseUrl与stateHandlers,通过 provider states 准备测试数据(如创建用户 123、删除用户 999),并在每个测试后清理数据库。 -
OpenAPI 契约校验:提供
contracts/user-api.yaml规范示例,并通过express-openapi-validator中间件启用请求与响应校验,验证合法请求通过、非法响应被拒绝。 -
JSON Schema 校验:使用
ajv与ajv-formats定义并编译用户对象 schema,校验正确对象、缺失必填字段、非法邮箱格式等场景。 -
CI 集成:GitHub Actions 工作流示例,先运行消费者测试并通过
pact-broker publish发布契约,再在提供者任务中执行验证。 -
破坏性变更检测:通过对比版本响应,检测字段删除与类型变更等破坏性情况。
-
契约文档模板:包含请求、响应示例、provider states 与破坏性变更策略(如不可删除必填字段、不可改变字段类型、可添加可选字段、弃用需提前六个月通知)。
使用方式
资料给出的流程大致为:消费者端编写契约测试并生成契约文件;提供者端配置验证器、实现 provider states;在 CI 中先跑消费者测试、发布契约,再跑提供者验证。使用 Pact 时还需搭建 Pact Broker 作为中心契约仓库。资料未提供安装命令或具体依赖安装步骤。
适用场景
适合微服务架构下的服务间接口测试、前后端分离开发、多个消费者共享同一 API 的团队,以及需要在持续集成中尽早发现不兼容变更的流程。
限制
资料未提供价格、支持的平台范围、性能数据或实际使用效果。使用前提是项目已有可测试的 API 与测试框架,并具备 Node.js 环境;若采用 Pact,则需要额外维护 Pact Broker 与 provider states。资料给出的代码为示例片段,未列出完整的项目结构与安装指令。