用途
test-flakiness 用于从 CI 日志中发现不稳定测试(flaky test)。不稳定测试指在没有代码变更的情况下时而通过、时而失败的测试。该技能会聚合多次运行的通过率、识别间歇性失败,并建议是否隔离或修复。
主要能力
- 解析多种测试结果格式:GdUnit4 的 JUnit XML、Unity 的 NUnit XML、以及纯文本日志(Godot 的 PASSED/FAILED、Unreal 的 Result={Success}/Result={Fail}、Unity 的 Test passed/Test failed)。
- 构建 test_id → 多次运行结果的对照表,识别同时出现 PASS 和 FAIL 的测试。
- 按失败率分档:高(>25%,立即隔离)、中(5–25%,尽快调查修复)、低/疑似(1–5%,监控)。少于 3 次运行时,所有发现均标记为“疑似”。
- 对每个不稳定测试进行原因分类:时序/异步、顺序依赖、随机种子、资源泄漏、外部状态、浮点比较、场景/预制体加载竞态,并给出修复方向。
- 生成对话内摘要表格,包含测试名、系统、失败率、置信度、可能原因和建议。
- 在用户批准后更新 tests/regression-suite.md 的隔离区,并可选写入 production/qa/flakiness-report-[date].md 报告。
使用方式
支持以下模式:
/test-flakiness [ci-log-path]:分析指定的 CI 运行日志文件。/test-flakiness scan:扫描 .github/ 或标准日志输出目录中所有可用的 CI 日志。/test-flakiness registry:读取现有 regression-suite.md 的隔离区,为已知不稳定测试提供修复指导。- 无参数:自动检测,若可访问 CI 日志则执行 scan,否则执行 registry。
运行时会先解析自动化模式配置(project.local.yaml → project.yaml → 默认 collaborative),所有 AskUserQuestion 调用和文件写入遵循 .claude/docs/automation-modes.md。
适用场景
- 打磨阶段(测试已运行多次,统计信号可靠)。
- 当开发者开始把 CI 失败当作“可能是 flaky”而忽略时。
- 在 /regression-suite 识别出需要诊断的隔离测试之后。
限制
- 需要多次运行的测试结果历史;若没有日志数据,技能会停止并询问用户如何获取。
- 少于 3 次运行时,所有发现标记为“疑似”,不执行隔离。
- 隔离机制因引擎而异:Godot(gdUnit4)GDScript 支持 skip 参数;Godot C# 的跳过方式未在资料中提供;Unity(NUnit)使用 [Ignore("flaky: [cause]")];Unreal 的跳过方式未在资料中提供。
- 隔离是临时措施,修复才是目标;技能不会删除测试文件,隔离意味着标注并列入清单。
- 更新 regression-suite.md 和写入报告文件均需用户明确批准。