API Schema 校验是将已有请求和响应样例与指定接口契约对照。判断结果取决于 schema 方言、接口操作、方向和引用上下文;无法解析的契约不能算作通过。
先确定方言和接口操作
记录契约属于 OpenAPI、JSON Schema 还是 GraphQL,以及具体版本或 dialect;同时确认 operation、请求或响应方向、内容类型、引用根和解析上下文。依赖版本的规则或引用无法确认时,应保留为待判断。
分开判断缺失、null 与受约束的值
将每个样例与实际 schema 对照,不要把外观相似的输入当成同一种情况。
| 样例情况 | 核对内容 |
|---|---|
| 属性缺失 | 在当前操作和 schema 分支中是否必填 |
| 属性值为 null | 该方言和类型声明是否允许 null |
| 类型或范围不符 | 适用类型、边界和 schema 路径 |
| 格式或枚举值 | 声明的格式、校验器支持情况和允许的枚举值 |
| 未知属性 | schema 的 additionalProperties 规则 |
| 组合 schema 或引用 | 引用是否解析、适用分支及方言规则 |
GraphQL 应使用输入/输出类型和非空规则,不能套用 JSON Schema 关键词。可选字段不必然接受 null,声明默认值也不代表系统会自动填入。
报告样例判定,不推断覆盖率
对每个已有样例记录 schema 路径和关键词、可用的校验器或报告证据,以及它依据该契约属于有效、无效还是无法评估。未解析的引用和缺少的样例都要保留。少量样例可以暴露不匹配,但不能证明完整契约或运行时行为。
不把结构校验扩展成其他结论
Schema 校验处理声明的结构与约束,不能单独证明业务规则、授权或所有已部署客户端的兼容性。涉及客户端与服务端版本行为时,使用 API 版本兼容性测试。
记录 ASV-## 发现
记录对象、前置条件、关注行为、schema 来源路径、证据状态、影响与优先级、责任角色、关闭条件和验证方法。事实、证据支持的推断、候选检查和 Human 决策要分开。
准备有边界的复核
将已有 schema、样例和校验报告作为设计或静态比对材料。不要执行测试、修改 schema 或代码、假设缺失的规则或版本,也不要把样例数量说成覆盖率。
相关 Skill
- API 版本兼容性测试检查受支持的客户端/服务端组合。
- API 契约测试复核更广泛的生产者/消费者约定。
安装与调用
安装这个 Skill:
npx skills add https://github.com/naodeng/awesome-qa-skills/tree/main/skills/zh/testing-types/api-schema-validation -g
调用 api-schema-validation 时,提供契约方言和版本、operation、方向、内容类型、引用根、现有样例及可用的校验器证据。
源文件
阅读API Schema 校验 Prompt。其中定义 ASV-## 发现合同,以及样例×约束的判定边界。