用途:以消费者驱动契约(Pact)确保服务之间的 API 兼容性。相较需要全部服务的集成测试,契约测试让各服务独立测试,反馈更快且不依赖环境。
主要能力:编写消费者侧测试并生成 pact 文件;提供消费者与提供者匹配器(Like、EachLike、Term 等)以匹配结构而非具体值;提供者验证契约并设置 provider states;通过 Pact Broker 共享契约、发布验证结果并检查部署安全性;支持异步事件的消息契约测试。
使用方式:消费者侧用 Consumer/Provider 构建 mock server,以 .given() 描述状态、.with_request() 定义请求、.will_respond_with() 定义响应并生成契约。提供者侧用 Verifier 调用 verify_with_broker 验证契约。CI/CD 中发布与检查命令示例:
pact-broker publish ./pacts --broker-base-url=$PACT_BROKER_URL --consumer-app-version=$(git rev-parse HEAD)
pact-broker can-i-deploy --pacticipant=UserDashboard --version=$(git rev-parse HEAD) --to-environment=production
关键决策建议:契约存储用 Pact Broker 而非 git;消费者选择器用 mainBranch 与 deployedOrReleased;提供者状态使用专用测试端点;验证在消费者发布后进行;匹配器使用 Like()、EachLike() 保持灵活性。
限制与禁忌:结构重要时不要写死具体值(应使用 Like 等匹配器);不要测试提供者实现细节(如“数据库有 5 行”);不要跳过 provider state 设置;不要把 pact 文件提交到 git,应使用 Pact Broker 做版本管理。
相关技能包括集成测试、API 设计框架、属性测试。具体安装方式与价格资料暂未提供。