- 新增deploy.sh部署脚本 - 新增docs/短信验证码测试指南.md - 新增docs/部署指南.md - 新增SMS_VERIFICATION_IMPLEMENTATION_STATUS.md - 新增SMS_VERIFICATION_IMPLEMENTATION_SUMMARY.md - 新增github-actions-secrets.md
332 lines
7.0 KiB
Markdown
332 lines
7.0 KiB
Markdown
# 短信验证码功能测试指南
|
||
|
||
## 概述
|
||
|
||
本文档说明如何测试短信验证码相关功能,包括发送验证码、验证码注册、验证码登录、密码重置、修改密码、修改手机号和登出管理等功能。
|
||
|
||
## 测试脚本
|
||
|
||
测试脚本位于:`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. ✓ 用户体验流畅
|
||
|
||
如有问题,请查看后端日志或联系开发团队。
|