Files
life-echo/api/docs/短信验证码测试指南.md
iammm0 12a9f85146 docs: 新增部署脚本和文档
- 新增deploy.sh部署脚本
- 新增docs/短信验证码测试指南.md
- 新增docs/部署指南.md
- 新增SMS_VERIFICATION_IMPLEMENTATION_STATUS.md
- 新增SMS_VERIFICATION_IMPLEMENTATION_SUMMARY.md
- 新增github-actions-secrets.md
2026-01-27 11:36:24 +08:00

7.0 KiB
Raw Blame History

短信验证码功能测试指南

概述

本文档说明如何测试短信验证码相关功能,包括发送验证码、验证码注册、验证码登录、密码重置、修改密码、修改手机号和登出管理等功能。

测试脚本

测试脚本位于:api/test_sms_verification.py

使用方法

1. 启动后端服务

cd api
python main.py

确保后端服务运行在 http://localhost:8000

2. 运行测试脚本

cd api
python test_sms_verification.py

3. 选择测试模式

脚本提供三种测试模式:

模式1交互式测试推荐

  • 需要真实的短信验证码
  • 适合完整的端到端测试
  • 步骤:
    1. 输入测试手机号
    2. 脚本发送验证码到手机
    3. 输入收到的验证码
    4. 按提示完成各项测试

模式2自动化测试

  • 需要后端支持测试验证码123456
  • 适合快速回归测试
  • 测试频率限制等功能

模式3API连接测试

  • 仅测试API是否可访问
  • 适合快速检查服务状态

测试用例

1. 发送验证码

测试场景:

  • 发送注册验证码
  • 发送登录验证码
  • 发送重置密码验证码
  • 发送修改手机号验证码

验证点:

  • ✓ 验证码成功发送
  • ✓ 返回过期时间300秒
  • ✓ 短信成功送达

2. 频率限制

测试场景:

  • 60秒内重复发送验证码

验证点:

  • ✓ 第一次发送成功
  • ✓ 60秒内第二次发送被拒绝HTTP 429
  • ✓ 返回剩余等待时间

3. 验证码注册

测试场景:

  • 使用验证码完成注册

验证点:

  • ✓ 验证码验证成功
  • ✓ 用户创建成功
  • ✓ 返回访问令牌
  • ✓ 返回刷新令牌

4. 验证码登录

测试场景:

  • 使用验证码登录已存在的账号

验证点:

  • ✓ 验证码验证成功
  • ✓ 返回访问令牌
  • ✓ 可以访问受保护的API

5. 密码重置

测试场景:

  • 忘记密码,使用验证码重置

验证点:

  • ✓ 验证码验证成功
  • ✓ 密码更新成功
  • ✓ 可以使用新密码登录

6. 修改密码(已登录)

测试场景:

  • 已登录用户修改密码

验证点:

  • ✓ 旧密码验证成功
  • ✓ 新密码更新成功
  • ✓ 需要重新登录

7. 修改手机号

测试场景:

  • 已登录用户修改手机号

验证点:

  • ✓ 新手机号验证码验证成功
  • ✓ 手机号更新成功
  • ✓ 用户信息中手机号已更新

8. 登出所有设备

测试场景:

  • 登出所有已登录的设备

验证点:

  • ✓ 所有刷新令牌失效
  • ✓ 当前访问令牌仍然有效(直到过期)
  • ✓ 无法使用刷新令牌获取新的访问令牌

手动测试步骤

测试注册流程

  1. 打开Android应用进入注册页面
  2. 输入手机号:13800138000
  3. 点击"发送验证码"按钮
  4. 查看手机短信输入6位验证码
  5. 输入密码、昵称等信息
  6. 点击"注册"按钮
  7. 验证是否自动登录并跳转到主页

测试登录流程

  1. 打开Android应用进入登录页面
  2. 切换到"验证码登录"模式
  3. 输入手机号
  4. 点击"发送验证码"按钮
  5. 输入收到的验证码
  6. 点击"登录"按钮
  7. 验证是否成功登录

测试密码重置流程

  1. 在登录页面点击"忘记密码"
  2. 输入手机号
  3. 点击"发送验证码"
  4. 输入收到的验证码
  5. 输入新密码并确认
  6. 点击"重置密码"
  7. 验证是否跳转到登录页面
  8. 使用新密码登录验证

测试账户管理

  1. 登录后进入"个人"页面
  2. 点击"设置" -> "账户管理"
  3. 测试修改密码功能
  4. 测试修改手机号功能
  5. 测试登出当前设备
  6. 测试登出所有设备

常见问题

Q1: 收不到短信验证码?

可能原因:

  • 腾讯云短信服务未配置
  • 手机号未在白名单中(测试环境)
  • 短信发送失败(查看后端日志)
  • 手机号格式错误

解决方法:

  • 检查 .env.production 中的短信配置
  • 查看后端日志确认发送状态
  • 确认手机号格式正确11位数字

Q2: 验证码总是提示错误?

可能原因:

  • 验证码已过期5分钟
  • 验证码已被使用
  • 验证码输入错误

解决方法:

  • 重新发送验证码
  • 确认输入的验证码正确
  • 检查数据库中的验证码记录

Q3: 频率限制不生效?

可能原因:

  • Redis未配置
  • 频率限制逻辑未实现

解决方法:

  • 确认Redis服务运行正常
  • 检查后端频率限制代码

Q4: 登出所有设备后仍然可以访问API

说明:

  • 这是正常行为
  • 访问令牌Access Token在过期前仍然有效
  • 刷新令牌Refresh Token已失效无法获取新的访问令牌
  • 等待访问令牌过期后将无法访问受保护的API

测试检查清单

  • 发送验证码成功
  • 收到短信验证码
  • 频率限制生效60秒内不能重复发送
  • 验证码注册成功
  • 验证码登录成功
  • 密码重置成功
  • 修改密码成功
  • 修改手机号成功
  • 登出当前设备成功
  • 登出所有设备成功
  • 验证码过期后无法使用
  • 验证码使用后无法重复使用
  • 错误的验证码无法通过验证

性能测试

并发测试

使用 Apache Bench 或 JMeter 测试:

# 测试发送验证码接口
ab -n 100 -c 10 -p sms_request.json -T application/json http://localhost:8000/api/auth/sms/send

验证点:

  • 响应时间 < 1秒
  • 成功率 > 99%
  • 频率限制正确生效

数据库性能

验证点:

  • 验证码查询使用索引
  • 过期验证码定期清理
  • 数据库连接池正常

安全测试

测试验证码安全性

  1. 尝试使用已过期的验证码
  2. 尝试使用已使用的验证码
  3. 尝试使用错误的验证码
  4. 尝试暴力破解验证码(应被频率限制阻止)
  5. 尝试使用其他手机号的验证码

测试密码安全性

  1. 尝试使用弱密码(应被拒绝)
  2. 验证密码是否加密存储
  3. 验证旧密码验证逻辑

日志检查

测试时应检查以下日志:

  1. 短信发送日志

    • 发送时间
    • 手机号
    • 发送结果
    • 错误信息(如有)
  2. 验证码验证日志

    • 验证时间
    • 手机号
    • 验证结果
    • 失败原因(如有)
  3. 用户操作日志

    • 注册/登录时间
    • IP地址
    • 设备信息

监控指标

生产环境应监控:

  1. 短信发送成功率

    • 目标:> 99%
  2. 验证码验证成功率

    • 目标:> 95%
  3. API响应时间

    • 发送验证码:< 1秒
    • 验证验证码:< 500ms
  4. 频率限制触发次数

    • 监控异常行为

总结

完成以上所有测试后,确认:

  1. ✓ 所有API端点正常工作
  2. ✓ 短信验证码正常发送和验证
  3. ✓ 频率限制正确生效
  4. ✓ 安全机制正常工作
  5. ✓ Android应用集成正常
  6. ✓ 用户体验流畅

如有问题,请查看后端日志或联系开发团队。