展开本页目录
开始前准备什么
- 下载练习包,先阅读 README 中的依赖和运行范围。
- 使用独立练习目录;starter 是待完成任务,reference 是作者参考实现。
- 账号型功能须在自己的授权环境执行;本题不要求提供真实凭据。
- 保留正常样例
- 暴露真实规格
- 运行原生探索
- 保存可重放请求
- 明确空集合同
- 重放同一反例
- 复核探索边界
1. 保留正常样例
原创mean接口对[2,4,6]返回正常结果。先验证这个样例不覆盖空数组,不能由三个正常值推断整个输入空间安全。
2. 暴露真实规格
启动隔离本地FastAPI并读取OpenAPI。Schemathesis依据规格生成请求,不能只测试一个手写SDK函数。
本题本地命令
python run.py3. 运行原生探索
按固定seed与max-examples运行fuzzer,实际出现500。保留完整原生文本,不把普通Python构造JSON当作fuzz执行。
4. 保存可重放请求
从失败报告核对curl、Content-Type和空列表body。另存使用BASE_URL的replay.sh,避免分发作者临时端口。
5. 明确空集合同
修复参考对空列表返回mean:null/count:0。不要仅吞ZeroDivisionError再假称均值是0;合同由业务含义决定。
6. 重放同一反例
关闭坏服务、在同一隔离入口启动修复参考,原样curl真实回200。页面保留前后HTTP差异而非只给pass计数。
7. 复核探索边界
保存OpenAPI源码、fuzzer报告和curl响应。需要继续重新探索其他边界;本文只证明该反例修复,不证明自动缩到全局最小或所有输入安全。
怎样确认已经完成
- 真正HTTP触发失败
- 导出的请求可独立重放
- 不能只验证生成SDK,也不承诺已证明全局最小反例
- 已运行Schemathesis原生OpenAPI生成真实HTTP,触发空列表500;保存其curl复现并在修复后重放为200/null。未宣称全局最小反例或AI修复已调用。
常见问题
接口几个正常样例都过了,AI 怎么找到隐藏的500?
从OpenAPI驱动原生生成真实HTTP请求,再保留每个失败的请求和响应。本文常规样例通过,但空列表触发真实500。
Schemathesis 怎么导出能重放错误的 curl 请求?
核对失败报告中的完整curl方法、路径、请求头和body,换成自己的BASE_URL后独立重放。本文同一个空列表请求修复后回200,不宣称全局最小输入。
哪些功能已经实际执行?
已运行Schemathesis原生OpenAPI生成真实HTTP,触发空列表500;保存其curl复现并在修复后重放为200/null。未宣称全局最小反例或AI修复已调用。



