- 新增deploy.sh部署脚本 - 新增docs/短信验证码测试指南.md - 新增docs/部署指南.md - 新增SMS_VERIFICATION_IMPLEMENTATION_STATUS.md - 新增SMS_VERIFICATION_IMPLEMENTATION_SUMMARY.md - 新增github-actions-secrets.md
7.0 KiB
7.0 KiB
短信验证码功能测试指南
概述
本文档说明如何测试短信验证码相关功能,包括发送验证码、验证码注册、验证码登录、密码重置、修改密码、修改手机号和登出管理等功能。
测试脚本
测试脚本位于:api/test_sms_verification.py
使用方法
1. 启动后端服务
cd api
python main.py
确保后端服务运行在 http://localhost:8000
2. 运行测试脚本
cd api
python test_sms_verification.py
3. 选择测试模式
脚本提供三种测试模式:
模式1:交互式测试(推荐)
- 需要真实的短信验证码
- 适合完整的端到端测试
- 步骤:
- 输入测试手机号
- 脚本发送验证码到手机
- 输入收到的验证码
- 按提示完成各项测试
模式2:自动化测试
- 需要后端支持测试验证码(如:123456)
- 适合快速回归测试
- 测试频率限制等功能
模式3:API连接测试
- 仅测试API是否可访问
- 适合快速检查服务状态
测试用例
1. 发送验证码
测试场景:
- 发送注册验证码
- 发送登录验证码
- 发送重置密码验证码
- 发送修改手机号验证码
验证点:
- ✓ 验证码成功发送
- ✓ 返回过期时间(300秒)
- ✓ 短信成功送达
2. 频率限制
测试场景:
- 60秒内重复发送验证码
验证点:
- ✓ 第一次发送成功
- ✓ 60秒内第二次发送被拒绝(HTTP 429)
- ✓ 返回剩余等待时间
3. 验证码注册
测试场景:
- 使用验证码完成注册
验证点:
- ✓ 验证码验证成功
- ✓ 用户创建成功
- ✓ 返回访问令牌
- ✓ 返回刷新令牌
4. 验证码登录
测试场景:
- 使用验证码登录已存在的账号
验证点:
- ✓ 验证码验证成功
- ✓ 返回访问令牌
- ✓ 可以访问受保护的API
5. 密码重置
测试场景:
- 忘记密码,使用验证码重置
验证点:
- ✓ 验证码验证成功
- ✓ 密码更新成功
- ✓ 可以使用新密码登录
6. 修改密码(已登录)
测试场景:
- 已登录用户修改密码
验证点:
- ✓ 旧密码验证成功
- ✓ 新密码更新成功
- ✓ 需要重新登录
7. 修改手机号
测试场景:
- 已登录用户修改手机号
验证点:
- ✓ 新手机号验证码验证成功
- ✓ 手机号更新成功
- ✓ 用户信息中手机号已更新
8. 登出所有设备
测试场景:
- 登出所有已登录的设备
验证点:
- ✓ 所有刷新令牌失效
- ✓ 当前访问令牌仍然有效(直到过期)
- ✓ 无法使用刷新令牌获取新的访问令牌
手动测试步骤
测试注册流程
- 打开Android应用,进入注册页面
- 输入手机号:
13800138000 - 点击"发送验证码"按钮
- 查看手机短信,输入6位验证码
- 输入密码、昵称等信息
- 点击"注册"按钮
- 验证是否自动登录并跳转到主页
测试登录流程
- 打开Android应用,进入登录页面
- 切换到"验证码登录"模式
- 输入手机号
- 点击"发送验证码"按钮
- 输入收到的验证码
- 点击"登录"按钮
- 验证是否成功登录
测试密码重置流程
- 在登录页面点击"忘记密码"
- 输入手机号
- 点击"发送验证码"
- 输入收到的验证码
- 输入新密码并确认
- 点击"重置密码"
- 验证是否跳转到登录页面
- 使用新密码登录验证
测试账户管理
- 登录后进入"个人"页面
- 点击"设置" -> "账户管理"
- 测试修改密码功能
- 测试修改手机号功能
- 测试登出当前设备
- 测试登出所有设备
常见问题
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%
- 频率限制正确生效
数据库性能
验证点:
- 验证码查询使用索引
- 过期验证码定期清理
- 数据库连接池正常
安全测试
测试验证码安全性
- 尝试使用已过期的验证码
- 尝试使用已使用的验证码
- 尝试使用错误的验证码
- 尝试暴力破解验证码(应被频率限制阻止)
- 尝试使用其他手机号的验证码
测试密码安全性
- 尝试使用弱密码(应被拒绝)
- 验证密码是否加密存储
- 验证旧密码验证逻辑
日志检查
测试时应检查以下日志:
-
短信发送日志
- 发送时间
- 手机号
- 发送结果
- 错误信息(如有)
-
验证码验证日志
- 验证时间
- 手机号
- 验证结果
- 失败原因(如有)
-
用户操作日志
- 注册/登录时间
- IP地址
- 设备信息
监控指标
生产环境应监控:
-
短信发送成功率
- 目标:> 99%
-
验证码验证成功率
- 目标:> 95%
-
API响应时间
- 发送验证码:< 1秒
- 验证验证码:< 500ms
-
频率限制触发次数
- 监控异常行为
总结
完成以上所有测试后,确认:
- ✓ 所有API端点正常工作
- ✓ 短信验证码正常发送和验证
- ✓ 频率限制正确生效
- ✓ 安全机制正常工作
- ✓ Android应用集成正常
- ✓ 用户体验流畅
如有问题,请查看后端日志或联系开发团队。