8.3 KiB
8.3 KiB
用户注册登录模块 — 测试计划
1. 文档变更记录
| 日期 | 版本 | 变更说明 | 作者 |
|---|---|---|---|
| 2026-03-28 | v0.1 | 初始版本,接口 review + 测试用例设计 | QA |
2. 接口设计 Review
2.1 发现的问题
| # | 问题 | 严重程度 | 说明 |
|---|---|---|---|
| P1 | POST /api/auth/send-code 未限制发送频率 |
高 | 攻击者可无限发送短信验证码,造成资源浪费与安全隐患 |
| P2 | POST /api/auth/register 入参未校验 code 格式 |
中 | 未明确是 4 位还是 6 位数字,可能产生边界问题 |
| P3 | POST /api/auth/login 无登录失败次数限制 |
中 | 暴力破解风险,建议增加锁定机制 |
| P4 | POST /api/auth/change-password 无旧密码校验 |
高 | 只需手机号+验证码即可修改密码,账号被盗后攻击面大 |
| P5 | DELETE /api/auth/devices/:id 无被踢设备需确认机制 |
低 | 多设备并发操作可能导致误踢,建议增加二次确认字段 |
| P6 | Token 无刷新机制 | 中 | access token 过期后需重新登录,用户体验差 |
| P7 | GET /api/auth/devices 未返回 lastActiveAt 字段 |
低 | 前端无法判断设备活跃状态,用户体验受影响 |
2.2 待确认项(已记录,需与 BE 确认)
- 验证码长度:是 4 位还是 6 位数字?
- 同一手机号重复注册时,错误码和错误信息是什么?
- Token 有效期是多久?(用于 V4 测试)
- 图形验证码有效期是多久?
- 多设备数量上限 3 个,是否包括当前登录设备本身?
3. 测试用例
F1 用户注册
| ID | 场景 | 操作步骤 | 预期结果 | 优先级 | 对应验收标准 |
|---|---|---|---|---|---|
| TC-F1-01 | 正常注册流程 | 1. 获取图形验证码 2. 发送短信验证码 3. 填写手机号+验证码+6位密码提交 | 注册成功,返回 token 和 user 信息 | P0 | — |
| TC-F1-02 | 同一手机号重复注册(V1) | 使用已注册手机号重新走注册流程 | 返回错误码,提示手机号已注册 | P0 | V1 |
| TC-F1-03 | 图形验证码错误 | 发送短信时填入错误的图形验证码 | 返回错误,图形验证码校验失败 | P0 | — |
| TC-F1-04 | 短信验证码错误 | 注册时填入错误验证码 | 返回错误,验证码错误 | P0 | — |
| TC-F1-05 | 短信验证码过期(V2) | 1. 发送验证码 2. 等待6分钟 3. 用过期验证码注册 | 返回错误,验证码已过期 | P0 | V2 |
| TC-F1-06 | 密码长度不足(V3) | 注册时填写5位密码 | 返回错误,密码长度不符合要求(≥6位) | P0 | V3 |
| TC-F1-07 | 密码长度边界(6位) | 注册时填写6位密码 | 注册成功 | P1 | V3 |
| TC-F1-08 | 手机号格式错误 | 填入非手机号格式 | 返回错误,手机号格式不正确 | P1 | — |
| TC-F1-09 | 密码为空 | 注册时不填密码 | 返回错误,密码不能为空 | P1 | — |
F2 用户登录
| ID | 场景 | 操作步骤 | 预期结果 | 优先级 | 对应验收标准 |
|---|---|---|---|---|---|
| TC-F2-01 | 正常登录 | 手机号+正确密码登录 | 登录成功,返回 token 和 user 信息 | P0 | — |
| TC-F2-02 | 密码错误 | 输入错误密码登录 | 返回错误,密码错误(不暴露手机号是否存在) | P0 | — |
| TC-F2-03 | 未注册手机号登录 | 使用未注册手机号登录 | 返回错误,手机号未注册 | P0 | — |
| TC-F2-04 | 空密码登录 | 不填密码直接登录 | 返回错误,密码不能为空 | P1 | — |
| TC-F2-05 | Token 正常有效性 | 登录后访问 GET /api/auth/devices |
返回设备列表 | P0 | — |
F3 修改密码
| ID | 场景 | 操作步骤 | 预期结果 | 优先级 | 对应验收标准 |
|---|---|---|---|---|---|
| TC-F3-01 | 正常修改密码 | 手机号+验证码+新密码(6位以上)提交 | 修改成功,返回成功信息 | P0 | — |
| TC-F3-02 | 新密码长度不足 | 修改密码时填写5位新密码 | 返回错误,密码长度不符合要求 | P0 | V3 |
| TC-F3-03 | 修改密码后原Token有效性 | 修改密码后用原 token 访问受保护接口 | 需确认:Token 是否仍然有效 | P1 | — |
| TC-F3-04 | 修改密码后其他设备状态 | 一台设备修改密码后,检查其他设备 Token | 建议:其他设备 Token 应失效(安全考虑) | P1 | — |
F4 多设备管理
| ID | 场景 | 操作步骤 | 预期结果 | 优先级 | 对应验收标准 |
|---|---|---|---|---|---|
| TC-F4-01 | 查看设备列表 | 登录后访问 GET /api/auth/devices |
返回当前账号的登录设备列表 | P0 | — |
| TC-F4-02 | 强制下线指定设备 | 调用 DELETE /api/auth/devices/:id 下线非当前设备 |
指定设备被下线,返回成功 | P0 | — |
| TC-F4-03 | 强制下线当前设备 | 尝试下线自己 | 应允许,提示当前设备已下线 | P1 | — |
| TC-F4-04 | 下线不存在设备 | 用无效 deviceId 调用下线接口 | 返回错误,设备不存在 | P1 | — |
| TC-F4-05 | 第4设备踢出第1设备(V5) | 1. 登录设备A(B、C、D) 2. 登录第4个设备D 3. 检查设备A的Token状态 | 设备A被踢出,Token失效,再次访问接口返回401 | P0 | V5 |
| TC-F4-06 | 第4设备登录后立即访问 | 登录第4个设备后,立刻用第1个设备发起请求 | 第1设备请求应被拒绝(401) | P0 | V5 |
F5 Token 安全(V4)
| ID | 场景 | 操作步骤 | 预期结果 | 优先级 | 对应验收标准 |
|---|---|---|---|---|---|
| TC-F5-01 | Token 过期拒绝访问 | 1. 获取 Token 2. 等待 Token 过期(或手动篡改) 3. 用过期 Token 访问 GET /api/auth/devices |
返回 401 Unauthorized,Token 已过期 | P0 | V4 |
| TC-F5-02 | 伪造 Token 访问 | 使用伪造的 JWT Token 访问受保护接口 | 返回 401 Unauthorized | P0 | V4 |
| TC-F5-03 | 无 Token 访问受保护接口 | 直接访问 GET /api/auth/devices 不带 Authorization |
返回 401 Unauthorized | P0 | V4 |
| TC-F5-04 | 畸形 Token 格式 | 发送格式错误的 Authorization header | 返回 401 Unauthorized | P1 | V4 |
4. 测试数据要求
| 数据项 | 要求 |
|---|---|
| 手机号 | 至少准备 3 个有效手机号(用于多设备测试) |
| 密码 | 准备 5 位(无效)、6位(边界有效)、8位(正常有效)各一个 |
| 短信验证码 | 由后端提供测试专用通道或 mock |
| 图形验证码 | 由后端提供测试专用 key/code |
| 设备名称 | 模拟 4 种不同设备名(iPhone 14, Xiaomi 13, iPad Pro, Web Browser) |
5. 测试环境要求
- 数据库:测试环境独立数据库,支持数据清理
- 短信网关:测试环境使用日志打印或内存 mock,不真实发送短信
- JWT Secret:测试环境使用固定密钥,支持手动构造过期 Token
- 多设备模拟:支持在 4 个不同"设备"上同时登录(HTTP Header 或 Cookie 区隔)
6. 阻塞项(等待 BE/FE 完成后才能执行)
- BE:短信验证码发送与验证逻辑实现
- BE:JWT Token 生成与验证逻辑实现
- BE:多设备登录数量限制(3个)及踢出逻辑实现
- BE:密码加密存储及修改逻辑实现
- FE:注册/登录页面 UI 实现
- FE:多设备管理页面实现
7. 测试进度
| 模块 | 状态 | 开始时间 | 完成时间 | 备注 |
|---|---|---|---|---|
| 接口 Review | ✅ 完成 | 2026-03-28 | 2026-03-28 | — |
| 测试用例设计 | ✅ 完成 | 2026-03-28 | 2026-03-28 | — |
| 测试环境准备 | ⏳ 待开始 | — | — | 等待 BE |
| 功能测试执行 | ⏳ 待开始 | — | — | 等待 BE/FE |
| 测试报告 | ⏳ 待开始 | — | — | — |
8. 风险项
| 风险 | 影响 | 缓解措施 |
|---|---|---|
| 短信验证码 mock 依赖 BE 配合 | 测试进度可能受阻 | 提前约定 mock 接口格式 |
| 多设备并发测试难以在纯 HTTP 模拟 | 需明确设备唯一标识策略 | 与 BE 确认 Device Token 隔离机制 |
| Token 过期等待时间较长(V2 需等5分钟,V4 需等 Token 过期) | 延长测试周期 | BE 提供 Token 过期时间配置,支持快速触发过期 |