SuperAPI AI 工具集

e2e-test-reviewer

测试与质量

查看项目

更新于 10-16 05:25

技能介绍

用途

e2e-test-reviewer 用于审查、审计或改进现有的 E2E 测试规格文件(spec)以及页面对象模型(POM)文件。当任务涉及“review tests”“improve test quality”“audit specs”“check test…”等时触发。其审查原则与测试框架无关,在 Playwright、Cypress、Puppeteer 存在差异时分别给出代码示例。

主要能力

该技能采用三阶段流程:

第一阶段:自动化 Grep 检查(优先运行)

确定审查目标文件后,先运行 Bash 命令,机械检测已知反模式,再进行 LLM 分析。检查项包括:错误吞噬(.catch(() => {}) / .catch(() => false))、恒真断言(如 toBeGreaterThanOrEqual(0))、布尔陷阱(对非布尔值使用 toBeTruthy)、条件绕过(if 内的 expect)、原始 DOM 查询(规格文件中使用 document.querySelector)、硬编码超时(waitForTimeout / cy.wait(数字))、缺少网络 mock(goto/visit 附近无 route/intercept)等。结果解读:零命中则进入第二阶段;任一命中则逐行报告(含文件:行号);带 // justified 注释的行排除。第一阶段结果需原样输出,LLM 不得重新解释。

第二阶段:LLM 审查(仅主观检查)

第一阶段已检测的模式会被跳过,LLM 只执行主观检查,包括:名称-断言一致性(#1)、缺失 Then(#2)、仅渲染测试(#8)、重复场景(#9)、误导性命名(#10)、过宽断言 + 主语倒置(#11)、不稳定模式的部分判断(#13)、POM 中的 YAGNI(#14)。

第三阶段:覆盖率缺口分析

在第一、二阶段完成后,识别测试套件未覆盖的场景,扫描被测页面/功能并标记缺失项:错误路径(表单校验错误、API 失败、离线、404/500)、边界情况(空状态、最大长度输入、特殊字符、并发操作)、可访问性(键盘导航、屏幕阅读器标签、模态框后的焦点管理)、认证边界(未授权重定向、会话过期、基于角色的可见性)。最多列出 5 个高价值缺失场景作为建议(非要求)。

使用方式

审查清单针对每个非跳过测试及每个变更的 POM 文件逐项执行。注意:带原因注释或原因字符串的 test.skip() 是有意为之,不应标记或移除;只有隐藏失败的中途条件跳过才需标记(见 #6)。

检查分为两级:

Tier 1 — P0/P1(始终检查):

  1. 名称-断言一致性(仅 LLM):测试名称承诺的每个名词都应有对应断言,否则补充断言或重命名。
  2. 缺失 Then(仅 LLM):对 toggle/cancel/close 等操作,应同时验证恢复状态与被取消状态。
  3. 错误吞噬(grep 可检测):规格中不要用 try/catch 包裹断言;POM 中移除 wait/断言方法上的 .catch(() => {}),仅保留 UI 稳定化用途的 catch。
  4. 恒真断言(grep 可检测):如 toBeGreaterThanOrEqual(0)、对恒真字符串的 toBeTruthy()。
  5. 布尔陷阱断言(grep 可检测):对 Locator/ElementHandle 对象使用 toBeTruthy() 恒真;应使用框架内置断言;POM 应暴露元素句柄而非返回 Promise<boolean>。
  6. 条件绕过(grep 可检测):每条测试路径至少包含一个 expect();环境检查移入 beforeEach 或声明级 test.skip()。
  7. 原始 DOM 查询(grep 可检测):使用框架元素 API 而非原始 DOM;仅在框架 API 无法表达条件时使用 evaluate/waitForFunction,并在 POM 中加注释说明。

Tier 2 — P1/P2(时间允许时检查): 8. 仅渲染测试(仅 LLM):仅调用 toBeVisible() 而无交互或内容断言,应至少补充内容、计数或兄弟元素断言之一。 9. 重复场景(仅 LLM):步骤重叠 >70% 的测试应合并;跨文件亦做子集检查。 10. 误导性测试命名(仅 LLM):使用 API/REST 或间接方法时名称应明确说明。 11. 过宽断言(仅 LLM):已知有效值少时优先精确匹配而非 .includes() 或宽松正则。 11b. 主语倒置(仅 LLM):被测的实际值必须作为 expect() 的参数,期望值放入匹配器。 12. 硬编码超时(grep 可检测):不使用显式 sleep;自定义超时应提取为带注释的命名常量。 13. 不稳定模式(仅 LLM + grep):位置选择器 nth()/first()/last() 无注释、无 mock 的网络依赖、动画竞态。 14. 页面对象中的 YAGNI(仅 LLM):删除未被引用的成员;内部专用成员设为私有;新共享工具应被 2+ 规格使用;不要删除被活跃导入使用的工具文件/类。

输出格式

发现按严重程度分组:

## [P0/P1/P2] Task N: [filename] — [issue type]

### N-1. `[test name or POM method]`
- **Issue:** [description]
- **Fix:** [name change / assertion addition / merge / deletion]
- **Code:**
  ```typescript
  // concrete code to add or change

所有发现之后附加汇总表,列出严重级别、数量、主要问题、受影响文件。

## 适用场景

适用于对现有 E2E 测试规格与 POM 文件进行系统性质量审查、审计和改进,尤其当需要自动化机械检测常见反模式并结合 LLM 进行语义级判断与覆盖率分析时。

## 限制

资料中未提供该技能的具体安装命令、依赖、平台支持范围、收费方式或版本信息,这些事实暂未提供。