技能|测试夹具脆弱假设修复法
> 与知识库 05-技能库/技能|测试夹具脆弱假设修复法.md 一一对应(三处同步之一)。
适用场景
自动化测试在有真实数据的库上跑,因假设过强而误报失败;或测试造的数据清不干净,污染了要打包的源库。
触发词
测试误报、空库假设、rows[0]、测试污染、清理后空库、测试夹具、哨兵定位
操作步骤
- 识别脆弱假设:凡是「取第一条记录」「断言整库为空」「按创建顺序定位」的断言,在库里有存量数据时都不可靠。
- 给测试数据加唯一哨兵:造数据时刻意塞一个不可能与真实数据冲突的标记(本次文件名
【链路测试】),让后续能精确WHERE name LIKE '%链路测试%'。 - 定位改成按条件查询:
rows[0]→ 按哨兵/唯一键查自己那条记录。 - 清理断言改成「自己没了」:
整库为空→自己造的展会及其流水已删除,其余真实数据本就该保留。 - 跑完核验污染:查哨兵残留 + 孤儿流水数;发现源库被污染就还原备份重导。
- 复盘测试脚本还有没有别的顺序依赖,一并改掉。
注意边界
- 测试脚本是产品的一部分,但它出问题不应该靠改产品来绕过。
- 「整库为空」这类断言只在专用测试库上成立;共库测试一律用哨兵。
- 改完测试要单独跑一遍确认通过,再跑全套检查。
- 测试数据清理要走正规删除接口(会级联删流水),不要直接 SQL 删主表留下孤儿。
反例避雷
| 反例 | 为什么错 | 正确做法 |
|---|---|---|
| 用 rows[0] 当刚建的记录 | 库里有真实数据时取到别人 | 按哨兵/唯一键查 |
| 断言清理后整库为空 | 真实数据被当成残留,永远失败 | 只断言自己造的数据被删 |
| 靠改产品逻辑让测试通过 | 把好功能改坏 | 修测试,不修产品 |
| 测试跑完不核验源库 | 残留数据进了安装包 | 查哨兵残留 + 孤儿流水,必要时还原重导 |
| 直接 SQL 删主表 | 留下孤儿流水,统计出错 | 走级联删除接口 |
关联
- 总纲技能:
05-技能库/技能|安检数据导入与发版打包流程.md - 项目:
D:\安检系统(FastAPI + SQLite 按年分库 + PyInstaller/Inno Setup 桌面壳) - 脚本:
scripts/import_flow_test.py(已加【链路测试】哨兵)
版本记录
| 版本 | 日期 | 变更 |
|---|---|---|
| v1.0.0 | 2026-09-29 | 首版实战固化(V4.5.7):B1/B2/C2 三项误报经哨兵改造后全部通过,源库零残留 |