--- 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 --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. **E2E 冒烟测试必须用 API Mock** - E2E 门禁不能依赖后端,否则形同虚设。用 `page.route()` 拦截 API,见 `e2e-testing.md`。质量门禁流程(Gates 1-5)定义在 `req-test-gate` 技能中 9. **李宁测试用例** - Excel 导出见 `coolbuy-legacy` 技能的 `test-cases-excel.md`