# 测试策略 ## 版本信息 | 版本 | 日期 | 描述 | 作者 | |------|------|------|------| | 3.0 | 2025-12-26 | 重构为概述文档,拆分详细规范到独立文档 | James (Claude Code) | | 2.10 | 2025-12-12 | 添加使用共享测试工具处理复杂组件的规范 | James (Claude Code) | | 2.9 | 2025-12-12 | 添加测试用例编写规范,基于订单管理集成测试经验 | James (Claude Code) | | 2.8 | 2025-11-11 | 更新包测试结构,添加模块化包测试策略 | Winston | | 2.7 | 2025-11-09 | 更新为monorepo测试架构,清理重复测试文件 | James | ## 概述 本文档是D8D Starter项目的测试策略概述,定义了整体的测试架构和原则。详细的测试规范请参考各包的专用测试规范文档。 ### 测试架构概览 项目采用分层测试架构,遵循测试金字塔模型: ``` /\ / \ E2E测试 (Playwright) /____\ 关键业务流程 100% / \ / \ 集成测试 (Vitest) / \ 模块间协作 ≥60% /____________\ / \ 单元测试 (Vitest/Jest) /________________\ 独立单元 ≥80% ``` ### 包分类测试策略 | 包类型 | 测试类型 | 主要框架 | 详细规范 | |--------|----------|----------|----------| | **Web UI包** | 组件测试 + 集成测试 + E2E测试 | Vitest + Testing Library + Playwright | [Web UI包测试规范](./web-ui-testing-standards.md) | | **Web Server包** | 集成测试 | Vitest + hono/testing | [Web Server包测试规范](./web-server-testing-standards.md) | | **后端模块包** | 单元测试 + 集成测试 | Vitest + TypeORM | [后端模块包测试规范](./backend-module-testing-standards.md) | | **Mini UI包** | 组件测试 + 集成测试 | Jest + @testing-library/react | [Mini UI包测试规范](./mini-ui-testing-standards.md) | ## 测试分层策略 ### 单元测试 (Unit Tests) - **范围**: 单个函数、类或组件 - **目标**: 验证独立单元的正确性 - **执行频率**: 每次代码变更 - **执行速度**: 快(毫秒级) - **覆盖率目标**: ≥ 80% **适用包**: - 后端模块包的Service层、Schema验证 - Web UI包的独立组件 - 共享工具包的纯函数 ### 集成测试 (Integration Tests) - **范围**: 多个组件/服务协作 - **目标**: 验证模块间集成和交互 - **执行频率**: 每次API变更 - **执行速度**: 中等(秒级) - **覆盖率目标**: ≥ 60% **适用包**: - Web Server包的API端点集成 - 后端模块包的路由与数据库集成 - Web UI包的组件与API集成 ### E2E测试 (End-to-End Tests) - **范围**: 完整用户流程 - **目标**: 验证端到端业务流程 - **执行频率**: 每日或每次重大变更 - **执行速度**: 慢(分钟级) - **覆盖率目标**: 关键用户流程100% **适用包**: - Web应用的完整用户场景 - Mini小程序的关键业务流程 ## 测试框架栈 ### Web应用测试 - **Vitest**: 测试运行器 - **Testing Library**: React组件测试 - **Playwright**: E2E测试 - **Happy DOM**: 轻量级DOM环境 ### 后端测试 - **Vitest**: 测试运行器 - **hono/testing**: Hono路由测试 - **TypeORM**: 数据库测试 - **PostgreSQL**: 测试数据库 ### Mini小程序测试 - **Jest**: 测试运行器(与Web应用不同) - **@testing-library/react**: 组件测试 ## 测试数据管理 ### 测试数据策略 ```typescript // 测试数据工厂模式 export function createTestUser(overrides = {}): User { return { id: 1, username: 'testuser', email: 'test@example.com', createdAt: new Date(), ...overrides }; } // 使用示例 const adminUser = createTestUser({ role: 'admin' }); const inactiveUser = createTestUser({ active: false }); ``` ### 数据库测试策略 - **单元测试**: 使用内存数据库或完全mock - **集成测试**: 使用专用测试数据库,事务回滚 - **E2E测试**: 使用接近生产环境的数据库 ### 数据清理策略 1. **事务回滚** (推荐) - 测试后自动回滚 2. **数据库清理** (每个测试后) - 清理测试数据 3. **测试数据隔离** (使用唯一标识符) - 避免数据冲突 ## 测试执行流程 ### 本地开发测试 #### 后端模块包 ```bash # 运行所有测试 cd packages/user-module && pnpm test # 运行单元测试 pnpm test:unit # 运行集成测试 pnpm test:integration # 生成覆盖率报告 pnpm test:coverage ``` #### Web Server包 ```bash # 运行集成测试 cd packages/server && pnpm test # 生成覆盖率报告 pnpm test:coverage ``` #### Web应用 ```bash # 运行所有测试 cd web && pnpm test # 运行组件测试 pnpm test:components # 运行集成测试 pnpm test:integration # 运行E2E测试 pnpm test:e2e:chromium # 生成覆盖率报告 pnpm test:coverage ``` #### Mini UI包 ```bash # 进入UI包目录 cd mini-ui-packages/rencai-dashboard-ui # 运行测试(使用Jest) pnpm test ``` ### CI/CD流水线测试 1. **代码推送** → 触发测试流水线 2. **单元测试** → 快速反馈,必须通过 3. **集成测试** → 验证模块集成,必须通过 4. **E2E测试** → 验证完整流程,建议通过 5. **覆盖率检查** → 满足最低要求 6. **测试报告** → 生成详细报告 ## 覆盖率标准 ### 各层覆盖率要求 | 测试类型 | 最低要求 | 目标要求 | 关键模块要求 | |----------|----------|----------|--------------| | 单元测试 | 70% | 80% | 90% | | 集成测试 | 50% | 60% | 70% | | E2E测试 | 关键流程100% | 主要流程80% | - | ### 关键模块定义 - **认证授权模块**: 必须达到90%单元测试覆盖率 - **数据库操作模块**: 必须达到85%单元测试覆盖率 - **核心业务逻辑**: 必须达到80%集成测试覆盖率 - **用户管理功能**: 必须100% E2E测试覆盖 ## 质量门禁 ### 测试通过标准 - ✅ 所有单元测试通过 - ✅ 所有集成测试通过 - ✅ 关键E2E测试通过 - ✅ 覆盖率满足最低要求 - ✅ 无性能回归 - ✅ 安全测试通过 ### 失败处理流程 1. **测试失败** → 立即通知开发团队 2. **分析根本原因** → 确定是测试问题还是代码问题 3. **优先修复** → 阻塞性问题必须立即修复 4. **重新测试** → 修复后重新运行测试 5. **文档更新** → 更新测试策略和案例 ## 安全测试策略 ### 安全测试要求 - **输入验证测试**: 所有API端点必须测试SQL注入、XSS等攻击 - **认证测试**: 测试令牌验证、权限控制 - **数据保护**: 测试敏感数据泄露风险 - **错误处理**: 测试错误信息是否泄露敏感数据 ### 安全测试工具 - **OWASP ZAP**: 自动化安全扫描 - **npm audit**: 依赖漏洞检查 - **自定义安全测试**: 针对业务逻辑的安全测试 ## 性能测试策略 ### 性能测试要求 - **API响应时间**: < 100ms (p95) - **数据库查询性能**: < 50ms (p95) - **并发用户数**: 支持100+并发用户 - **资源使用**: CPU < 70%, 内存 < 80% ### 性能测试工具 - **k6**: 负载测试 - **autocannon**: API性能测试 - **Playwright**: E2E性能监控 ## 监控和报告 ### 测试监控指标 - **测试通过率**: > 95% - **测试执行时间**: < 10分钟(单元+集成) - **测试稳定性**: 无flaky tests - **覆盖率趋势**: 持续改进或保持 ### 测试报告要求 - **HTML报告**: 详细的覆盖率报告 - **JUnit报告**: CI/CD集成 - **自定义报告**: 业务指标测试报告 - **历史趋势**: 测试质量趋势分析 ## 调试技巧 ### 查看测试详情 ```bash # 运行特定测试查看详细信息 pnpm test --testNamePattern "测试名称" # 显示完整输出 pnpm test --reporter=verbose # 监听模式(开发时) pnpm test --watch ``` ### 调试E2E测试 ```bash # E2E测试失败时先查看页面结构 cat test-results/**/error-context.md # 使用调试模式 pnpm test:e2e:chromium --debug ``` ### 表单调试 ```typescript // 表单提交失败时,在form onsubmit的第二个参数中加console.debug form.handleSubmit(handleSubmit, (errors) => console.debug('表单验证错误:', errors)) ``` ## 相关文档 ### 专用测试规范 - **[Web UI包测试规范](./web-ui-testing-standards.md)** - Web UI组件和Web应用测试 - **[Web Server包测试规范](./web-server-testing-standards.md)** - API服务器集成测试 - **[后端模块包测试规范](./backend-module-testing-standards.md)** - 业务模块单元和集成测试 - **[Mini UI包测试规范](./mini-ui-testing-standards.md)** - Taro小程序UI包测试 ### 开发规范 - **[编码标准](./coding-standards.md)** - 代码风格和最佳实践 - **[UI包开发规范](./ui-package-standards.md)** - Web UI包开发 - **[Mini UI包开发规范](./mini-ui-package-standards.md)** - Mini UI包开发 - **[后端模块包开发规范](./backend-module-package-standards.md)** - 后端模块开发 ### 架构文档 - **[技术栈](./tech-stack.md)** - 项目技术栈和版本 - **[源码树](./source-tree.md)** - 项目文件结构 - **[API设计规范](./api-design-integration.md)** - API设计标准 ## 工具版本 | 工具 | 版本 | 用途 | |------|------|------| | Vitest | 3.2.4 | Web/后端测试运行器 | | Jest | 最新 | Mini UI包测试运行器 | | Testing Library | 16.3.0 | React组件测试 | | Playwright | 1.55.0 | E2E测试 | | Happy DOM | 最新 | 轻量级DOM环境 | | hono/testing | 内置 | Hono路由测试 | | TypeORM | 0.3.20 | 数据库测试 | | shared-test-util | 1.0.0 | 共享测试基础设施 | ## 更新日志 | 日期 | 版本 | 描述 | |------|------|------| | 2025-12-26 | 3.0 | 重构为概述文档,拆分详细规范到独立文档 | | 2025-12-12 | 2.10 | 添加使用共享测试工具处理复杂组件的规范 | | 2025-12-12 | 2.9 | 添加测试用例编写规范,基于订单管理集成测试经验 | | 2025-11-11 | 2.8 | 更新包测试结构,添加模块化包测试策略 | | 2025-11-09 | 2.7 | 更新为monorepo测试架构,清理重复测试文件 | | 2025-10-15 | 2.6 | 完成遗留测试文件迁移到统一的tests目录结构 | | 2025-10-14 | 2.5 | 重构测试文件结构,统一到tests目录 | | 2025-09-20 | 2.4 | 更新版本与主架构文档一致 | | 2025-09-19 | 1.0 | 初始版本,基于现有测试基础设施 | --- **文档状态**: 正式版 **下次评审**: 2026-01-26