Files
life-echo/api/docs/短信验证码测试指南.md

332 lines
7.0 KiB
Markdown
Raw Normal View History

# 短信验证码功能测试指南
## 概述
本文档说明如何测试短信验证码相关功能,包括发送验证码、验证码注册、验证码登录、密码重置、修改密码、修改手机号和登出管理等功能。
## 测试脚本
测试脚本位于:`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
- 适合快速回归测试
- 测试频率限制等功能
#### 模式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 测试:
```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. ✓ 用户体验流畅
如有问题,请查看后端日志或联系开发团队。