概述
手写测试都来自已经知道接口预期的人,覆盖的是作者想到的形状。模糊测试从 OpenAPI 文档出发,生成作者没想到的值:负数金额、超长字符串、异常 Unicode、缺失的可选字段。目标不是证明接口正确,而是找出进入未防护分支并返回 500 的输入。500 几乎总是缺陷:请求本身非法,接口应当用 4xx 明确拒绝。
步骤
- 安装并确认版本:
pipx install schemathesis && schemathesis --version
- 对预发环境运行全部检查,排除标记为 destructive 的接口:
schemathesis run https://staging.example.com/openapi.json \
--checks all --exclude-tag destructive --max-examples 50
- 用报告中的 curl 命令复现失败,再把正确状态码写成回归测试。
- 夜间任务使用固定种子与更多样本,保证失败可复现:
schemathesis run "$SCHEMA_URL" --checks all --max-examples 200 --seed 20261021 --workers 4
- 在流水线中让 5xx 直接失败,同时允许业务上正确的 4xx。
验证
quantity=-1 在修复前应复现 500,修复后应返回 422 且回归测试通过。夜间任务在固定种子下应产生相同的失败集合;任何新失败都能用报告中的种子在本地复现。检查报告,确认被排除的接口都有明确原因与负责人。
注意事项
- 模糊测试会创建和删除真实数据,必须使用可重置的隔离环境。
- 认证使用权限受限的测试令牌,绝不能指向生产环境或使用生产凭证。
- 跨字段约束(如开始时间早于结束时间)无法从 schema 推断,4xx 应视为合法结果。
- 不要因为噪声就全局关闭检查,应显式排除具体路径或标签并登记。
- 失败要按根因分组修复,每类补一个回归测试,避免报告变成无人处理的噪声。