# 短信验证码功能测试指南 ## 概述 本文档说明如何测试短信验证码相关功能,包括发送验证码、验证码注册、验证码登录、密码重置、修改密码、修改手机号和登出管理等功能。 ## 测试脚本 测试脚本位于:`api/test_sms_verification.py` ## 使用方法 ### 1. 启动后端服务 ```bash cd api python main.py ``` 确保后端服务运行在 `http://localhost:8000` ### 2. 运行测试脚本 ```bash cd api python test_sms_verification.py ``` ### 3. 选择测试模式 脚本提供三种测试模式: #### 模式1:交互式测试(推荐) - 需要真实的短信验证码 - 适合完整的端到端测试 - 步骤: 1. 输入测试手机号 2. 脚本发送验证码到手机 3. 输入收到的验证码 4. 按提示完成各项测试 #### 模式2:自动化测试 - 需要后端支持测试验证码(如:123456) - 适合快速回归测试 - 测试频率限制等功能 #### 模式3:API连接测试 - 仅测试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 测试: ```bash # 测试发送验证码接口 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. ✓ 用户体验流畅 如有问题,请查看后端日志或联系开发团队。