菜单

OTP 自动化测试:从测试信箱里取出那串数字

OTP 自动化测试最容易卡在取验证码这一步。本文讲清怎么认准「这一封」、为什么超时与旧信干扰是常态、重发限流该不该为了测试关掉,以及解析健壮性、重试上限与人工兜底该怎么安排。

发布于

  • 验证码
  • 端到端测试

端到端测试跑到验证码那一步很常见地会卡住:页面在等一串数字,测试却不知道去哪里拿。可行的做法是从测试信箱里取出最近一封信、解析出那串数字、再填回表单。听起来简单,做起来会遇到超时、旧信干扰和重发限流三件事,本文把它们逐条讲清楚。

端到端测试里验证码卡在哪一步

卡点通常不在「拿不到信」,而在「不知道拿的是哪一封」。收件箱里可能同时存在上一轮的验证码、系统通知,甚至语言不同的模板。解析逻辑如果只认第一封,就会在第二轮开始出错。

从测试信箱里取验证码,主要会遇到这几件事:

  • 卡点通常不在「拿不到信」,而在「不知道拿的是哪一封」
  • 收件箱里可能同时存在上一轮的验证码、系统通知,甚至语言不同的模板
  • 超时的原因是投递是异步的:信什么时候到不由测试决定
  • 因此等待必须是轮询加上限,超时即失败
  • 旧信捣乱通常来自三处:地址被复用、收件箱没有清理,或者系统把上一轮的验证码又发了一遍

另一个卡点是时序:页面点完「发送验证码」之后进入倒计时,测试要在这段时间内完成取信与填写,否则会撞上按钮不可用。所以正确的顺序是先确定这一封,再解析,再填回。

怎么从信箱里认出「这一封」

最稳的办法是给每轮测试一个独立地址。地址本身就是标识,收到这个地址的信必然属于这一轮,不用比对主题,也不用比对时间。

如果必须共用信箱,就要靠可识别的特征:收件地址前缀、主题里的标识,或者正文里的订单号。这些都能用,但都比独立地址脆弱——模板一改,解析就断了。

解析本身也要保守:只在明确的字段或模式里取数字,不要从整封信里挑第一个看起来像数字的东西。验证码之外的数字很多,金额、时间、单号都长得差不多。

为什么总在超时,旧信为什么捣乱?

超时的原因是投递是异步的:信什么时候到不由测试决定。因此等待必须是轮询加上限,超时即失败,并且失败时把当时收件箱里的内容留下来,方便判断是信没到,还是解析错了。

旧信捣乱通常来自三处:地址被复用、收件箱没有清理,或者系统把上一轮的验证码又发了一遍。这三件事都能通过隔离与清理避免,而且成本很低。

还有一种情况是重发限流:连续请求验证码之后,系统会暂时不再发送。这是设计,不是故障——它保护的是所有用户,不该为了测试而关掉。

重发限流可以为了测试关掉吗?

不建议。限流是产品行为的一部分,关掉它等于把一条真实存在的分支从测试里删掉,用户遇到的「点太多次之后收不到信」就永远不会被验证。合理的做法是给测试准备一个不会被卡住的额度策略,但依然保留对限流本身的用例。

如果确实需要「请求太频繁」这个场景,那就主动触发它,断言系统的提示与冷却之后的行为,而不是回避它。重发次数与冷却时长属于产品决定,本文不给具体数值;你要断言的是行为,而不是某个常数。

在本站的临时邮箱里取验证码

每轮测试换一个地址,就能让「这一封」变得没有歧义。打开临时邮箱,生成地址、填进注册页,信到了会自动出现在收件箱,页面会把验证码单独提取出来,点一下就能复制到需要填写的地方。

对人工排查来说,这个页面也够用:发件人、主题、正文都看得到,不需要额外装邮件客户端,也不会把测试流量引到你自己的常用邮箱。

给开发者:解析健壮性与重试上限

解析要按「最新一封匹配主题的那封」来取,而不是无条件取第一封。主题匹配用宽松的包含关系,别把整个主题写成精确相等,否则模板一改就断。

重试要有上限,并且上限要能配置。每次重试之间留出间隔,别把信箱当成高频轮询的接口。超过上限就失败,同时保留原始报文——没有原始报文,你分不清是信没到、解析错了,还是填错了字段。

最后,人工兜底要保留。自动化跑得快,但它失败时,值班的人需要一条能立刻手动完成验证的路径;这条路径平时不用,出问题时价值极高。相关做法可以对照验证流程该怎么测和在持续集成里捕获邮件。

人工排查与自动化怎么分工

自动化负责重复的部分:每轮换地址、取信、解析、填回表单、断言结果。人工负责自动化做不好的部分:确认页面提示是否说得清楚、确认验证码在过期之后确实失效、确认连续请求之后的提示是否合理。这两类工作不能互相替代——用自动化去判断文案好不好,或用人工去重复几百次填表,都是浪费。

分工要落在具体的场景上。开发改了解析逻辑,跑自动化确认没有回归;产品调整了验证码的有效期或重发策略,人工走一遍确认体验没有变差。每次回归时优先跑「变量缺失、地址被拒、重复触发」这类容易坏的分支。

出问题时,自动化的价值在于留下现场:原始报文、当时的收件箱内容、填进去的与预期的是否一致。人工的价值在于判断这个现场意味着什么。把两者合起来,验证码这一步通常就不会再成为整条流水线的瓶颈。

配置同样要集中:地址来源、轮询间隔、重试上限、失败时的留证位置写在一起,别让每个用例各自定义一套。每条失败记录里保留使用的地址、主题与解析结果,但不要写入完整的验证码——需要复现时用时间与主题去定位,比留着那串数字更安全。

下一步

先把「这一封」的判定方式定下来,再写解析与重试,最后补一条人工兜底。要一个能立刻收信的地址,打开临时邮箱即可。整套注册与验证的检查点,见邮箱验证测试的覆盖点以及用临时邮箱测试注册流程。

测试中收到的验证码与地址只用于验证流程,不能代表任何真实身份。

继续阅读

临时邮箱(一次性邮箱 / 10 分钟邮箱)相关文章