测试选择是什么
测试选择(test selection)是在全量用例里挑「与本次变更相关、最值得跑」的子集执行:按变更影响映射、历史失败率、风险标签或人工分级来选。目标是在管住质量风险的前提下把回归时间压下来;核心风险是漏选,必须用定期全量跑作为兜底。
基本信息
| 选择依据 | 变更影响映射、历史失败记录、风险等级标签、用例新旧 |
|---|---|
| 常见实现 | 按目录/标记过滤、按 git 变更映射模块、平台级影响分析 |
| 标签先行 | 给用例打上手写标签(模块、链路、风险级):选择规则都要落在标签上 |
| 兜底机制 | 每日或发版前跑一次全量,校准选择规则的漏检率 |
| 度量 | 漏检率、节省时长、选择精度三条一起看 |
| 适用边界 | 大型仓库效果最明显;小项目维护映射的收益可能为负 |
选择手段示例
选择手段示例
pytest -m "smoke" # 提交门禁:只跑冒烟标记
pytest --lf # 只重跑上次失败的用例
pytest tests/payment tests/order # 按本次变更的目录选择相关模块
# 变更到公共依赖(工具库、序列化层)时:影响面是全量,直接跑全量而不是贪快典型使用场景
- 提交门禁限时:把 15 分钟预算花在最可能出问题的用例上
- 大仓库回归瘦身:把四小时全量压到半小时的分层策略
- 发版前聚焦:按本次发布范围选高风险模块
- 本地开发快速反馈:先 --lf 重跑失败,再按目录跑相关集
- 灰度发布验证:按影响面挑选对应链路用例
- 成本控制:避免每次提交都全量重跑造成资源浪费
选择依据对比
| 依据 | 优点 | 风险 |
|---|---|---|
| 变更映射 | 直觉最准,直接对准本次修改 | 映射表过期即漏选 |
| 历史失败 | 优先验证薄弱区域 | 长期通过的用例可能永远不跑 |
| 风险标签 | 业务语义清晰,易解释 | 标签维护不到位就失真 |
| 用例新旧 | 新用例必跑,防未执行缺陷 | 与覆盖无关,只解决一部分问题 |
选择规则要盯漏检率:每周用一次全量对照,发现被规则漏掉的失败用例,就补映射或调整权重。
新增与修改的用例永远全跑,不进选择池——否则新用例永远选不中,等于没写。
公共库变更要单独识别:序列化、鉴权、日志这类底层改动的影响面接近全量,按目录映射会严重漏选。