SuperAPI AI 工具集

investigate-failing-tests

测试与质量

查看项目

更新于 10-16 09:16

技能介绍

用途

该技能用于编排 WebdriverIO 失败测试的诊断与修复流程。它被明确描述为一个推理与路由层(reasoning and routing layer),本身不编写代码,也不直接运行测试,而是把具体动作委派给其他技能或智能体,并管理其中的决策点。

主要能力

  • 从用户输入中提取并规范化失败事实:失败的 spec 文件/路径、失败的测试名称/标题、错误信息与堆栈、环境目标(local/dev/staging/prod)、以及用户提供的近期变更上下文。
  • 按目标解析规则确定 website-analysis 的目标标识:优先使用用户显式 URL,其次使用项目 baseUrl 主机,否则记为 unknown-target。
  • 当缺少错误或堆栈时,委派测试运行以复现并收集失败详情。
  • 加载项目上下文文件 .webdriverio-skills/project-context.* 与自定义规则 .webdriverio-skills/custom-rules.md(若存在)。
  • 在可用时加载 references/website-analysis/<target>/website-analysis.* 以加速路由与组件推理。
  • 结合证据与近期代码变更形成主要根因假设,并在实现修复前与用户确认。
  • 使用有界尝试循环(bounded attempt loop)限制重复修复次数。
  • 分析近期变更与失败证据的关联,包括选择器/页面对象、setup/auth/session 工具、配置/报告器/服务变更、影响执行模式的环境或脚本变更。

委派契约

该技能不直接编辑测试文件,也不直接执行测试命令。它委派到:

  • running-webdriverio-tests 负责执行
  • gathering-context 负责产物收集
  • analyze-website 在缺少路由/组件结构上下文时提供分析
  • writing-webdriverio-code 负责测试侧修复
  • managing-project-customizations 在上下文过期或缺失时刷新
  • skipped-test-manager 处理已确认的应用缺陷

使用方式

工作流依次为:解析用户输入并记录已知失败事实;加载项目上下文与自定义规则;在可用时加载网站分析以加速路由/组件推理;若关键细节缺失则委派一次聚焦的测试运行以获取错误与堆栈;委派 gathering-context 并传入规范化后的失败详情;若路由/组件意图不明确则委派 analyze-website 并将结果合并进假设;分析证据与近期代码变更形成主要根因假设;在实现前与用户确认(接受/调整);若问题属测试侧则委派 writing-webdriverio-code 实施修复;委派测试执行进行验证;以严格尝试上限重复分诊/修复循环。

在请求修复前,需向用户提供:可能的根因(1 个主要、1 个次要)、证据为何支持该判断、预期修复方向、预期验证命令范围,并要求用户在委派实现前明确确认或纠正。

有界循环与防护

测试侧修复使用有界尝试循环:第 1 次实施最有依据的修复,第 2 次根据新失败证据调整,第 3 次做最终聚焦调整。若 3 次后仍失败则停止迭代修复,在存在过期/缺失信号时通过 managing-project-customizations 刷新上下文,并向用户询问缺失的约束、假设或环境事实,绝不继续进行超过 3 次的盲目修复循环。

防钻牛角尖的护栏包括:除非证据要求否则不扩大测试范围;不在一次尝试中混合多个推测性修复;无明确理由不切换环境;不把重试/超时当作根因修复;优先缩小到单个失败测试再进行全量验证。

适用场景

  • 用户报告 WDIO 测试失败且需要诊断加修复编排。
  • 失败细节不完整,需要结构化调查。
  • 存在反复盲目重试或试错编辑的风险。

不适用场景

  • 只需运行测试(应使用 running-webdriverio-tests)。
  • 已明确知道确切的测试修复,只需实现(应使用 writing-webdriverio-code)。
  • 只需收集产物/上下文(应使用 gathering-context)。

输出与限制

输出为简洁的编排摘要,包含:已知输入、当前假设、进行中的委派动作、尝试计数(若在循环中)、有界循环退出时的停止/升级原因。若证据表明是产品/应用行为回归而非测试缺陷,则归类为应用缺陷并转交 skipped-test-manager,同时附上收集到的证据与复现细节。常见错误包括:运行无上限的试错修复循环;在与用户确认假设前就请求代码变更;在证据过期时跳过上下文刷新;把应用缺陷当作仅测试侧修复处理。