| name | e2e-coverage-analyzer |
| description | 分析当前分支 git 改动,检查 e2e 测试用例覆盖情况,并可补充缺失的测试用例 |
| allowed-tools | ["Bash(git diff:*)","Bash(git --no-pager diff:*)","Bash(git merge-base:*)","Bash(git branch --show-current:*)","Bash(ls:*)","Bash(find:*)","Read","Glob","Grep","Write","Bash(mkdir:*)"] |
E2E 覆盖率分析器
分析当前分支相对于 main 的改动,评估 tests/e2e/ 中现有测试用例是否足以覆盖改动涉及的功能点。
上下文
- 当前分支: !
git branch --show-current
- 分叉点 commit: !
git merge-base main HEAD
- 改动文件列表: !
git --no-pager diff --name-only main...HEAD
- 改动内容摘要(统计): !
git --no-pager diff --stat main...HEAD
- 改动详细内容: !
git --no-pager diff main...HEAD
现有 e2e 测试用例清单
!find tests/e2e -maxdepth 1 -type d ! -path tests/e2e | sort
你的任务
按以下四个阶段执行,每个阶段输出清晰的中文报告。
阶段一:改动分析
-
过滤核心逻辑文件:从改动文件列表中排除以下非逻辑文件类型:
- 配置文件:
*.config.*, *.env*, tsconfig*.json, .eslintrc*, .prettierrc*
- 类型定义文件:
*.d.ts, types/*.ts, interfaces/*.ts
- 文档和说明文件:
*.md, CHANGELOG*, LICENSE*
- 锁定文件:
package-lock.json, pnpm-lock.yaml, yarn.lock
- CI/CD 配置:
.github/**, .gitlab-ci*, Dockerfile*, docker-compose*
- 测试文件本身:
**/*.test.ts, **/*.spec.ts, tests/**, __tests__/**
保留以下类型的文件作为核心逻辑文件:
src/web/** 下的组件、页面、hooks、store、工具函数
src/server/** 下的服务、路由、控制器、中间件、处理器
src/ 下各模块的源码逻辑文件
-
识别功能点:对每个核心逻辑文件,结合 git diff 的实际改动内容,分析其涉及的功能维度:
- 页面/路由:涉及哪个页面或路由(如
/dashboard)
- UI 组件:涉及哪些 UI 组件(如 MCP 工具表格、对话框、表单等)
- 交互行为:涉及的点击、输入、切换、拖拽等用户操作
- 数据流:涉及的数据请求、状态变更、事件处理
- 视觉呈现:涉及的新增/修改的 UI 元素、样式变化
-
输出改动分析报告,格式如下:
=== 改动分析报告 ===
核心逻辑文件(共 N 个):
1. src/web/pages/Dashboard.tsx
- 涉及页面:Dashboard 页面
- 涉及功能点:新增状态卡片 X、修改表格列 Y
排除的非逻辑文件(共 M 个):
- package.json(依赖变更)
...
阶段二:覆盖匹配
-
读取所有现有 e2e 测试用例:遍历 tests/e2e/ 下每个子目录中的 test.md 文件,提取每个用例覆盖的功能点关键词。
-
建立映射关系:将阶段一识别的功能点与现有测试用例进行匹配。匹配规则:
- 精确匹配:测试用例名称或步骤明确提及了改动的功能点
- 关联匹配:测试用例覆盖了改动所在的页面/组件区域,虽然未直接测试该具体改动,但执行路径会经过相关代码
- 无匹配:改动涉及的功能点没有任何测试用例覆盖
-
输出覆盖匹配报告,格式如下:
=== 覆盖匹配报告 ===
已覆盖的功能点:
| 功能点 | 匹配测试用例 | 匹配类型 |
|--------|-------------|---------|
| Dashboard 页面加载 | 测试Dashboard页面加载 | 精确匹配 |
缺少覆盖的功能点:
| 功能点 | 涉及文件 | 风险等级 |
|--------|---------|---------|
| 新增的 XXX 功能 | src/web/components/XXX.tsx | 高 |
覆盖率总结:
- 总功能点数:N
- 已覆盖:M(X%)
- 未覆盖:K(Y%)
风险等级判定标准:
- 高:涉及新的用户可见功能或交互流程变更
- 中:涉及已有功能的逻辑修改或边界条件变化
- 低:涉及内部实现优化、重构、错误处理改进
阶段三:结论与建议
根据覆盖匹配结果输出结论:
如果全部覆盖(覆盖率 100%):
=== 结论 ✅ ===
当前分支的所有改动均有对应的 e2e 测试用例覆盖:
[列出所有匹配关系]
建议:可以直接提交 PR,或在提交前运行 /e2e 执行全量测试验证。
如果存在未覆盖项:
=== 结论 ⚠️ ===
当前分支存在 N 个缺少 e2e 覆盖的功能点:
[高优先级]
1. [功能点描述] — 涉及文件:xxx
[中优先级]
2. ...
是否需要为这些缺失的功能点创建新的 e2e 测试用例?
回复"是"将继续创建,回复"否"则仅保留上述报告。
特殊情况处理:
- 如果当前分支与 main 无差异(无改动),直接提示用户并退出
- 如果改动仅涉及非逻辑文件(纯配置、文档等),提示用户无需 e2e 覆盖并退出
阶段四:创建测试用例(仅在用户确认后执行)
当用户确认需要补充测试用例时:
-
确定要创建的测试用例列表:按风险等级从高到低排列。
-
为每个缺失的功能点创建 e2e 测试用例,遵循以下规范:
a. 目录命名:使用中文 测试<功能描述> 格式,例如:
b. test.md 格式:
## 前置条件(可选)
如有特殊前置条件在此说明
## 测试步骤
1. 打开页面 http://localhost:9999/dashboard
2. 等待页面加载完成
3. [具体的操作步骤]
4. 截图(关键状态描述)
5. [验证断言]
c. 编写原则:
- 每个步骤是单一、可执行的原子操作
- 使用元素的可辨识特征定位(title、placeholder、文本内容、图标描述)
- 关键状态变化后必须截图
- 必须包含明确的验证断言
- 如需清理测试数据,在最后一步说明
d. 参考现有用例的风格:参考已有的测试用例写法保持一致
-
输出创建结果报告:
=== 测试用例创建报告 ===
已创建以下 e2e 测试用例:
1. tests/e2e/测试XXX/test.md
- 覆盖功能点:...
- 步骤数:N
创建完成后可使用以下命令执行:
/e2e tests/e2e/测试XXX
注意事项
- 本技能只进行分析和测试用例创建,不执行测试。执行测试请使用
/e2e 命令。
- 所有输出使用中文。
- 分析时重点关注用户可感知的功能变化,不过度追求理论上的完美覆盖。