SuperAPI AI 工具集

test-deep

测试与质量

查看项目

更新于 10-16 04:13

技能介绍

Test Deep 是一个上下文感知的测试编排技能(Supplementary Agent),用于在代码变更后智能选择并运行相关测试,并对失败进行分诊与修复。它不用于编写新测试、审查测试覆盖率、生成单元测试、完整手动测试运行或代码审查,这些场景分别对应 /post-dev-test、/codex-test-review、/codex-test-gen、/verify、/codex-review-fast。

主要能力与工作流:

阶段 0:测试选择。将代码变更映射到测试目标。策略优先级为:1)Git diff 文件名映射(默认,通过 Glob 将变更文件映射到测试文件);2)框架原生方式(Jest --changedSince、Vitest --changed);3)全量套件回退(配置变更、无映射、--all 标志)。步骤包括收集变更文件(未暂存+已暂存+未跟踪的并集,--branch 使用 merge-base)、应用文件名映射规则生成候选测试路径、Glob 确认候选存在、按层分类(单元/集成/E2E)。全量套件升级触发条件:配置文件变更、CI/CD 文件变更、包依赖变更、无测试文件映射、--all 标志。

阶段 1:渐进式阶梯。逐层执行测试并快速失败。单元层目录模式 test/unit/、test/scripts/lib/、未分类,超时 60 秒,失败即快速失败进入分诊;集成层 test/integration/,超时 300 秒,失败即快速失败进入分诊;E2E 层 test/e2e/,超时 600 秒,进入分诊。快速失败规则:单元失败则跳过集成和 E2E;集成失败则跳过 E2E。--no-fail-fast 可禁用此行为。层检测按目录前缀分类,不匹配集成/E2E 模式的视为单元。执行使用项目配置的测试命令(来自 package.json scripts 或 CLAUDE.md),捕获 stdout/stderr 和退出码。

阶段 2:失败分诊管道。步骤 1 输出解析器:从测试输出提取结构化标签(exit_code、error_signatures[]、failing_tests[]、failing_files[]、env_hints[]、stack_depth),不做分类。步骤 2 LLM 根因分析:将解析器标签和压缩输出送入 LLM 分类,分类包括 code_bug(代码逻辑错误,修复代码)、infra(基础设施问题如端口、依赖,重启/重装)、environment(外部前置条件未满足,修复器目录动作)、flaky(非确定性失败,重试+隔离标记)。LLM 分析前必须进行密钥脱敏(API 密钥、私钥、令牌、密码、助记词、含凭据的 URL)。步骤 3 安全门控动作:将建议的修复器通过安全门路由,安全层(safe)自动运行无需确认,如 retry、clear_cache;副作用层(side-effect)不自动运行,需 AskUserQuestion 确认,如 reinstall_deps、restart_server;破坏性层(destructive)阻止,仅手动,如重置状态、删除表。默认拒绝:未知修复器归为副作用层需确认。

阶段 3:修复器执行。从目录查找修复器,检查层级,执行或提示。核心修复器(插件自带):retry(安全,重新运行失败测试)、clear_cache(安全,清除构建/测试缓存)、reinstall_deps(副作用,删除 node_modules 并重装)、restart_server(副作用,杀死并重启开发服务器)、port_cleanup(副作用,杀死冲突端口上的进程)。宿主扩展:项目特定修复器位于 .claude/test-deep/fixers.md,加载时进行模式验证,缺少必填字段或无效层级则拒绝并警告。修复器循环:安全/已批准的修复器运行后,仅对失败测试重新进入渐进式阶梯,每个失败最多重试 1 次修复器以防止无限循环。

会话产物:每次运行写入产物用于比较和调试。位置 .claude/cache/test-deep/<runId>/,运行 ID 格式 <timestamp>-<shortSHA>-<pid>。文件包括 metadata.json(运行配置:选定测试、阶梯配置、变更文件)、results.json(每层结果:通过/失败、时长、退出码)、triage.json(解析器标签、LLM 分类、所选修复器、结果)、output.log(压缩测试输出,已脱敏)。TTL:保留最近 5 次运行,新运行开始时修剪更早的。latest 符号链接指向最近运行目录。

参数:--all(默认 false,强制全量测试套件)、--layer <unit|integration|e2e>(默认 all,仅运行指定层)、--no-fail-fast(默认 false,无论失败运行所有层)、--no-fix(默认 false,仅分诊跳过修复器执行)、--focus <path>(限制测试选择到路径)、--branch(默认 false,使用 merge-base diff 而非工作树)。

输出格式为 Test Deep 报告,包含测试选择(变更文件数、映射测试文件数及分层、选择方法)、结果表格(层、测试数、通过、失败、跳过、时长)、失败分诊表格(编号、测试、分类、根因、修复器、层级)、已采取动作、门控状态(全部通过或 N 个失败待解决)。

验证清单:测试选择将变更文件映射到测试目标;渐进式阶梯遵守快速失败;分诊管道产生结构化分类;安全门控执行基于层级的执行;LLM 分析前应用密钥脱敏;会话产物写入缓存;不执行 git add / git commit / git push。

限制:该技能运行测试并可能应用安全修复器,但不提交。要提交,用户必须单独调用 /smart-commit --execute。禁止执行 git add、git commit、git push(依据 @rules/git-workflow.md)。

参考文档:references/test-selection.md(Git diff 映射策略+全量套件升级)、references/triage-pipeline.md(解析器标签+LLM 提示+安全门控)、references/fixer-catalog.md(核心修复器+宿主扩展+安全层级)、@rules/logging.md(密钥脱敏策略)、@rules/docs-writing.md(输出格式约定)。