评审
审查 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. 生成审查报告
针对每个文件:
## <文件名> — 分数: X/10
严重
- 第 15 行:
waitForTimeout(2000) → 使用 expect(locator).toBeVisible()
- 第 28 行: CSS 选择器
.btn-submit → getByRole('button', { name: "submit" })
警告
- 第 42 行: 测试名称 "test login" → "should redirect to dashboard after login"
建议
- 考虑添加错误场景:输入无效凭据会发生什么?
5. 全项目审查
如果审查整个测试套件:
- 为每个文件创建子代理进行并行审查(最多 5 个并发)
- 对于超大型套件,使用
/batch
- 将结果汇总到摘要表中
6. 提供修复方案
针对每个严重问题,提供修正后的代码。询问用户:“是否应用这些修复?[是/否]”
如果用户同意,使用 Edit 工具应用所有修复。
输出
- 逐文件的审查报告及评分
- 摘要:总文件数、平均分、严重问题总数
- 可执行的修复列表
- 识别出的覆盖率漏洞(无测试的页面/功能)