rwadurian/backend/services/identity-service/test/manual-test-scenarios.md

5.3 KiB
Raw Blame History

手动测试场景

用户旅程测试

场景 1: 新用户完整注册流程

  1. 自动创建账户

    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. 查看个人资料

    curl -X GET http://localhost:3000/api/v1/user/my-profile \
      -H "Authorization: Bearer {accessToken}"
    
    • 返回正确的用户信息
  3. 更新个人资料

    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. 查看设备列表

    curl -X GET http://localhost:3000/api/v1/user/my-devices \
      -H "Authorization: Bearer {accessToken}"
    
    • 看到 1 个设备

场景 2: 多设备管理

  1. 在新设备上使用助记词恢复

    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
    • 钱包地址与第一个设备相同
  2. 查看设备列表(使用新设备的 token

    • 看到 2 个设备
  3. 移除旧设备

    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 管理

  1. 等待 access token 过期(或修改过期时间为 1 分钟测试)

    • 过期的 token 无法访问 API
  2. 使用 refresh token 获取新的 access token

    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 认证

  1. 提交 KYC 信息
    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: 推荐系统

  1. 根据推荐码查询用户

    curl -X GET http://localhost:3000/api/v1/user/by-referral-code/{referralCode}
    
    • 返回正确的账户信息
  2. 使用推荐码注册新用户

    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 采集

备份和恢复

  • 数据库备份
  • 数据恢复测试
  • 灾难恢复演练