SuperAPI AI 工具集

flaky-test-detective

测试与质量

查看项目

更新于 10-15 18:37

技能介绍

Flaky Test Detective 是一个用于诊断与修复不稳定测试(flaky tests)的技能。其目标是系统性地识别根因并完成测试稳定化,减少间歇性失败带来的干扰。

用途

该技能面向出现间歇性失败的测试用例,帮助定位并修复导致测试时通时不通的常见原因,并给出稳定化建议与监控方案。

主要能力

  • 归纳常见不稳定测试模式,包括:时序问题、共享状态、随机性、网络依赖。
  • 针对每类问题给出对照示例(问题写法与修复写法)。
  • 提供不稳定测试检测脚本的实现思路:多次运行测试、解析 JSON 报告、统计每个用例的通过/失败次数、计算失败率并输出不稳定用例清单。
  • 提供根因分析框架:依据错误信息归类为 timing、state、randomness、network 或 unknown,并给出对应建议。
  • 提供稳定化检查清单(timing、state、randomness、network、parallelism)。
  • 提供自动修复模式的代码处理思路。
  • 提供在 CI 中监控不稳定测试的配置示例。

常见模式与修复方式(资料示例)

时序问题

问题示例:渲染组件后立即断言元素存在,可能因竞态条件而失败;或使用固定 setTimeout 等待动画完成。

修复示例:使用 waitFor() 等待条件成立,或使用 findBy* 查询(内建等待),并可设置合适的 timeout。

共享状态

问题示例:修改全局变量导致其他测试受影响;数据库数据未清理导致重复创建失败。

修复示例:使用局部变量隔离状态;在 afterEach 中执行清理(如删除测试数据)。

随机性

问题示例:使用随机生成的数据导致断言结果不稳定。

修复示例:使用固定、确定性的测试数据;或在 beforeEach 中为 faker 设置固定 seed。

网络依赖

问题示例:测试直接调用真实外部 API,可能因服务不可用而失败。

修复示例:使用 MSW 等工具 mock HTTP 请求并返回可控数据。

使用方式

  • 检测不稳定测试:编写脚本多次运行测试(示例为 npm test -- --reporter=json),解析结果并统计通过/失败次数,输出失败率与不稳定用例列表;若无不稳定用例则正常结束,否则以非零状态退出。
  • 根因分析:根据错误消息特征判断根因类别(例如包含 timeout 或 not found 归类时序;包含 already exists 或 unique constraint 归类共享状态;包含 expected 与 received 归类随机性;包含 network 或 ECONNREFUSED 归类网络),并给出建议。
  • 稳定化清单:按 timing、state、randomness、network、parallelism 分组执行检查项。
  • 自动修复模式:例如将 screen.getBy 断言包裹进 waitFor;将 getBy 替换为 findBy;在缺少 afterEach 时插入清理逻辑。
  • CI 监控:通过 GitHub Actions 定时任务(示例为每日 2 点)运行测试多次并分析结果。

适用场景

  • 测试在本地或 CI 中偶发失败,需要定位根因并稳定化。
  • 需要建立不稳定测试的检测与报告机制。
  • 需要为团队制定测试稳定性规范与检查清单。
  • 需要在 CI 中长期监控测试稳定性趋势。

限制

  • 资料未提供该技能的安装命令、价格、平台支持范围与版本信息,暂未提供。
  • 示例主要基于 JavaScript/TypeScript 测试生态(如 waitFor、screen、MSW、faker),其他语言与框架的适配方式暂未提供。
  • 检测脚本与自动修复示例为思路性代码,直接用于生产环境前需按项目实际情况调整。