评审

review
分类通用
作者Alireza Rezvani
许可MIT
评分4.20/5
使用5.3K

审查 Playwright 测试

系统地审查 Playwright 测试文件,检查反模式、缺失的最佳实践以及覆盖率漏洞。

输入

$ARGUMENTS 可以是:

  • 文件路径:审查该特定测试文件

  • 目录:审查该目录下的所有测试文件

  • 为空:审查项目 testDir 中的所有测试

步骤

1. 收集上下文

  • 读取 playwright.config.ts 以获取项目设置
  • 列出范围内所有的 *.spec.ts / *.spec.js 文件
  • 如果审查单个文件,同时检查相关的 Page Object 和 Fixtures

2. 根据反模式检查每个文件

从本技能目录加载 anti-patterns.md。检查所有 20 种反模式。

严重 (必须修复):
1. 使用了 waitForTimeout()
2. 非 Web-first 断言 (expect(await ...))
3. 使用硬编码 URL 而非 baseURL
4. 在存在 Role-based 选择器时使用 CSS/XPath 选择器
5. Playwright 调用缺失 await
6. 测试之间共享可变状态
7. 依赖测试执行顺序

警告 (建议修复):
8. 测试长度超过 50 行(考虑拆分)
9. 使用魔术字符串而非命名常量
10. 缺失错误/边缘情况测试
11. 使用 page.evaluate() 处理定位器可完成的操作
12. test.describe() 嵌套超过 2 层
13. 测试名称过于通用(如 "should work", "test 1")

提示 (可考虑):
14. 包含 5 个以上定位器的页面未使用 Page Object
15. 使用内联测试数据而非 factory/fixture
16. 缺失可访问性 (accessibility) 断言
17. UI 密集型页面缺失视觉回归测试
18. 未检查控制台错误断言
19. 使用网络空闲等待 (network idle) 而非特定断言
20. 缺失 test.describe() 分组

3. 为每个文件评分

基于以下标准评分为 1-10 分:

  • 9-10: 生产就绪,遵循所有黄金法则

  • 7-8: 良好,有微小改进空间

  • 5-6: 功能正常但存在反模式

  • 3-4: 存在重大问题,可能不稳定 (flaky)

  • 1-2: 需要重写

4. 生成审查报告

针对每个文件:

code
## <文件名> — 分数: X/10

严重

  • 第 15 行: waitForTimeout(2000) → 使用 expect(locator).toBeVisible()
  • 第 28 行: CSS 选择器 .btn-submitgetByRole('button', { name: "submit" })

警告

  • 第 42 行: 测试名称 "test login" → "should redirect to dashboard after login"

建议

  • 考虑添加错误场景:输入无效凭据会发生什么?

5. 全项目审查

如果审查整个测试套件:

  • 为每个文件创建子代理进行并行审查(最多 5 个并发)

  • 对于超大型套件,使用 /batch

  • 将结果汇总到摘要表中

6. 提供修复方案

针对每个严重问题,提供修正后的代码。询问用户:“是否应用这些修复?[是/否]”

如果用户同意,使用 Edit 工具应用所有修复。

输出

  • 逐文件的审查报告及评分
  • 摘要:总文件数、平均分、严重问题总数
  • 可执行的修复列表
  • 识别出的覆盖率漏洞(无测试的页面/功能)