177 lines
5.5 KiB
Markdown
177 lines
5.5 KiB
Markdown
# 手动测试场景
|
||
|
||
## 用户旅程测试
|
||
|
||
### 场景 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 采集
|
||
|
||
### 备份和恢复
|
||
- [ ] 数据库备份
|
||
- [ ] 数据恢复测试
|
||
- [ ] 灾难恢复演练
|