05-测试-QA测量环境隔离与失真排除法
一、适用场景
自承载测试服务跑功能 / 性能 / 稳定性评分时出现分数波动、偶发超时、疑似产品缺陷;
需要先判定「这是产品真问题,还是测量环境造成的假象」,再决定动不动产品代码。
本例为 HFMS 的 8 件 QA 套件(_qa_probe/_qa_func_full/_qa_perf/_qa_sec/_qa_ui/_qa_biz/_qa_code/_qa_alldim_full)。
二、操作步骤
- 数据库隔离(最关键):在
import app之前用 sqlite3 在线备份 API 制作一致快照副本,
并置DB_PATH环境变量(config中 env 优先于config.env),让测试读写全程落在副本。
锚点程序源代码/tools/_qa_func_full.py:33-65:_QA_DIR/DBPATH、_src.backup(_dst)、
DELETE FROM page_cache(冷态起步,保证测量确定)、os.environ['DB_PATH'] = DBPATH。 - 清残留按精确路径逐条:
for _suf in ('', '-wal', '-shm')逐个os.path.exists+os.remove(_qa_func_full.py:38-42),严禁通配符。 - 去代理污染:
os.environ.setdefault('no_proxy', '*')+urllib.request.build_opener(..., ProxyHandler({}))双保险。
锚点_qa_func_full.py:18-19,83、_qa_perf.py:17-18,68、_qa_alldim_full.py:18-19。 - 先预热后采样:冷启动首请求含建表/装载(约 2s)属假象,不计入。锚点
_qa_perf.py:85 warm()。 - 多轮取稳健统计:S1 3 次预热 + 5 次采样取最小;S2 多轮并发取「错误 0 的轮次」的中位最小值;S4 同理加固口径。
- 测量期间零并行负载:不得与线上服务或其他 QA 套件同时跑。
- 差异对比法定位:遇到「有时好有时坏」,找成功样本与失败样本逐项比对(大小/权限/顺序/格式/路径),
先排除环境与传输变量,再怀疑产品。
三、注意边界
- 口径校准铁律:确认是测量假象时,改的是评分器 / 口径 / 测量环境,绝不改正确的产品行为。
- 副本落
.workbuddy/qa/hfms_qa_test.db,真实库零污染;读真实库一律mode=ro+ URI。 - 隔离失败要有降级回退并打印告警(
_qa_func_full.py:56-65),不能静默跑在真实库上。 - 所有「性能结论」必须标注测量档位(并发数、是否预热、是否并行),否则不可复现。
四、反例避雷
- ✗ 测试服务与外部服务共用真实库 → 外部任意写操作经
cache_ver全局失效会清空测试服务刚预热的中心页缓存,
使 S1/S2/S4 落入冷渲染(ED 曾现 1695ms / 3836ms);隔离复测后 ED 热路径稳定 39-50ms,产品缓存本身无缺陷。 - ✗ 本机
HTTP_PROXY生效 → urllib 打 localhost 报 502,被误判成服务不可用;必须 no_proxy + 空 ProxyHandler。 - ✗ QA 套件并行争用灌水:p95@100 由 217.8ms 到隔离复测的 52.1ms,差距全是争用。
- ✗ 未预热就计入冷启动首请求(约 2s)→ 拉高全部指标。
- ✗ 把「测量假象」当产品缺陷去改代码 → 越改越偏。
五、代码锚点 / 实战战绩
锚点:
- 程序源代码/tools/_qa_func_full.py:18-19,33-65,83(快照隔离 + 冷态起步 + 去代理)
- 程序源代码/tools/_qa_perf.py:17-18,68,85,140-150(预热 + 稳健统计)
- 程序源代码/tools/_qa_alldim_full.py:18-19(九域单轮覆盖,同样去代理)
- 程序源代码/tools/run_regress.py(6 件统一入口,端口跟随 config.env)
战绩(2026-10-13 阶段 2,纯口径与测量修正、零产品改动):
- 稳定 95.4 → 100(根因=测量环境假象,见反例第 1 条);性能 93.4 → 100(根因=套件并行争用)。
- 系统总分均值 100.0、九域五维均值 100.0;超大页清零(zq 164KB / txn 174KB / hl 176KB,均 < 200KB 阈值)。
- 另修:廉价辅助函数(db.has_admin_password())进循环导致千次级查库 ≈1.1s → 提到循环外只查一次。
六、关联笔记
- 与
05-测试-Web端点性能剖面定位法、05-测试-全流程体检第一原则基线法互补:那两个讲「怎么测」,本技能讲「测出来的数可不可信」。 - 与
02-技术-服务端常驻线程池并发改造法配套:并发改造前后的对照必须在本隔离口径下取得。 - 通用化:任何「指标忽高忽低」的场景,先问「是不是我自己的测量环境在干扰」,再问产品。
七、版本记录
- v1.0(2026-10-16):首版。含 DB 快照隔离、去代理、预热与稳健统计、零并行负载、差异对比法与实战战绩。