第 18 期 | 基于终端的自动化 UI Testing

更新于 2026/4/5

🎯 学习目标

学完本期你将掌握:

  1. 如何让 Claude Code 驱动 Playwright / Cypress 进行自动化 UI 测试
  2. PM / QA 如何用自然语言描述测试用例让 Agent 执行
  3. 视觉回归测试的实战方法
  4. 从测试结果到 Bug 报告的自动化闭环

📖 核心概念讲解

18.1 为什么 PM / QA 需要关注自动化测试?

传统 QA 流程:
  PM 写验收标准 → QA 手动点击 → 截图记录 →
  发现 Bug → 写 Bug 报告 → 等开发修复
  每轮耗时: 2-4 小时

Claude Code 辅助流程:
  PM 描述用户故事 → Claude 生成测试脚本 →
  自动执行 → 自动截图对比 → 自动生成报告
  每轮耗时: 5-10 分钟

PM 的角色变化:
  ❌ 不需要手动测试
  ❌ 不需要写测试代码
  ✅ 需要清晰描述验收标准
  ✅ 需要审阅自动生成的测试报告

18.2 Playwright 测试生成流程

PM 写的验收标准:
  "用户在首页点击注册按钮,
   填写表单后应看到成功提示"
          │
          ▼
Claude 生成 Playwright 测试:
  test('用户注册流程', async ({ page }) => {
    await page.goto('/');
    await page.click('text=注册');
    await page.fill('[name=email]', '[email protected]');
    await page.fill('[name=password]', '123456');
    await page.click('button[type=submit]');
    await expect(page.locator('.success')).toBeVisible();
  });
          │
          ▼
自动执行并截取关键帧:
  🖼️ screenshot-1: 首页加载
  🖼️ screenshot-2: 注册表单
  🖼️ screenshot-3: 成功提示
          │
          ▼
生成测试报告

💻 模拟 Claude TUI 交互

场景:用自然语言描述测试用例

> 请测试以下用户故事:
  1. 未登录用户访问首页,应看到"登录"按钮
  2. 点击登录,填写正确账密,应跳转到仪表盘
  3. 仪表盘应显示用户名和最近的操作记录
  4. 点击退出登录,应回到首页

╭─ Claude ─────────────────────────────────────────────╮
│                                                      │
│  我来为你生成并执行这些 E2E 测试。                   │
│                                                      │
│  ⚙️ Tool: Bash                                       │
│  $ npm install -D @playwright/test                    │
│  $ npx playwright install chromium                   │
│  ✅ Playwright 安装完成                              │
│                                                      │
│  ⚙️ Tool: Write → tests/e2e/login-flow.spec.ts      │
│  Created 4 test cases matching your user stories     │
│                                                      │
│  ⚙️ Tool: Bash                                       │
│  $ npx playwright test tests/e2e/login-flow.spec.ts  │
│                                                      │
│  📋 测试结果:                                        │
│  ╭────────────────────────────────────────────╮      │
│  │ 测试用例               │ 状态  │ 耗时    │      │
│  │───────────────────────│──────│────────│      │
│  │ ✅ 首页显示登录按钮    │ PASS │ 1.2s   │      │
│  │ ✅ 登录跳转仪表盘      │ PASS │ 2.3s   │      │
│  │ ❌ 仪表盘显示用户信息  │ FAIL │ 3.1s   │      │
│  │ ✅ 退出登录回到首页    │ PASS │ 1.8s   │      │
│  ╰────────────────────────────────────────────╯      │
│                                                      │
│  ❌ 测试 3 失败详情:                                 │
│  Expected: 页面包含用户名 "测试用户"                │
│  Actual: 用户名区域为空                              │
│  📸 截图已保存: test-results/screenshot-fail.png     │
│                                                      │
│  🔍 Tool: Read → src/pages/Dashboard.tsx             │
│  发现了原因!useUser() Hook 的返回值                 │
│  在 SSR 时为 null,客户端渲染时才有值。             │
│                                                      │
│  ⚙️ Tool: Edit → src/pages/Dashboard.tsx             │
│  添加了加载状态判断: if (!user) return <Loading/>    │
│                                                      │
│  ⚙️ Tool: Bash → $ npx playwright test (重新运行)   │
│  ✅ ALL 4 TESTS PASSED                               │
│                                                      │
│  🎉 测试全部通过!自动修复了仪表盘的 SSR 问题。     │
│                                                      │
╰──────────────────────────────────────────────────────╯

💻 代码演示

# ✅ 从验收标准生成并执行测试
claude "基于以下验收标准生成 Playwright 测试:
  - 商品搜索应返回相关结果
  - 空搜索应显示提示信息
  - 搜索结果应能翻页
  运行测试并报告结果"

# ✅ 视觉回归测试
claude "截取以下页面的全屏截图:
  /dashboard, /settings, /profile
  与 screenshots/ 目录下的基线对比,
  报告任何视觉差异"

# ✅ 跨浏览器测试
claude "在 Chromium、Firefox 和 WebKit 上
  运行登录流程测试,对比不同浏览器的结果"

# ✅ 性能测试
claude "用 Playwright 测量首页首次加载时间,
  记录 LCP、FID 和 CLS 指标"

🔧 涉及的 Tools

工具 测试阶段 作用
Bash 环境安装 安装 Playwright 和浏览器
Write 脚本生成 创建测试文件
Bash 测试执行 运行 playwright test
Read Bug 定位 读取失败相关源文件
Edit Bug 修复 修改代码并重跑测试

📝 本期要点回顾

  1. PM / QA 用 自然语言描述验收标准,Claude 生成测试代码
  2. 测试失败时 Claude 自动 定位源码 → 修复 → 重跑
  3. 视觉回归测试可以 截图对比,捕捉 UI 变化
  4. Playwright 支持 多浏览器,Claude 可以自动化跨浏览器测试
  5. 适合对编码不熟悉的 PM 和 QA 快速验证功能

🔗 参考资料