API Contract Testing 是一个专注于服务间 API 契约验证的技能,其目标是确保 API 在消费者与提供者之间遵守既定契约,从而防止服务变更破坏依赖方,同时避免为了验证兼容性而运行完整的集成测试。契约测试独立地验证请求与响应格式、数据类型以及 API 行为。
用途方面,该技能适合以下场景:测试微服务之间的通信;防止破坏性 API 变更;验证 API 版本控制;测试消费者与提供者之间的契约;确保向后兼容性;验证 OpenAPI/Swagger 规范;测试第三方 API 集成;在 CI 中捕获契约违规。
主要能力方面,技能提供了快速入门的最小工作示例,基于 Pact 编写消费者驱动的契约测试(TypeScript 示例,包含 PactV3 与 MatchersV3 的使用,以及给定条件、接收请求、指定请求方法、路径、请求头等步骤)。此外,技能还列出了位于 references/ 目录下的详细实现参考指南,包括:Pact for Consumer-Driven Contracts、OpenAPI Schema Validation、JSON Schema Validation、REST Assured for Java、Contract Testing with Postman、Pact Broker Integration。
使用方式方面,资料给出了一个最小可运行示例的代码片段,路径为 tests/pact/user-service.pact.test.ts,其中定义了 provider(consumer 为 OrderService,provider 为 UserService,端口 1234,目录为 ./pacts),并展示了 describe 块中针对 GET /users/:id 的测试结构,包含 given、uponReceiving、withRequest 等调用。更完整的实现需要参考 references/ 目录中的指南。
最佳实践方面,技能明确列出了推荐与不推荐的做法。推荐:从消费者视角测试契约;使用匹配器进行灵活匹配;验证模式结构而非具体值;对契约进行版本管理;测试错误响应;使用 Pact broker 共享契约;在 CI 中运行契约测试;测试向后兼容性。不推荐:在契约测试中测试业务逻辑;在契约中硬编码具体值;跳过错误场景;在契约测试中测试 UI;忽略契约版本管理;未经验证即部署;测试实现细节;模拟契约测试。
限制方面,资料未提供关于收费、价格、平台支持范围或具体效果的数据,这些信息暂未提供。