解决 E2E 门禁依赖后端导致形同虚设的问题: - 新增 page.route() API Mock 模式,零后端依赖 - 文档化 mock JWT 生成、addInitScript 注入、catch-all 兜底等关键模式 - 整理 6 个常见陷阱及解决方案 - 明确 Gate 4 判定标准和适用场景 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
144 lines
3.9 KiB
Markdown
144 lines
3.9 KiB
Markdown
---
|
||
name: dev-test
|
||
description: 软件测试技能。用于单元测试、集成测试、E2E测试、测试用例设计。支持 Go、Vue、React、iOS、Android 等多平台测试。
|
||
---
|
||
|
||
# 软件测试 Skill (dev-test)
|
||
|
||
## 子文件索引
|
||
|
||
| 文件 | 内容 |
|
||
|------|------|
|
||
| `go-testing.md` | Go 后端测试 (testify + test DB + httptest)。**biz 层禁止 mock,必须用真实 PostgreSQL test DB** |
|
||
| `frontend-testing.md` | Vue (Vitest) + React (Jest) 前端测试 |
|
||
| `ios-testing.md` | iOS 测试 (XCTest + Swift Concurrency) |
|
||
| `android-testing.md` | Android 测试 (JUnit + Espresso + Compose) |
|
||
| `e2e-testing.md` | E2E Playwright:API Mock 冒烟测试(无后端)+ 全链路集成测试 |
|
||
|
||
---
|
||
|
||
## 测试金字塔
|
||
|
||
```
|
||
/\
|
||
/ \ E2E (少量)
|
||
/----\
|
||
/ \ 集成测试 (适量)
|
||
/--------\
|
||
/ \ 单元测试 (大量)
|
||
/------------\
|
||
```
|
||
|
||
| 类型 | 范围 | 速度 | 数量 |
|
||
|------|------|------|------|
|
||
| 单元测试 | 函数/方法 | 快 | 多 |
|
||
| 集成测试 | 模块交互 | 中 | 适量 |
|
||
| E2E 测试 | 完整流程 | 慢 | 少 |
|
||
|
||
---
|
||
|
||
## 测试命令速查
|
||
|
||
| 平台 | 命令 | 详见 |
|
||
|------|------|------|
|
||
| Go | `make test` / `go test ./...` | `go-testing.md` |
|
||
| Vue | `npm run test` | `frontend-testing.md` |
|
||
| React | `npm test` | `frontend-testing.md` |
|
||
| iOS | `xcodebuild test` | `ios-testing.md` |
|
||
| Android | `./gradlew test` | `android-testing.md` |
|
||
| E2E (Mock 冒烟) | `npm run test:e2e:smoke-mock` | `e2e-testing.md` §API Mock |
|
||
| E2E (全链路) | `npm run test:e2e` | `e2e-testing.md` §全链路 |
|
||
| E2E (Coolbuy PaaS) | `make e2e` | `e2e-testing.md` §Coolbuy |
|
||
|
||
---
|
||
|
||
## Chrome DevTools MCP (AI 浏览器调试)
|
||
|
||
> Google 官方 MCP 服务器,让 AI 助手直接控制和检查 Chrome 浏览器。
|
||
|
||
```bash
|
||
claude mcp add chrome-devtools npx chrome-devtools-mcp@latest
|
||
```
|
||
|
||
| 分类 | 工具 | 说明 |
|
||
|------|------|------|
|
||
| **输入** | `click` / `fill` / `fill_form` / `hover` / `upload_file` | 页面交互 |
|
||
| **导航** | `navigate_page` / `new_page` / `list_pages` / `wait_for` | 页面导航 |
|
||
| **调试** | `evaluate_script` / `list_console_messages` / `take_screenshot` | 调试工具 |
|
||
| **网络** | `list_network_requests` / `get_network_request` | 网络分析 |
|
||
| **性能** | `performance_start_trace` / `performance_stop_trace` | 性能追踪 |
|
||
| **模拟** | `emulate_device` / `throttle_network` / `throttle_cpu` | 环境模拟 |
|
||
|
||
---
|
||
|
||
## 测试用例设计
|
||
|
||
### 等价类划分
|
||
|
||
| 输入 | 有效类 | 无效类 |
|
||
|------|--------|--------|
|
||
| 用户名 | 3-64字符 | <3, >64 |
|
||
| 年龄 | 0-150 | <0, >150 |
|
||
| 邮箱 | 有效格式 | 无效格式 |
|
||
|
||
### 边界值
|
||
|
||
```
|
||
范围 [1, 100]:
|
||
测试点: 0, 1, 2, 99, 100, 101
|
||
```
|
||
|
||
### 测试用例模板
|
||
|
||
```markdown
|
||
## TC-001: 用户登录成功
|
||
|
||
**前置条件**: 用户已注册
|
||
**步骤**:
|
||
1. 输入有效用户名
|
||
2. 输入有效密码
|
||
3. 点击登录
|
||
|
||
**预期**: 跳转到首页
|
||
**优先级**: P0
|
||
```
|
||
|
||
---
|
||
|
||
## 覆盖率目标
|
||
|
||
| 类型 | 目标 |
|
||
|------|------|
|
||
| 行覆盖 | >80% |
|
||
| 分支覆盖 | >70% |
|
||
| 函数覆盖 | >90% |
|
||
|
||
---
|
||
|
||
## 与 ai-proj 集成
|
||
|
||
```bash
|
||
# 创建测试任务
|
||
ai-proj task create --title "[模块] 单元测试"
|
||
|
||
# 记录测试结果
|
||
ai-proj task append-doc --id <taskId> --content "# 测试报告
|
||
- 覆盖率: 85%
|
||
- 通过: 42
|
||
- 失败: 0"
|
||
```
|
||
|
||
---
|
||
|
||
## 最佳实践
|
||
|
||
1. **测试金字塔** - 多单元测试,少 E2E
|
||
2. **测试隔离** - 每个测试独立
|
||
3. **命名清晰** - 描述预期行为
|
||
4. **快速反馈** - 测试要快
|
||
5. **持续集成** - 每次提交运行
|
||
6. **Biz 层禁止 Mock** - biz/service 层必须使用真实 PostgreSQL test DB + 真实 store,mock 等于没测
|
||
7. **Mock 仅限 Handler 层** - handler 层可以 mock biz 接口 + httptest
|
||
8. **Gate 4 必须用 API Mock E2E** - E2E 门禁不能依赖后端,否则形同虚设。用 `page.route()` 拦截 API,见 `e2e-testing.md`
|
||
9. **李宁测试用例** - Excel 导出见 `coolbuy-legacy` 技能的 `test-cases-excel.md`
|