首页/开发/软件测试速查/偶发失败的常见根因
自动化测试66 条

偶发失败的常见根因

flaky(偶发失败)的根因大致分四类:等待与同步不足、测试间状态污染、外部依赖不稳定、并发与时序竞争;治理思路是先定位类别,再谈重试与隔离。

软件测试速查开发更新于 2026-10-13

偶发失败的常见根因

flaky(偶发失败)指用例在没有代码变更的情况下时过时不过,根因大致分四类:等待与同步不足、测试间状态污染、外部依赖不稳定、并发与时序竞争。治理思路是先定位类别再分类处置——换执行顺序能复现的多是状态污染,本地稳定 CI 偶发的多是同步不足。统一加重试只会掩盖根因,还抬高执行成本。

根因分类

根因典型信号治理方向
同步不足本地稳定、CI 偶发条件等待替代固定延迟
状态污染换执行顺序可复现用例隔离与自清理
外部依赖第三方接口抖动桩化或显式重试策略
并发竞争高并行才出现关键段串行化或加锁

基本信息

定义无代码变更时同一用例结果不稳定
定位手段单独重跑、换序执行、降并行、查看失败附件
重试定位重试只能当临时止血,不能当治理手段
度量方式按用例统计 flaky 率,进入质量看板跟踪
治理顺序先隔离定位根因,再决定修复、桩化或移除

典型使用场景

  • CI 巡检:对失败用例自动重跑并标记 flaky,输出清单。
  • 发布前决策:区分真失败与 flaky,避免错误阻塞发布。
  • 新用例评审:把「可能引入时序假设」的写法拦在合并前。
  • 季度治理专项:按分类批量修复高频 flaky 用例。
  • 并行度调整:高并行出现的竞争类问题按信号定向排查。
  • 上报口径:flaky 率与失败分布纳入测试健康度周报。
Google 的 flaky 治理经验:先识别来源再分类处置,而不是统一加重试。
失败附件先看再改:截图、trace、日志与网络记录能把四类根因直接缩小到一类。
新引入的 flaky 优先当天处理:拖到积压后,定位成本随上下文丢失急剧上升。

易错点

  • 直接给全量用例加重试:根因被掩盖且执行成本上升,flaky 率反而越治越高。
  • 只统计失败率不做分类:治理动作无从下手,讨论停留在「又红了」。
  • 用 flaky 标签关闭用例:覆盖出现真空,问题被标记成「正常现象」。
  • 共享账号与共享数据跨用例复用:互相踩数据的竞争问题伪装成偶发。
  • 忽略时区与时钟:夜间跑与白天跑结果不同,时间相关逻辑未冻结时钟。

数据来源与参考

  • Google Testing Blog《Flaky Tests at Google and How We Mitigate Them》
  • Martin Fowler:FlakyTest 词条(martinfowler.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌