# 手动测试场景 ## 用户旅程测试 ### 场景 1: 新用户完整注册流程 1. **自动创建账户** ```bash curl -X POST http://localhost:3000/api/v1/user/auto-create \ -H "Content-Type: application/json" \ -d '{ "deviceId": "manual-test-device-001", "deviceName": "iPhone 14 Pro", "provinceCode": "110000", "cityCode": "110100" }' ``` - ✅ 返回 201 - ✅ 获得 userId, accountSequence, referralCode, mnemonic - ✅ 获得 3 个钱包地址 (KAVA, DST, BSC) - ✅ 获得 accessToken 和 refreshToken - **保存 mnemonic 用于后续测试!** 2. **查看个人资料** ```bash curl -X GET http://localhost:3000/api/v1/user/my-profile \ -H "Authorization: Bearer {accessToken}" ``` - ✅ 返回正确的用户信息 3. **更新个人资料** ```bash curl -X PUT http://localhost:3000/api/v1/user/update-profile \ -H "Authorization: Bearer {accessToken}" \ -H "Content-Type: application/json" \ -d '{ "nickname": "测试用户", "avatarUrl": "https://example.com/avatar.jpg", "address": "北京市朝阳区测试路123号" }' ``` - ✅ 更新成功 - ✅ 再次查询个人资料,确认更新生效 4. **查看设备列表** ```bash curl -X GET http://localhost:3000/api/v1/user/my-devices \ -H "Authorization: Bearer {accessToken}" ``` - ✅ 看到 1 个设备 ### 场景 2: 多设备管理 5. **在新设备上使用助记词恢复** ```bash curl -X POST http://localhost:3000/api/v1/user/recover-by-mnemonic \ -H "Content-Type: application/json" \ -d '{ "accountSequence": {accountSequence}, "mnemonic": "{mnemonic}", "newDeviceId": "manual-test-device-002", "deviceName": "iPad Pro" }' ``` - ✅ 返回新的 token - ✅ 钱包地址与第一个设备相同 6. **查看设备列表(使用新设备的 token)** - ✅ 看到 2 个设备 7. **移除旧设备** ```bash curl -X POST http://localhost:3000/api/v1/user/remove-device \ -H "Authorization: Bearer {newAccessToken}" \ -H "Content-Type: application/json" \ -d '{ "deviceId": "manual-test-device-001" }' ``` - ✅ 移除成功 - ✅ 使用旧设备的 token 无法再访问 API ### 场景 3: Token 管理 8. **等待 access token 过期(或修改过期时间为 1 分钟测试)** - ✅ 过期的 token 无法访问 API 9. **使用 refresh token 获取新的 access token** ```bash curl -X POST http://localhost:3000/api/v1/user/auto-login \ -H "Content-Type: application/json" \ -d '{ "refreshToken": "{refreshToken}", "deviceId": "manual-test-device-002" }' ``` - ✅ 获得新的 access token - ✅ 新 token 可以正常使用 ### 场景 4: KYC 认证 10. **提交 KYC 信息** ```bash curl -X POST http://localhost:3000/api/v1/user/submit-kyc \ -H "Authorization: Bearer {accessToken}" \ -H "Content-Type: application/json" \ -d '{ "realName": "张三", "idCardNumber": "110101199001011234", "idCardFrontUrl": "https://example.com/id-front.jpg", "idCardBackUrl": "https://example.com/id-back.jpg" }' ``` - ✅ 提交成功 - ✅ 查看个人资料,确认 KYC 信息存在且身份证号已脱敏 ### 场景 5: 推荐系统 11. **根据推荐码查询用户** ```bash curl -X GET http://localhost:3000/api/v1/user/by-referral-code/{referralCode} ``` - ✅ 返回正确的账户信息 12. **使用推荐码注册新用户** ```bash curl -X POST http://localhost:3000/api/v1/user/auto-create \ -H "Content-Type: application/json" \ -d '{ "deviceId": "manual-test-device-003", "deviceName": "Android Phone", "provinceCode": "110000", "cityCode": "110100", "inviterReferralCode": "{referralCode}" }' ``` - ✅ 创建成功 - ✅ 新用户的 inviterSequence 正确 ## 边界测试 ### 设备限制测试 - [ ] 添加 5 个设备 → 成功 - [ ] 尝试添加第 6 个设备 → 失败,提示设备数量限制 - [ ] 移除 1 个设备后 → 可以再添加 1 个 ### 并发测试(手动) - [ ] 两个设备同时使用同一个 refresh token → 只有一个成功 - [ ] 两个用户同时创建账户 → 账户序列号不重复 - [ ] 同一个推荐码被多人使用 → 都成功 ### 异常处理测试 - [ ] 数据库连接断开 → 返回 500 错误 - [ ] Redis 连接断开 → SMS 验证码功能失败 - [ ] Kafka 连接断开 → 事件发布失败(但主流程成功) - [ ] 网络超时 → 合理的超时提示 ### 数据一致性测试 - [ ] 创建账户失败(如数据库错误)→ 账户序列号不会被消耗 - [ ] 添加设备失败(如超过限制)→ 数据库没有脏数据 - [ ] Token 生成失败 → 账户仍然创建成功,可以重新登录 ## 真实环境测试 ### 部署到测试环境 - [ ] Docker Compose 一键启动 - [ ] Kubernetes 部署 - [ ] 环境变量配置正确 - [ ] 数据库迁移成功 - [ ] 健康检查端点响应正常 ### 监控和日志 - [ ] 日志正确输出到文件/控制台 - [ ] 错误日志包含堆栈信息 - [ ] 性能指标可以被 Prometheus 采集 - [ ] 日志可以被 ELK/Loki 采集 ### 备份和恢复 - [ ] 数据库备份 - [ ] 数据恢复测试 - [ ] 灾难恢复演练