不稳定测试分析 Skill:同一个测试为什么只在某些运行里失败

偶发失败不只是烦人的红灯;它会降低团队对 CI 的信任,并让真正的回归更容易被忽略。首先要把随机现象变成可分类的证据。

不稳定测试分析 Skill 区分产品不稳、时机问题、数据泄漏和环境噪声,再将修复指向责任边界。

本文将用明确的输入、边界和输出组织实践过程,帮助你把结论交给下一个需要据此行动的人。

不稳定测试分析 Skill 用来做什么

不稳定测试分析适合被间歇失败拖慢 CI 的测试团队。它比较运行分布、环境、数据和顺序,帮助团队决定该修复、隔离还是继续观察。

先回到源 Skill

这个 Skill 的完整执行规则在 不稳定测试分析 提示词。源目录还包含 3 个评测用例,用于验证输出是否遵守契约。

它要求特别注意:

  • 不要用盲目重试掩盖问题
  • quarantine 必须有负责人和退出条件
  • 根因结论需要可复现实验证据

用一份项目材料开始

先把当前拿得到的材料摆上来。缺口可以保留,状态必须说实话。

材料这次填什么缺失时的处理
目标与范围分析一组间歇失败的 UI 回归用例,区分产品缺陷、同步问题、环境不稳和数据污染标出不在本轮判断内的链路
版本与环境测试构建、浏览器版本、运行器、数据快照和重试窗口环境不固定时先拆分失败样本
证据重跑结果、视频/截图、日志、trace、资源信号和历史趋势只出现一次的失败标为待复现
决策边界缺陷、同步、环境、数据污染的分类与 Owner隔离用例前写退出条件和复验日期

可以这样调用:

请使用 flaky-test-analysis Skill。

任务:分析一组间歇失败的 UI 回归用例,区分产品缺陷、同步问题、环境不稳和数据污染
输入材料:[版本、链接、日志或报告路径]
范围:[本次包含和排除的对象]
限制:[时间、数据、权限、合规要求]

先审计输入,再按风险和证据强度排序。材料没有证明的内容标为假设,并列出验证方法。

不稳定测试分析要把偶发失败拆成证据

产物要回答的问题最低证据
失败分布失败在什么环境、分支和顺序出现多轮运行记录和失败率
复现条件哪些数据、并发或时间因素能触发最小复现命令和样本
候选原因数据、顺序、资源还是产品缺陷日志、截图、堆栈或指标
处理决定重试、隔离、修复还是继续观察Owner、截止时间和复核信号

没有足够运行次数时,只能写“尚未复现”或“证据不足”,不能写成测试稳定。

在项目里跑一轮

先用一个边界清楚的小回合启动——分析一组间歇失败的 UI 回归用例,区分产品缺陷、同步问题、环境不稳和数据污染。别急着把结果写成报告。先把输入版本、时间窗口和负责人贴到同一处;然后把每个判断连回具体材料;最后只安排一项能改变结论的验证动作。

每次重跑要保留首次失败证据,重试率不能替代根因分类。这一轮交付应当包含:可复查的证据索引、仍然成立的假设、以及下一位同事可以直接执行的动作。这样做很朴素,也很有效。

进阶使用:把一次分析变成持续机制

每次重跑要保留首次失败证据,重试率不能替代根因分类。

每次不稳定测试分析都保存运行次数、环境、数据和测试顺序。代码、依赖或执行器变化后,重新计算失败分布,并区分新问题与历史波动。

三段式 Skill 链

flaky-test-analysischange-impact-analysisregression-test-selection

交接传递内容接收方要检查什么
上游到 flaky-test-analysis来源版本、范围、风险、未决项输入是否过期,冲突是否标记
flaky-test-analysis 到下游判断、证据索引、残余风险、待办产物是否可执行,Owner 是否明确
下游回写 flaky-test-analysis执行结果、缺陷、事实变化是否更新基线与回归范围

交接时传摘要、证据索引和原始材料的位置。信息量足够,结论出了问题也能回到来源。

团队门禁

门禁检查内容未满足时
flaky-test-analysis 输入门禁版本、环境、证据来源和 Owner停止生成,列出缺口
flaky-test-analysis 产物门禁关键结论带依据、状态和影响退回补证据
flaky-test-analysis 执行门禁命令、查询或验证路径可复现标记基础设施或测试问题
flaky-test-analysis 决策门禁残余风险有接受人与日期不进入下一阶段

容易踩的坑

  1. 只重跑一次就宣布 Flaky 已修复。
  2. 看到失败就立刻 quarantine,丢掉失败上下文和影响范围。
  3. 把环境、数据污染和执行顺序混成一个“偶发”标签。
  4. 修复后没有保留前后失败率和重复运行证据。

相关 Skill

不稳定测试要从失败证据、运行范围和回归价值一起判断:

  • 根因分析:区分环境、数据、代码和测试本身的候选原因。
  • 测试报告:固定重试、日志、退出码和失败样本。
  • 回归测试选择:决定隔离期间哪些用例仍需运行。

交付前复核:把判断落到证据

Skill 输出拿到手后,先核对四件事:输入版本是否明确,范围是否完整,每条结论能否回到证据,下一步由谁执行。少一项,报告就容易变成漂亮的猜测。

项目需要留下缺失时
输入边界版本、环境、时间窗口和本次范围标记假设,不写成事实
证据索引日志、报告、Trace、截图或命令输出标记 evidence_pending
结论状态verifiedassumptionblockedpending停止扩大结论
后续动作最小验证命令、负责人和截止时间交付为待办,不进入门禁
source_version: [版本或提交]
scope: [本次包含和排除的对象]
evidence: [日志、报告、Trace 或命令输出]
status: pending
owner: [负责人]
next_action: [最小验证动作]

分析类 Skill 要保留查询条件和时间窗口;执行类 Skill 要保留命令、退出码和失败产物。人工修改也要记录,下一次复核才知道结论从哪里变化。

安装与调用

安装这个 Skill:

npx skills add https://github.com/naodeng/awesome-qa-skills/tree/main/skills/zh/testing-types/flaky-test-analysis -g

安装后,直接使用下文的 flaky-test-analysis 调用词,并附上本次的真实材料。

常见问题

输入还不完整,能开始吗?

能。先交付受限初版:列出已知事实、假设、缺口和最小验证动作。环境、数据或权限缺失时,不写执行结论。

什么时候需要人工确认?

范围取舍、风险接受、生产操作、数据权限和发布决定必须由对应负责人确认。Skill 负责整理证据与选项,不替团队做授权决定。

先用一份真实材料跑通 不稳定测试分析,把输入、产物、人工修改和验证证据留在同一个工作链里。下一次变化发生时,才有东西可以复用。

参考

分享