不稳定测试 Flaky Test
同一个结算测试没有改代码、输入或环境,却一会儿通过一会儿失败,团队需要保留每次结果并隔离不稳定来源。
技术栈与工具约 10 分钟 · 从真实需求理解
1不稳定测试为什么同样条件下会一会儿通过、一会儿失败?
FLAKY TEST · CHECKOUT-031同一测试,不同结果
输入和环境不变,结果却不能稳定复现。
SAME CONDITION
INPUTorder=O-1024
COMMITrelease-013
ENVci-linux · 4 workers
等待第一次运行
RETRY COUNT#0
每次运行都保留原始结果。
Flaky Test 是在代码、输入和环境看起来没有变化时,结果却不能稳定复现的测试。它可能这次通过、下一次失败、重试又通过;因此最后一次 PASS 不能抹掉中间的 FAIL,团队需要保留运行证据并继续隔离原因。
- 先锁定相同的输入、代码版本和环境,确保比较的是同一个测试条件。
- 记录每一次 PASS、FAIL 和 retry 次数,不要只保留最后一次结果。
- 出现结果摇摆时标记 FLAKY,并把时间、网络、并发、数据和外部依赖作为诊断范围。
2重试通过不等于测试已经稳定
普通失败通常能在相同条件下稳定复现,而 Flaky Test 的危险在于失败不会每次出现。多重试可能暂时得到 PASS,却把时间竞争、异步等待、共享数据或外部依赖的问题藏起来;重试是收集证据的手段,不是修复结论。
- 看到 PASS → FAIL → PASS 且输入和环境相同,想到 Flaky Test。
- 看到每次都稳定失败,通常先按普通失败定位,而不是直接叫 flaky。
- 看到 retry 后只保留最后一次 PASS,说明诊断证据被掩盖了。
3一个 Flaky Test 要看哪些证据?
SAME CONDITIONO-1024 · release-013
输入与环境保持一致
ATTEMPTSPASS / FAIL / PASS
每次结果都要保留
RETRY COUNT#1
重试不能抹掉失败
DIAGNOSISISOLATE
检查时间、数据和依赖
拆开一次不稳定测试,可以看到固定条件、运行记录、重试计数和诊断边界。固定条件证明比较公平,运行记录证明结果摇摆,retry 计数说明重复了几次,诊断边界帮助团队继续查原因。
- SAME CONDITION 是相同的输入、代码版本和环境,避免把不同测试混在一起。
- ATTEMPTS 保存每次运行的 PASS 或 FAIL 及其顺序。
- RETRY COUNT 说明为确认不稳定性重复了多少次,但不能替代修复。
- DIAGNOSIS 把时间、数据、并发和外部依赖列为隔离方向,而不是直接放行。
4怎样把 Flaky Test 交给 Agent?
请在相同输入、代码版本和 CI 环境下重复运行这个结算测试,保留每次 PASS/FAIL 和 retry 次数;如果结果出现 PASS、FAIL、PASS,请标记 Flaky,不能只取最后一次通过,并继续隔离时间、数据、并发和外部依赖。
5不用背,看看你能不能判断
1 / 3
什么现象最能说明一个测试可能是 Flaky Test?
请选择一个最符合题意的答案
社区延伸
看别人真实遇到过什么
社区帖子还没有关联到这个词条。