--- 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 冒烟测试(无后端)+ 全链路集成测试 | | `templates/go-integration-test.md` | Go 集成测试模板(多步骤 API 流程、中间件验证、租户隔离) | | `templates/pdv-smoke-spec.md` | PDV 部署后验收 Playwright 模板(页面可达、菜单可见、API 连通) | --- ## 测试金字塔 ``` /\ / \ 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 | | E2E (部署后验收 PDV) | `E2E_BASE_URL= npx playwright test e2e/pdv/` | §PDV | --- ## 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` --- ## 部署后 E2E 验收 (PDV — Post-Deploy Verification) 部署后验收是独立于 TG4 的 E2E 冒烟模式,在 `/req deploy` 健康检查通过后执行。 ### PDV vs TG4 区别 | 维度 | TG4 (开发阶段 E2E 冒烟) | PDV (部署后验收) | |------|------------------------|-----------------| | **触发时机** | `/req test` Gate 4 | `/req deploy` 步骤 6 | | **环境** | 本地开发环境,API Mock | 真实部署环境 (staging/prod) | | **目的** | 验证前端逻辑、UI 渲染 | 验证功能入口可达、基本可用 | | **API** | `page.route()` 拦截 | 真实后端 API | | **范围** | 回归冒烟 | 仅新功能可达性 | ### PDV 检查项 | 检查项 | 说明 | 示例 | |--------|------|------| | **页面可达** | 需求涉及的前端页面返回 200 | `/okr/my`, `/okr/team` | | **菜单可见** | 新增菜单项在侧栏中出现 | OKR 菜单对目标用户角色可见 | | **基础渲染** | 页面无白屏/JS 报错 | 页面有预期的标题/组件 | | **API 连通** | 关键 API 带 token 调用返回正常 | `GET /api/v1/okr/objectives` 返回 200 | ### PDV 不做什么 - 不做完整回归测试(那是 TG4 的事) - 不测试复杂业务流程(如多步骤表单提交) - 不替代手动验收 - 只做「功能入口可达 + 基本可用」的冒烟验证 ### PDV 执行方式 ```bash E2E_BASE_URL=<部署环境URL> npx playwright test e2e/pdv/ --project=chromium ``` ### PDV Spec 生成规则 AI 根据需求变更范围动态生成 Playwright spec,模板见 `templates/pdv-smoke-spec.md`。生成流程: 1. 从需求关联任务提取前端变更范围(页面路由、菜单项、API 端点) 2. 登录测试账号(使用 storageState 或手动登录) 3. 验证新增菜单项可见(检查 `.ant-menu` 包含目标文本) 4. 导航到新页面,验证非白屏(title 不含 error/500/404) 5. 调用关键 API,验证返回状态码 < 500 6. 每步截图保存为证据 ### PDV 结果判定 - **全部 PASS** → 继续推进到 released - **任一 FAIL** → 阻断推进,在部署文档记录失败项,通知修复 --- ## TG2 集成测试检测 ### 模板映射 | 变更范围 | 测试输出位置 | 模板 | |----------|-------------|------| | 单个 handler 或 service | `*_test.go` (同目录) | `go-testing.md` | | handlers/ + middleware/ + routes/ (同一功能) | `tests/{feature}_integration_test.go` | `templates/go-integration-test.md` | ### 检测规则 若 git diff 显示同一功能的 `handlers/`、`middleware/`、`routes/` 文件均有变更(通过命名模式识别,如 `impersonation_handler.go` + `impersonation_middleware.go` + `impersonation_routes.go`),则除单元测试外**额外生成** `backend/tests/` 下的集成测试。 识别方式:提取文件名中的功能前缀(如 `impersonation`),若在三个目录中均出现,则触发集成测试生成。