SuperAPI AI 工具集

api-contract-testing

测试与质量

查看项目

更新于 10-15 12:22

技能介绍

用途

API 契约测试用于验证服务之间的 API 是否遵守既定契约,无需依赖完整的集成测试。它特别适合微服务架构中消费者与提供者之间的通信测试,帮助团队在开发早期发现接口不兼容问题。

主要能力

  • 消费者驱动契约测试:从消费者视角定义期望的请求与响应,生成契约。
  • 模式校验:基于 OpenAPI、JSON Schema 等结构定义验证请求与响应。
  • 提供者验证:提供者根据契约验证自身实现是否符合消费者期望。
  • 契约 Broker:集中存储和管理契约,支持版本化与 CI/CD 集成。
  • 错误响应测试:覆盖 404 等错误场景,确保异常处理符合契约。
  • 向后兼容性验证:在 CI 流程中检查契约变更是否破坏现有消费者。

使用方式

Pact 消费者测试(TypeScript)

使用 @pact-foundation/pact 的 PactV3 定义消费者与提供者,通过 given、uponReceiving、withRequest、willRespondWith 描述交互,并使用 MatchersV3 进行灵活匹配。示例中定义了获取用户成功(200)与不存在用户(404)两种场景,并通过 executeTest 对 mock server 发起请求进行断言。

提供者验证

使用 Verifier 配置提供者名称、基础 URL、Pact Broker URL、发布验证结果、提供者版本以及状态处理器(stateHandlers),通过 verifyProvider() 执行验证。状态处理器用于准备测试所需的数据状态,例如创建用户或清空用户表。

OpenAPI 校验(Express)

使用 express-openapi-validator 中间件,指定 apiSpec 为 OpenAPI 文件路径,开启 validateRequests、validateResponses、validateSecurity 以校验请求、响应与安全性。

其他实现

  • Python JSON Schema:参见 references/python-json-schema.md
  • Java REST Assured:参见 references/java-rest-assured.md
  • Pact Broker CI/CD:参见 references/pact-broker-cicd.md

适用场景

  • 微服务之间 API 通信的契约验证。
  • 需要在不运行完整集成测试的情况下验证接口兼容性。
  • 在 CI 流水线中自动检查契约变更与向后兼容性。
  • 使用 OpenAPI/Swagger 进行模式优先(schema-first)的 API 校验。

最佳实践

应做:

  • 从消费者视角测试。
  • 使用匹配器进行灵活匹配。
  • 验证结构而非具体值。
  • 显式地对契约进行版本管理。
  • 测试错误响应。
  • 在 CI 流水线中运行测试。
  • 测试向后兼容性。

不应做:

  • 在契约中测试业务逻辑。
  • 硬编码具体值。
  • 跳过错误场景。
  • 忽略版本管理。
  • 未经验证就部署。

工具

  • Pact:多语言消费者驱动契约测试工具。
  • Spring Cloud Contract:JVM 生态的契约测试工具。
  • OpenAPI/Swagger:模式优先的校验工具。
  • Dredd:API Blueprint 测试工具。
  • Spectral:OpenAPI 静态检查(linting)工具。

限制

资料中未提供关于收费、价格、平台支持范围、性能指标或具体使用步骤的更多信息。