SPT术语库

不稳定测试 Flaky Test

同一个结算测试没有改代码、输入或环境,却一会儿通过一会儿失败,团队需要保留每次结果并隔离不稳定来源。

技术栈与工具约 10 分钟 · 从真实需求理解

1不稳定测试为什么同样条件下会一会儿通过、一会儿失败?

FLAKY TEST · CHECKOUT-031同一测试,不同结果

输入和环境不变,结果却不能稳定复现。

SAME CONDITION
INPUTorder=O-1024
COMMITrelease-013
ENVci-linux · 4 workers
ATTEMPT LOG0 RUNS · RETRY 0
等待第一次运行
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 要看哪些证据?

FLAKY TEST · CHECKOUT-031稳定性证据
01
SAME CONDITIONO-1024 · release-013

输入与环境保持一致

02
ATTEMPTSPASS / FAIL / PASS

每次结果都要保留

03
RETRY COUNT#1

重试不能抹掉失败

04
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?

请选择一个最符合题意的答案

选择答案后自动进入下一题

社区延伸

看别人真实遇到过什么

社区帖子还没有关联到这个词条。