登录功能测试案例¶
登录是大多数系统的入口,测试时不能只测“账号密码正确能登录”。它还涉及参数校验、错误提示、安全限制、会话状态、权限跳转等内容。
需求背景¶
用户可以使用手机号和密码登录系统。连续输错 5 次密码后账号锁定 15 分钟。登录成功后进入首页,并保持登录状态。
测试点拆解¶
| 维度 | 测试点 |
|---|---|
| 正常流程 | 正确手机号和密码登录成功 |
| 参数校验 | 手机号为空、密码为空、手机号格式错误 |
| 账号状态 | 未注册、已禁用、已锁定、已注销账号 |
| 密码错误 | 输错 1 次、连续输错 5 次、锁定后再登录 |
| 验证码 | 是否需要验证码、验证码错误、验证码过期 |
| 会话 | 登录后刷新、关闭浏览器再打开、退出登录 |
| 安全 | 密码是否明文传输、错误提示是否泄露账号是否存在 |
| 兼容性 | Chrome、Edge、移动端浏览器基础验证 |
用例示例¶
| 编号 | 测试点 | 步骤 | 预期结果 |
|---|---|---|---|
| LOGIN-001 | 正常登录 | 输入已注册手机号和正确密码,点击登录 | 登录成功,进入首页,显示用户昵称 |
| LOGIN-002 | 密码错误 | 输入正确手机号和错误密码 | 登录失败,提示账号或密码错误 |
| LOGIN-003 | 手机号格式错误 | 输入 12345 和任意密码 |
前端提示手机号格式不正确或接口返回参数错误 |
| LOGIN-004 | 密码为空 | 手机号正确,密码为空,点击登录 | 提示密码不能为空,不进入首页 |
| LOGIN-005 | 连续输错 5 次 | 连续提交 5 次错误密码 | 账号被临时锁定,提示锁定时间 |
| LOGIN-006 | 锁定期间登录 | 锁定后输入正确密码登录 | 不允许登录,提示账号锁定 |
| LOGIN-007 | 退出登录 | 登录成功后点击退出,再访问首页 | 跳转登录页,不能继续访问首页 |
接口校验¶
登录接口至少检查:
- HTTP 状态码和业务码。
- token 是否返回。
- token 过期时间是否合理。
- 错误密码是否不会返回 token。
- 连续失败次数是否被记录。
- 锁定状态是否正确写入数据库或缓存。
测试数据准备¶
| 数据 | 用途 |
|---|---|
| 正常账号 | 验证登录成功、刷新页面、退出登录 |
| 密码错误账号 | 验证错误提示和失败次数累计 |
| 禁用账号 | 验证账号状态限制 |
| 锁定账号 | 验证锁定期间不能登录 |
| 未注册手机号 | 验证错误提示是否泄露账号状态 |
新手练习时至少准备两个账号:一个正常账号,一个用于反复输错密码的账号,避免把正常账号锁住影响后续测试。
执行步骤示例¶
- 先用正常账号登录,确认主流程可用。
- 再验证手机号为空、格式错误、密码为空等参数校验。
- 连续输入错误密码 5 次,观察页面提示和接口响应。
- 锁定后立刻输入正确密码,确认不能绕过锁定。
- 退出登录后访问首页或个人中心,确认需要重新登录。
- 用 Postman 重放登录接口,检查失败时不会返回 token。
数据校验示例¶
-- 查看用户状态和失败次数,字段名以实际项目为准
SELECT id, phone, status, login_fail_count, locked_until
FROM users
WHERE phone = '13800138000';
-- 查看登录日志
SELECT user_id, login_result, login_ip, created_at
FROM login_logs
WHERE user_id = 10001
ORDER BY created_at DESC;
缺陷示例¶
| 字段 | 内容 |
|---|---|
| 标题 | 连续输错 5 次密码后账号未被锁定 |
| 前置条件 | 用户账号状态正常,锁定规则为连续输错 5 次锁定 15 分钟 |
| 复现步骤 | 连续 5 次输入错误密码后,再输入正确密码登录 |
| 实际结果 | 正确密码可以登录成功 |
| 期望结果 | 账号被锁定,15 分钟内不能登录 |
| 影响 | 暴力破解风险增加 |
容易漏测¶
- 只测错误密码,不测账号锁定。
- 只看页面提示,不看接口是否返回敏感信息。
- 登录后不验证刷新页面和退出登录。
- 不验证禁用账号、注销账号、未注册账号。
- 忽略移动端输入法、大小写、空格复制粘贴。
复盘问题¶
- 账号不存在时,应该提示“账号不存在”还是“账号或密码错误”?为什么?
- 登录失败次数应该存数据库还是缓存?各有什么风险?
- token 过期后,前端应该怎么处理?