5.6 KiB
5.6 KiB
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)
- 代码复杂度分析
- 依赖关系分析
测试执行指南
开发阶段
# 1. 运行单元测试(每次代码修改后)
npm test
# 2. 运行 E2E 测试(每次功能完成后)
npm run test:e2e
# 3. 生成覆盖率报告
npm run test:cov
# 4. 代码规范检查
npm run lint
提交前检查
# 运行完整测试套件
npm run test:all # 需要在 package.json 中添加这个脚本
# 格式化代码
npm run format
# 类型检查
npm run build
部署前检查
# 1. 健康检查
./scripts/health-check.sh
# 2. 快速功能测试
./scripts/quick-test.sh
# 3. 安全扫描
npm audit
snyk test
# 4. 性能测试(如果有)
k6 run performance-test.js
测试环境配置
本地开发环境
# .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)
- 与生产环境配置相同
- 使用真实的外部服务(测试账号)
- 运行完整的集成测试和性能测试
测试数据管理
测试数据策略
- 单元测试: 使用 mock 数据,测试快速、隔离
- E2E 测试: 使用测试数据库,每次测试前清理
- 集成测试: 使用真实服务,测试账号/测试环境
- 性能测试: 使用大量模拟数据
测试数据库种子数据
# 初始化测试数据
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 个高危
测试清单快速链接
常见问题
Q: 测试失败怎么办?
- 查看错误日志
- 在本地复现问题
- 调试并修复
- 确认测试通过后提交
Q: 如何提高测试覆盖率?
- 使用
npm run test:cov查看未覆盖的代码 - 为未覆盖的分支添加测试用例
- 重点关注领域逻辑和边界条件
Q: 测试运行太慢怎么办?
- 只运行相关测试:
npm test -- user-account.spec.ts - 使用 mock 替代真实服务
- 并行运行测试(Jest 默认并行)
- 优化测试数据准备逻辑
结论
当前测试覆盖已经包括:
- ✅ 核心业务逻辑(单元测试)
- ✅ API 端到端流程(E2E 测试)
- ✅ Mock 外部依赖
但要真正适应生产环境,还需要:
- 集成测试 - 验证与真实服务的交互
- 性能测试 - 验证系统在高负载下的表现
- 安全测试 - 发现潜在的安全漏洞
- 手动测试 - 验证用户体验和边界情况
推荐的测试优先级:
- 🔴 立即进行: 集成测试(PostgreSQL/Redis/Kafka)
- 🟡 本周完成: 安全测试基础(依赖扫描、输入验证)
- 🟢 下周完成: 性能测试、手动测试
- 🔵 持续进行: 代码质量检查、覆盖率提升