SuperAPI AI 工具集

drift-testing

测试与质量

查看项目

更新于 10-16 07:48

技能介绍

Drift Testing 是一套围绕 Drift CLI 构建的 API 契约验证技能,核心目标是检查 API 实现是否与 OpenAPI 规范保持一致,并发现规范漂移。它支持双向契约测试(BDCT),可与 Pactflow 及 CI/CD 流程配合使用。

用途 该技能用于对 API 实现进行规范优先(spec-first)的验证。它读取 OpenAPI 规范,生成并执行测试用例,将实际响应与规范中定义的状态码和数据结构进行比对。当实现偏离规范时,测试会失败并给出诊断信息。此外,它也支持对事件驱动服务(Kafka、SNS、SQS)进行 AsyncAPI 3.x 验证。

主要能力

  • 基于 OpenAPI 规范验证 API 实现,捕获规范漂移。
  • 支持双向契约测试(BDCT),可发布到 Pactflow 并集成 GitHub Actions、GitLab CI。
  • 支持 AsyncAPI 3.x 事件驱动服务测试,需连接真实 broker,无模拟服务器等价方案。
  • 提供测试用例 YAML 模式、数据集、表达式、认证配置、Lua API、CLI 参考等文档。
  • 附带脚本:extract_endpoints.py(提取 OpenAPI 操作与响应码,支持 --scaffold 生成骨架、--only-missing 仅补缺口)、extract_channels.py(AsyncAPI 等价工具)、check_coverage.py(覆盖率检查)、run_loop.sh / run_loop.ps1(失败重试循环并检查覆盖率)、start_mock.sh / start_mock.ps1(启动 Prism 模拟服务器)。

使用方式 安装可通过 npx @pactflow/drift --help 直接运行,或使用 npm install --save-dev @pactflow/drift 进行项目级安装,也可全局安装。项目初始化使用 drift init 交互式向导,生成 drift.yaml、drift.lua、数据集与测试文件。运行测试使用 drift verify --test-files drift.yaml --server-url <URL>,支持 --operation、--failed、--tags 等过滤参数。覆盖率反馈循环通过 run_loop.sh 自动重试失败用例并检查覆盖率,两个环节均通过才返回退出码 0。AsyncAPI 测试无需 --server-url,Drift 会连接 AsyncAPI servers 块中声明的 broker。

适用场景 适用于需要对 API 实现进行规范一致性验证的团队,尤其是采用 OpenAPI 规范优先流程、需要双向契约测试、或需要将契约验证集成到 CI/CD 的项目。也适用于事件驱动架构中基于 AsyncAPI 3.x 的服务验证。

限制

  • 不得修改正在测试的 OpenAPI 规范。
  • AsyncAPI 仅支持 3.x,不支持 2.x。
  • AsyncAPI 测试需要真实运行的 broker,没有模拟服务器等价方案。
  • 500 响应被排除在覆盖率要求之外,因为无法确定性触发。
  • 响应 schema 验证没有绕过机制,规范示例错误会表现为测试失败。
  • 多个 2xx 状态码需为每个文档化状态码单独编写测试,不支持 statusCode 数组语法。
  • 数据集表达式在 operation:started 之前解析,动态 ID 需使用预置静态 ID 或通过 http:request 重写 URL。
  • 对生产环境运行破坏性测试(DELETE、POST)会产生永久影响,需使用专用测试账户。
  • run_loop.sh 面向 OpenAPI 设计,需要 --server-url,AsyncAPI 需手动迭代。
  • 部分脚本依赖 pyyaml。