Files
aurak/docs/tests/playwright-agent-map.md
T
Developer e12d5aafbf chore: 清理根目录冗余文件(旧文档/启动脚本/配置等)
删除: FEATURE_SUMMARY.md / QUICK_START.md / STARTUP.md
       INTERNAL_DEPLOYMENT_GUIDE.md / INTERNAL_DEPLOYMENT_SUMMARY.md
       start-server.bat / start-web.bat / .dockerignore

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 14:34:45 +08:00

210 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Playwright 三 Agent 应用指南
> 三个 Agent**Generator**(录制生成) · **Planner**(规划编排) · **Healer**(自我修复)
---
## 一、三 Agent 的本质区别
| Agent | 命令 | 作用 | 适合谁用 |
|-------|------|------|---------|
| **Generator** | `npx playwright codegen` | 录制浏览器操作,自动生成 `.spec.ts` 脚本 | 初学者、快速原型 |
| **Planner** | `npx playwright codegen --target test` | 编排多步测试流程,指定截图/断言点 | 测试设计者 |
| **Healer** | `npx playwright test --trace on` | 失败时自动重试 + 记录完整 DOM 快照和网络日志 | CI、调试排查 |
---
## 二、当前测试脚本 vs Playwright Agent 使用对照
```
脚本 Generator Planner Healer 测试层面
────────────────────────────────────────────────────────────────────────
test-systematic.mjs ❌ ❌ ❌ API + 原生 Playwright
test-full-coverage.mjs ❌ ❌ ❌ 纯 API(无 UI
test-assessment-smoke.mjs ❌ ❌ ❌ API + 原生 Playwright
test-e2e-assessment-full-flow ❌ ❌ ❌ API + 原生 Playwright
test-p2-advanced.mjs ❌ ❌ ❌ 纯 API
test-concurrent-assessments ❌ ❌ ❌ 纯 API
test-user-lifecycle.mjs ❌ ❌ ❌ API + 原生 Playwright
test-permission-flow.mjs ❌ ❌ ❌ API + 原生 Playwright
test-multiround.mjs ❌ ❌ ❌ 原生 Playwright
exam-organizer.mjs ❌ ❌ ❌ API + 原生 Playwright
```
**现状**: 所有脚本都用 `chromium.launch({ headless: true })` 手写,没有用 `@playwright/test` 框架,
也没有用三个 Agent 的任何功能。
---
## 三、各 Phase 应该怎么用 Playwright Agent
### Phase 0 — 系统测试(回归用)
```
阶段: 每次代码变更后必跑
策略: 已有脚本完全覆盖,保持现状
Agent 使用: 不需要
```
### Phase 1 — 新功能开发时的 UI 测试
```
┌──────────────────────────────────────────────────────────────────┐
│ Generator 应用场景 │
│ │
│ 开发完一个新页面/功能后: │
│ │
│ $ npx playwright codegen http://localhost:13001 │
│ │
│ 1. 浏览器自动打开,操作你想测试的流程 │
│ 2. 右侧代码面板同步生成 Playwright 脚本 │
│ 3. 点击 "Copy" 复制到测试文件 │
│ 4. 去掉 `page.close()` 等冗余行 │
│ 5. 加入你的断言 (expect) │
│ │
│ 生成示例: │
│ await page.goto('/assessment'); │
│ await page.click('text=AI协作技巧-对话测评'); │
│ await page.click('text=开始专业评估'); │
│ await page.waitForSelector('text=问题 1'); │
│ expect(await page.textContent('body')).toContain('问题 1'); │
└──────────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────┐
│ Planner 应用场景 │
│ │
│ 需要编排多步骤、多断言的复杂测试场景时: │
│ │
│ $ npx playwright codegen --target test -o tests/assess.spec.ts │
│ │
│ 此模式会生成 @playwright/test 格式的代码,包含: │
│ - test.describe 分组 │
│ - test() 用例函数 │
│ - expect() 断言 │
│ - 自动截图点 │
│ │
│ 适合场景: 考核全流程(选模板→答题→看结果) │
│ 管理员配置(创建模板→创建用户→分配权限) │
└──────────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────┐
│ Healer 应用场景 │
│ │
│ 当 UI 测试在 CI 中因未知原因失败时: │
│ │
│ $ npx playwright test --trace on │
│ │
│ Healer 自动做 3 件事: │
│ 1. 自动重试最多 2 次(防 flaky) │
│ 2. 失败时保存 Trace 文件(含 DOM 快照 + 网络日志 + 控制台输出) │
│ 3. 用 `trace.playwright.dev` 可交互式回放每一步 │
│ │
│ 查看 Trace: │
│ $ npx playwright show-trace test-results/**/trace.zip │
│ │
│ 在 Trace Viewer 中可以看到: │
│ - 页面截图时间线(每步操作前后的截图) │
│ - Console 输出(包括 error/warning
│ - 网络请求(API 返回内容和状态码) │
│ - DOM 快照(操作瞬间的 HTML) │
└──────────────────────────────────────────────────────────────────┘
```
### Phase 2 — 调试已有测试失败
```
当前脚本(chromium.launch 模式)不支持 Healer 自动重试,
因为 autofix/healing 是 @playwright/test 框架的特性。
如果要在现有脚本中用 Healer,需要改成 @playwright/test 格式:
// 当前写法(无 Healer
const browser = await chromium.launch({ headless: true });
const page = await browser.newPage();
// 改写成 @playwright/test(带 Healer
import { test, expect } from '@playwright/test';
test('考核全流程', async ({ page }) => {
await page.goto('/assessment');
// 失败时自动重试 2 次
// 失败时自动保存 trace.zip
// 失败时自动截图
});
```
### Phase 3 — 编写新测试的标准流程
```
Step 1: Generator 录制
$ npx playwright codegen http://localhost:13001
→ 操作界面 → 复制生成的代码
Step 2: Planner 编排
将复制代码粘贴到 .spec.ts 文件
加入 describe/test/expect 结构
设置截图断言点
Step 3: Healer 验证
$ npx playwright test --trace on
→ 自动运行所有测试
→ 失败自动重试
→ 失败生成 Trace
→ 用 show-trace 分析
```
---
## 四、现有脚本改用 @playwright/test 的改造方案
```
改造收益:
✅ 自动重试(flaky 测试不误报)
✅ Trace Viewer(失败时全量调试信息)
✅ HTML Report(可视化测试报告)
✅ 并行执行(多 worker 加速)
✅ 内置 expect 断言库
改造成本:
⏱ 每个脚本约 15 分钟改造时间
🔧 需要创建 playwright.config.ts
📁 测试文件需迁到 tests/ 目录
关键改动点:
1. import { chromium } from 'playwright'
→ import { test, expect } from '@playwright/test'
2. const browser = await chromium.launch({ headless: true })
→ test('name', async ({ page }) => { ... })
3. 自定义 assert() 函数
→ expect(actual).toBe(expected)
4. 无自动重试
→ test.retries(2) 或 playwright.config.ts 中全局配置
配置文件 playwright.config.ts:
export default defineConfig({
testDir: './tests',
retries: 2, ← Healer: 失败重试
trace: 'on-first-retry', ← Healer: 首次重试时生成 Trace
screenshot: 'on', ← Healer: 每次操作截图
workers: 4, ← Planner: 并发执行
reporter: 'html', ← Planner: HTML 报告
});
```
---
## 五、总结对照表
| 场景 | 当前做法 | 用 Generator | 用 Planner | 用 Healer |
|------|---------|:-----------:|:----------:|:---------:|
| 回归测试 142项 | `test-systematic.mjs` | ❌ | ❌ | ❌ |
| 烟雾测试 | `test-assessment-smoke.mjs` | ❌ | ❌ | ❌ |
| 端到端考核流程 | `test-e2e-assessment-full-flow.mjs` | ❌ | ❌ | ❌ |
| 编写新 UI 测试 | 手写 locator | ✅ **录制** | ✅ **编排** | — |
| 调试 CI 失败 | 看日志 | — | — | ✅ **Trace** |
| 复杂场景编排 | 手写断言 | — | ✅ **结构** | — |
| 新页面回归 | 手写 | ✅ **快速生成** | — | ✅ **自愈** |