239 lines
5.8 KiB
Markdown
239 lines
5.8 KiB
Markdown
# 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. 🔵 **持续进行**: 代码质量检查、覆盖率提升
|