# API 契约变异测试器

对 OpenAPI 请求字段做语义变异，并可发送到真实后端以检查防御性校验覆盖率

> 标准页面: https://elysiatools.com/zh/tools/api-contract-mutation-tester

- **分类:** Development

- **关键词:** openapi, 变异测试, api, 防御性编程, 契约

## 概述

粘贴 OpenAPI 3.x 文档后，工具会先为每个 operation 生成基准合法请求，再把字段改造成更危险的语义变体，比如删除必填项、填入负数、越界枚举、全空格字符串或特殊字符载荷。

使用方式：
- OpenAPI 规范：粘贴 YAML 或 JSON
- 基础 URL：留空则只生成变异计划；填写真实地址则执行请求
- 执行变异请求：开启后把变异请求真的发给后端
- 授权头：可填 Bearer token 等原始头值
- 每字段变异数：限制每个字段生成多少种语义变体
- 请求超时：控制每次请求最长执行时间

结果解读：
- defended：后端拒绝了该变异请求
- accepted：后端仍返回成功状态，说明校验可能不足
- documented：观测到的状态码是否在 OpenAPI responses 中出现

## 输入项

- **OpenAPI 规范** (textarea): Paste an OpenAPI 3.x YAML or JSON document here...
- **基础 URL** (text): https://api.example.com
- **执行变异请求** (checkbox)
- **授权头** (text): Bearer
- **每字段变异数** (number)
- **请求超时（毫秒）** (number)

## 适用场景

- 在 API 上线前，需要验证后端接口对异常参数（如负数、特殊字符、空值）的拦截能力时。
- 进行安全审计或渗透测试前，希望自动化生成并执行接口的边界条件测试用例时。
- 重构旧版后端服务后，需确保新的参数校验逻辑与 OpenAPI 契约定义严格一致时。

## 工作原理

- 解析输入的 OpenAPI 3.x YAML 或 JSON 文档，提取所有接口路径、请求体结构及参数校验规则。
- 基于契约定义生成合法的基准请求，随后对每个字段应用语义变异（如移除必填项、注入非法枚举值或超长字符串）。
- 如果配置了基础 URL 并开启执行选项，工具会携带指定的授权头，将变异请求并发发送至真实后端。
- 收集后端响应状态码，比对契约定义，输出测试报告并标记每个变异请求是被成功防御（defended）还是被意外接受（accepted）。

## 使用案例

- 自动化生成 API 健壮性测试报告，检查后端是否遗漏了必填项校验或枚举值限制。
- 在 CI/CD 流程外快速验证某个特定接口的防御性编程覆盖率，无需编写繁琐的测试脚本。
- 辅助安全团队发现潜在的注入漏洞或因处理异常数据导致的服务器内部错误（500 状态码）。

## 常见问题

### 支持哪些版本的 OpenAPI 规范？

目前仅支持 OpenAPI 3.x 版本的 YAML 或 JSON 格式文档，暂不支持 Swagger 2.0。

### 什么是“被防御 (defended)”和“被接受 (accepted)”？

“被防御”指后端正确识别了异常参数并返回了错误状态码（如 400）；“被接受”指后端未拦截异常参数，仍返回了成功状态码（如 200），这通常意味着校验存在漏洞。

### 工具会自动发送请求修改我的真实数据吗？

只有在填写了“基础 URL”并勾选“执行变异请求”时，工具才会向后端发送真实请求。建议在测试环境或沙盒环境中使用，避免污染生产数据。

### 如何测试需要登录的接口？

可以在“授权头”字段中填入有效的认证信息，例如 Bearer ，工具会在发送真实请求时自动携带该请求头。

### 为什么有些字段没有生成变异请求？

工具会根据“每字段变异数”限制生成的变体数量。此外，如果没有在 OpenAPI 中明确定义字段的类型或约束，工具可能无法生成针对性的语义变异。

## 相关工具

- [Tailwind 色板同步器](https://elysiatools.com/zh/tools/tailwind-color-palette-sync): 输入一组 HEX,选择命名规则(色阶 50–950 / 单名 / 对象嵌套),自动生成 tailwind.config.ts 的 theme.extend.colors 片段,每个色阶同时给出 WCAG AA/AAA 对比等级,可选暗色模式。
- [API 契约压力测试器](https://elysiatools.com/zh/tools/api-contract-stress-tester): 根据 OpenAPI 3.x 规范批量生成边界值测试请求，并可选发送到真实后端以发现契约不一致。
- [cURL 转 Go (net/http)](https://elysiatools.com/zh/tools/curl-to-go): 将 cURL 命令转换为 Go net/http 代码片段，包含 http.NewRequest、请求头和请求体
- [cURL 命令转 HAR 转换器](https://elysiatools.com/zh/tools/curl-to-har-converter): 将 cURL 命令转换为可移植的 HAR 1.2 请求条目。
- [cURL 转 JavaScript (axios)](https://elysiatools.com/zh/tools/curl-to-js-axios): 将 cURL 命令转换为 JavaScript axios 代码片段，使用配置对象、请求头和数据
- [cURL 转 JavaScript (fetch)](https://elysiatools.com/zh/tools/curl-to-js-fetch): 将 cURL 命令转换为 JavaScript fetch() 代码片段，包含请求头、请求体和方法
- [cURL 转 PHP (cURL)](https://elysiatools.com/zh/tools/curl-to-php): 将 cURL 命令转换为 PHP cURL 代码片段，包含 curl_setopt、请求头和 POST 字段
- [cURL 转 Python (requests)](https://elysiatools.com/zh/tools/curl-to-python): 将 cURL 命令转换为 Python requests 代码片段，包含请求头、数据和请求方法

## 示例

- [Postman Collections - API 测试](https://elysiatools.com/zh/samples/postman-collections): 全面的 Postman collection 示例，包括 API 测试、自动化脚本、环境变量、mock 服务器和 REST API 的高级测试模式
- [Web Python 图像处理示例](https://elysiatools.com/zh/samples/web-image-processing-python): Web Python 图像处理示例，使用 PIL/Pillow 包括读取、保存、缩放和格式转换
- [OpenAI API 示例](https://elysiatools.com/zh/samples/openai): 全面的OpenAI API示例，包括GPT模型、DALL-E图像生成、Whisper音频处理和函数调用
- [WebGPU 图形API](https://elysiatools.com/zh/samples/webgpu): 用于浏览器中高性能3D图形和GPU计算的现代图形API

## 相关内容

- [API 契约定义、Schema 校验与变更测试](https://elysiatools.com/zh/hubs/api-contract-testing): 定义 API 契约，校验 Schema 和已捕获载荷，识别兼容性风险，并记录测试验收结果。
- [API 版本升级与破坏性变更审查](https://elysiatools.com/zh/hubs/api-versioning-breaking-change-review): 对比 API 版本、规划迁移并在发布前验收兼容性。工具不替代真实发布和运行监控。
- [JSON Schema 与 API 契约校验工具](https://elysiatools.com/zh/hubs/json-validate): 在一个专题中比较 JSON Schema 校验、OpenAPI 响应检查、变异测试、压力测试和破坏性变更检测工具，适合 API 契约审查流程。
- [OpenAPI 实用工作流](https://elysiatools.com/zh/hubs/openapi-utility): 从 OpenAPI 生成类型与文档，审查破坏性变更，校验响应，并用压力与变异测试加固契约。
