Web 应用测试
全面发现并测试,不放过任何未测试的路由。
🔧 运行时脚本
运行这些脚本进行自动化浏览器测试:
| 脚本 | 用途 | 用法 |
|---|
scripts/playwright_runner.py | 基本浏览器测试 | python scripts/playwright_runner.py https://example.com |
| 截图 | python scripts/playwright_runner.py <url> --screenshot |
| 无障碍检查 | python scripts/playwright_runner.py <url> --a11y |
需要: pip install playwright && playwright install chromium
1. 深度审计方法
先进行发现
| 目标 | 查找方法 |
|---|
| 路由 | 扫描 app/、pages/ 和路由文件 |
| API 端点 | 搜索 HTTP 方法 |
| 组件 | 查找组件目录 |
| 功能 | 阅读文档 |
系统化测试
- 梳理 - 列出所有路由/API
- 扫描 - 确认它们能正常响应
- 测试 - 覆盖关键路径
2. Web 测试金字塔
/\ E2E (Few)
/ \ Critical user flows
/----\
/ \ Integration (Some)
/--------\ API, data flow
/ \
/------------\ Component (Many)
Individual UI pieces
3. E2E 测试原则
测试内容
| 优先级 | 测试 |
|---|
| 1 | 正常流程中的用户操作 |
| 2 | 身份验证流程 |
| 3 | 关键业务操作 |
| 4 | 错误处理 |
E2E 最佳实践
| 实践 | 原因 |
|---|
| 使用 data-testid | 选择器稳定 |
| 等待元素出现 | 避免测试不稳定 |
| 清理状态 | 确保测试相互独立 |
| 避免依赖实现细节 | 测试用户行为 |
4. Playwright 原则
核心概念
| 概念 | 用途 |
|---|
| 页面对象模型 | 封装页面逻辑 |
| Fixtures | 可复用的测试设置 |
| 断言 | 内置自动等待 |
| Trace Viewer | 调试失败情况 |
配置
| 设置 | 建议 |
|---|
| 重试次数 | 在 CI 中设为 2 |
| Trace | on-first-retry |
| 截图 | on-failure |
| 视频 | retain-on-failure |
5. 视觉测试
适用场景
策略
- 基准截图
- 在变更时进行比较
- 检查视觉差异
- 更新有意进行的变更
6. API 测试原则
覆盖范围
| 范围 | 测试 |
|---|
| 状态码 | 200、400、404、500 |
| 响应结构 | 符合架构 |
| 错误消息 | 对用户友好 |
| 边界情况 | 空值、大数据、特殊字符 |
7. 测试组织
文件结构
tests/
├── e2e/ # Full user flows
├── integration/ # API, data
├── component/ # UI units
└── fixtures/ # Shared data
命名约定
| 模式 | 示例 |
|---|
| 按功能划分 | login.spec.ts |
| 描述性命名 | user-can-checkout.spec.ts |
8. CI 集成
流水线步骤
- 安装依赖
- 安装浏览器
- 运行测试
- 上传产物(跟踪记录、截图)
并行化
| 策略 | 用途 |
|---|
| 按文件 | Playwright 默认方式 |
| 分片 | 大型测试套件 |
| 工作进程 | 多个浏览器 |
9. 反模式
| ❌ 不要 | ✅ 应该 |
|---|
| 测试实现细节 | 测试行为 |
| 硬编码等待时间 | 使用自动等待 |
| 跳过清理 | 隔离测试 |
| 忽略不稳定的测试 | 修复根本原因 |
请记住: E2E 测试开销很大,仅用于关键路径。