验证码测试测试用例OTP质量保障

🧪验证码测试从哪些角度找问题?一份实战检查清单

验证码测试该从哪些角度切入?本文按发送、接收、校验、安全、体验五个维度整理测试用例和高频缺陷,适合测试工程师排查和面试自查。

✍️ SmsHub 团队 📅 2026年7月30日

一句话回答: 把验证码拆成发送、接收、校验、安全、体验五段,每段单独设计用例。绝大多数线上事故都出在「校验」和「安全」这两段,而不是发不出去。

验证码测试检查清单

被问到「你会从哪些角度找验证码的问题」,最容易踩的坑是只答”能不能收到”。真正值钱的答案是一条完整链路。

一、发送端

  • 手机号格式:国际区号、前导 0、空格和横线、超长/超短号。
  • 号码类型:座机、虚拟号、已注销号,系统是否给出明确提示。
  • 频控:同号码、同 IP、同设备指纹的发送间隔和每日上限,见 验证码频率限制
  • 并发:同一号码连续点两次「获取验证码」,服务端是幂等还是发两条。
  • 渠道降级:短信失败后是否回落到语音码,见 语音验证码

二、接收端

  • 到达时延,以及超时后的提示文案是否准确。
  • 短信签名和模板是否被运营商拦截,见 运营商短信过滤
  • 跨国下发是否可达,冷门国家是否有兜底。
  • 自动填充是否生效(格式要符合规范),见 短信验证码自动填充

三、校验端(事故高发区)

用例期望
过期码明确报”已过期”,不能通过
已用过的码一次性失效
连续请求多条只认最新一条,旧码立即作废
换手机号后用旧码不通过
大小写/空格/全角归一化后校验
错误次数超限锁定并要求重新获取
并发提交同一码只成功一次

「旧码仍然有效」和「同一码能用两次」是最典型的线上漏洞。

四、安全角度

  • 枚举爆破:6 位码只有一百万种组合,没有错误次数上限就等于没有验证,见 验证码为什么是 6 位
  • 响应差异:号码存在与不存在时的返回内容、状态码、耗时是否一致,否则可枚举用户。
  • 越权校验:能否用 A 的手机号收码去改 B 的密码。
  • 接口重放:抓包重放发送接口能不能刷短信费,即短信轰炸,见 短信轰炸
  • 日志泄漏:验证码是否被明文写进日志或上报到监控。

五、体验角度

  • 倒计时结束前能否重发、页面刷新后倒计时是否还在。
  • 错误提示是否可操作(“稍后重试”属于无效提示)。
  • 粘贴整串短信时能否自动提取数字。
  • 无障碍:输入框是否可读屏、是否支持键盘导航。

怎么答这道面试题

按「链路分段 + 举一个自己真踩过的缺陷」来说。例如:“我按发送、接收、校验、安全、体验五段设计用例,实际做过的项目里出过一个旧验证码没作废的问题——用户连点三次获取,前两条码依然可用,我们在校验时改成只保留最新一条才修掉。“

小结

验证码看着简单,缺陷集中在状态管理和限流上。用例先覆盖”过期、复用、并发、超限”这四个词,命中率最高。

← 返回博客列表