# Identity Service 测试策略 ## 测试金字塔 ``` /\ / \ E2E Tests (20) /----\ / \ Integration Tests /--------\ / \ Unit Tests (46) /--------------\ ``` ## 当前测试状态 ### ✅ 已完成 - **单元测试**: 46 个测试全部通过 - 领域层值对象测试 - 领域层聚合根测试 - 基础设施层服务测试 - **E2E 测试**: 20 个测试全部通过 - 账户创建流程 - 用户资料管理 - 设备管理 - Token 管理 - 推荐系统 - KYC 认证 - 助记词恢复 - 数据验证 ### ⚠️ 需要补充的测试 #### 1. 集成测试(优先级:高) - [ ] PostgreSQL 真实连接测试 - [ ] Redis 真实连接测试 - [ ] Kafka 真实连接测试 - [ ] 事务一致性测试 - [ ] 并发安全测试 #### 2. 性能测试(优先级:高) - [ ] 负载测试(100-500 并发) - [ ] 压力测试(找到系统极限) - [ ] 数据库连接池测试 - [ ] 内存泄漏测试 #### 3. 安全测试(优先级:高) - [ ] SQL 注入测试 - [ ] XSS 攻击测试 - [ ] JWT Token 安全测试 - [ ] 暴力破解防护测试 - [ ] 敏感数据保护验证 - [ ] 依赖漏洞扫描(npm audit, Snyk) #### 4. 手动测试(优先级:中) - [ ] 完整用户旅程测试 - [ ] 多设备管理流程测试 - [ ] 边界条件测试 - [ ] 异常场景测试 #### 5. 代码质量检查(优先级:中) - [ ] 测试覆盖率分析(目标 >80%) - [ ] 代码规范检查(ESLint) - [ ] 类型安全检查(TypeScript) - [ ] 代码复杂度分析 - [ ] 依赖关系分析 ## 测试执行指南 ### 开发阶段 ```bash # 1. 运行单元测试(每次代码修改后) npm test # 2. 运行 E2E 测试(每次功能完成后) npm run test:e2e # 3. 生成覆盖率报告 npm run test:cov # 4. 代码规范检查 npm run lint ``` ### 提交前检查 ```bash # 运行完整测试套件 npm run test:all # 需要在 package.json 中添加这个脚本 # 格式化代码 npm run format # 类型检查 npm run build ``` ### 部署前检查 ```bash # 1. 健康检查 ./scripts/health-check.sh # 2. 快速功能测试 ./scripts/quick-test.sh # 3. 安全扫描 npm audit snyk test # 4. 性能测试(如果有) k6 run performance-test.js ``` ## 测试环境配置 ### 本地开发环境 ```bash # .env.test NODE_ENV=test DATABASE_URL=postgresql://test:test@localhost:5432/identity_test REDIS_URL=redis://localhost:6379 KAFKA_BROKERS=localhost:9092 JWT_SECRET=test-secret-key-for-testing-only ``` ### CI/CD 环境 - GitHub Actions / GitLab CI - 每次 push 自动运行单元测试 - 每次 merge 到 main 自动运行 E2E 测试 - 每日定时运行安全扫描 ### 测试环境(Staging) - 与生产环境配置相同 - 使用真实的外部服务(测试账号) - 运行完整的集成测试和性能测试 ## 测试数据管理 ### 测试数据策略 1. **单元测试**: 使用 mock 数据,测试快速、隔离 2. **E2E 测试**: 使用测试数据库,每次测试前清理 3. **集成测试**: 使用真实服务,测试账号/测试环境 4. **性能测试**: 使用大量模拟数据 ### 测试数据库种子数据 ```bash # 初始化测试数据 npm run seed:test # 清理测试数据 npm run seed:reset ``` ## 持续改进 ### 每个 Sprint - [ ] 为新功能编写测试(TDD) - [ ] 修复失败的测试 - [ ] 提高测试覆盖率(+5%) - [ ] 更新测试文档 ### 每个月 - [ ] 运行完整的性能测试 - [ ] 运行安全扫描 - [ ] 更新依赖版本 - [ ] 代码质量回顾 ### 每个季度 - [ ] 渗透测试 - [ ] 灾难恢复演练 - [ ] 测试策略回顾和优化 ## 测试指标 ### 代码覆盖率目标 - 整体覆盖率: **>80%** - 领域层: **>95%** - 应用层: **>90%** - 基础设施层: **>80%** - API 层: **>85%** ### 性能指标目标 - API 响应时间 P95: **<500ms** - 数据库查询时间: **<100ms** - 并发处理能力: **>500 TPS** - 错误率: **<0.1%** ### 质量指标目标 - 代码复杂度: **<10** - 代码重复率: **<5%** - 技术债务比率: **<5%** - 安全漏洞: **0 个高危** ## 测试清单快速链接 - [集成测试清单](./test/integration-checklist.md) - [性能测试计划](./test/performance-test.md) - [安全测试清单](./test/security-test-checklist.md) - [手动测试场景](./test/manual-test-scenarios.md) - [代码质量清单](./test/code-quality-checklist.md) ## 常见问题 ### Q: 测试失败怎么办? 1. 查看错误日志 2. 在本地复现问题 3. 调试并修复 4. 确认测试通过后提交 ### Q: 如何提高测试覆盖率? 1. 使用 `npm run test:cov` 查看未覆盖的代码 2. 为未覆盖的分支添加测试用例 3. 重点关注领域逻辑和边界条件 ### Q: 测试运行太慢怎么办? 1. 只运行相关测试: `npm test -- user-account.spec.ts` 2. 使用 mock 替代真实服务 3. 并行运行测试(Jest 默认并行) 4. 优化测试数据准备逻辑 ## 结论 当前测试覆盖已经包括: - ✅ 核心业务逻辑(单元测试) - ✅ API 端到端流程(E2E 测试) - ✅ Mock 外部依赖 **但要真正适应生产环境,还需要:** 1. **集成测试** - 验证与真实服务的交互 2. **性能测试** - 验证系统在高负载下的表现 3. **安全测试** - 发现潜在的安全漏洞 4. **手动测试** - 验证用户体验和边界情况 **推荐的测试优先级:** 1. 🔴 **立即进行**: 集成测试(PostgreSQL/Redis/Kafka) 2. 🟡 **本周完成**: 安全测试基础(依赖扫描、输入验证) 3. 🟢 **下周完成**: 性能测试、手动测试 4. 🔵 **持续进行**: 代码质量检查、覆盖率提升