← ClaudeAtlas

api-contract-testlisted

拉取 code/<repo>/v3/api-docs OpenAPI + Bruno CLI 跑契约对照,输出 reports/<版本>/api-contract-diff.md(路径/字段/枚举/分页/状态码偏差)
ayouaiyouwei-arch/claude_pm_workflows · ★ 1 · Testing & QA · score 58
Install: claude install-skill ayouaiyouwei-arch/claude_pm_workflows
> 🔧 项目无关骨架版 · 项目专属配置见 PROJECT-PROFILE.md # Skill · api-contract-test > 一句话定位:以 `code/<仓库名>/v3/api-docs` OpenAPI(后端 OpenAPI 入口见 PROJECT-PROFILE.md § 五)为事实源,比对 `tools/api-collection/` Bruno 集合的请求 / 响应 / 字段 / 枚举 / 分页 / 状态码,输出**契约偏差报告**。发现的 `blocker` / `critical` 偏差自动登记为 `DIFF-XXX`(type=`API_CONTRACT`)。 ## 触发条件 - 用户明确要求「跑契约对比 / API 偏差核查」 - 同步代码(`sync-research-code` 技能)后必跑 - 基线发布前必跑 - 后端发布新接口或字段变更后必跑 ## 输入 | 输入 | 是否必填 | 示例 | |---|---|---| | 当前生效基线 | ✅ | `B1.0.x` | | OpenAPI 来源 | ✅ | 拉取 `http://localhost:8080/v3/api-docs` 或既有 `reports/<版本>/openapi.json` | | Bruno 环境 | ✅ | `Local` / `Staging` | | 报告输出位置 | ✅ | `test/reports/<版本>/api-contract-diff.md` | ## 工具 - **Bruno CLI**:`bru run --env <env> --reporter-json <out.json>` - **OpenAPI 拉取**:`curl http://localhost:8080/v3/api-docs > openapi.json`(启动后端后) - **解析**:可用 Node `openapi-types` / `yaml` / `jsonpath` 或纯文本对比 ## 步骤 1. **基线锁定 + 目录校验** - 确认 `test/reports/<版本>/` 目录存在 2. **OpenAPI 拉取并归档** - 启动后端(启动命令见 PROJECT-PROFILE.md § 五,如 Java 的 `./mvnw -B spring-boot:run`) - `curl <后端 OpenAPI 入口,见 PROJECT-PROFILE § 五> > test/reports/<版本>/openapi.json` - 校验 JSON 可解析、`paths` 段非空 3. **Bruno 集合扫描** - 遍历 `test/tools/api-collection/**/*.bru` - 解析每个 `.bru` 的 `meta` / `<method>` 段 / `assert` 段 / `headers` / `body` 4. **路径对比(Path Drift)** - OpenAPI 中存在但 Bruno 缺:登记为「Bruno 缺失」(提示补 .bru) - Bruno 中存在但 OpenAPI 缺:登记为「OpenAPI 缺失」(提示后端确认) - 两侧路径模板不一致(如 `/orders/{id}` vs `/orders/{orderId}`):登记为「path drift」 5. **字段对比(Field Drif