testing-standards.md 10 KB

测试策略

版本信息

版本 日期 描述 作者
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 Server包 集成测试 Vitest + hono/testing Web Server包测试规范
后端模块包 单元测试 + 集成测试 Vitest + TypeORM 后端模块包测试规范
Mini UI包 组件测试 + 集成测试 Jest + @testing-library/react Mini UI包测试规范

测试分层策略

单元测试 (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: 组件测试

测试数据管理

测试数据策略

// 测试数据工厂模式
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. 测试数据隔离 (使用唯一标识符) - 避免数据冲突

测试执行流程

本地开发测试

后端模块包

# 运行所有测试
cd packages/user-module && pnpm test

# 运行单元测试
pnpm test:unit

# 运行集成测试
pnpm test:integration

# 生成覆盖率报告
pnpm test:coverage

Web Server包

# 运行集成测试
cd packages/server && pnpm test

# 生成覆盖率报告
pnpm test:coverage

Web应用

# 运行所有测试
cd web && pnpm test

# 运行组件测试
pnpm test:components

# 运行集成测试
pnpm test:integration

# 运行E2E测试
pnpm test:e2e:chromium

# 生成覆盖率报告
pnpm test:coverage

Mini UI包

# 进入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集成
  • 自定义报告: 业务指标测试报告
  • 历史趋势: 测试质量趋势分析

调试技巧

查看测试详情

# 运行特定测试查看详细信息
pnpm test --testNamePattern "测试名称"

# 显示完整输出
pnpm test --reporter=verbose

# 监听模式(开发时)
pnpm test --watch

调试E2E测试

# E2E测试失败时先查看页面结构
cat test-results/**/error-context.md

# 使用调试模式
pnpm test:e2e:chromium --debug

表单调试

// 表单提交失败时,在form onsubmit的第二个参数中加console.debug
form.handleSubmit(handleSubmit, (errors) => console.debug('表单验证错误:', errors))

相关文档

专用测试规范

开发规范

架构文档

工具版本

工具 版本 用途
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