← 中文资源

简体中文版本

基于 OpenAPI 对接口做模糊测试

用 Schemathesis 读取 OpenAPI 文档生成请求,排除破坏性接口,并把每个意外 500 转成回归测试。

阅读英文原文

概述

手写测试都来自已经知道接口预期的人,覆盖的是作者想到的形状。模糊测试从 OpenAPI 文档出发,生成作者没想到的值:负数金额、超长字符串、异常 Unicode、缺失的可选字段。目标不是证明接口正确,而是找出进入未防护分支并返回 500 的输入。500 几乎总是缺陷:请求本身非法,接口应当用 4xx 明确拒绝。

步骤

  1. 安装并确认版本:
pipx install schemathesis && schemathesis --version
  1. 对预发环境运行全部检查,排除标记为 destructive 的接口:
schemathesis run https://staging.example.com/openapi.json \
  --checks all --exclude-tag destructive --max-examples 50
  1. 用报告中的 curl 命令复现失败,再把正确状态码写成回归测试。
  2. 夜间任务使用固定种子与更多样本,保证失败可复现:
schemathesis run "$SCHEMA_URL" --checks all --max-examples 200 --seed 20261021 --workers 4
  1. 在流水线中让 5xx 直接失败,同时允许业务上正确的 4xx。

验证

quantity=-1 在修复前应复现 500,修复后应返回 422 且回归测试通过。夜间任务在固定种子下应产生相同的失败集合;任何新失败都能用报告中的种子在本地复现。检查报告,确认被排除的接口都有明确原因与负责人。

注意事项

  • 模糊测试会创建和删除真实数据,必须使用可重置的隔离环境。
  • 认证使用权限受限的测试令牌,绝不能指向生产环境或使用生产凭证。
  • 跨字段约束(如开始时间早于结束时间)无法从 schema 推断,4xx 应视为合法结果。
  • 不要因为噪声就全局关闭检查,应显式排除具体路径或标签并登记。
  • 失败要按根因分组修复,每类补一个回归测试,避免报告变成无人处理的噪声。