# 测试策略

## 版本信息
| 版本 | 日期 | 描述 | 作者 |
|------|------|------|------|
| 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
