你实际在测什么
一个验证流程有多个活动部件,每个都可能独立出错。好的测试同时覆盖顺利路径与失败路径,因为失败处理正是赢得或失去用户信任之处。
- 发送:为一个有效号码生成并派发验证码。
- 接收并校验:正确的验证码被接受,会话被提升。
- 拒绝:错误、过期与被重用的验证码被拒。
- 限制:限流与重发冷却按设计生效。
- 降级:通道升级与错误状态被正确渲染。
使用服务商测试凭据与魔法验证码
每家主要服务商都提供在不发真实消息的情况下演练流程的方式。Twilio 有测试凭据与魔法手机号码,可模拟成功与特定失败响应;Vonage、Sinch 与 MessageBird 提供沙箱模式与测试号码。在本地与 CI 运行中使用它们,让你的测试套件从不触及真实运营商。
- Twilio:测试凭据 + 强制成功/无效/失败结果的魔法号码。
- 其他:沙箱 API 密钥与指定的测试号码。
- 把测试与实发凭据放在分开、命名清晰的环境配置中。
绝不要在 CI 中对实发凭据运行测试——一个循环 bug 就能发出数千条付费消息,还会让你的发送方被标记。
开通你掌控的测试号码
对于真正会送达消息的端到端测试,请开通你所拥有的可编程号码作为测试接收方,再通过服务商的消息 API 把送达的验证码读回来,喂给你的校验步骤。因为号码和应用都归你所有,这是一次对你自己系统的干净闭环测试。
- 1
开通一个测试号码
在你的服务商账号中创建一个专用于测试环境的可编程号码。
- 2
触发你的发送
调用你自己的注册/校验端点,让你的应用向测试号码真实地发一个验证码。
- 3
通过 API 读取验证码
通过服务商 API 取回入站消息,并以编程方式提取验证码。
- 4
完成并断言
把验证码提交到你的校验端点,断言会话被提升;随后释放号码。
在 CI 中自动化
把上述流程接入你的流水线,让每次构建都检查验证。用模拟/沙箱路径做在每次提交上运行的快速单元与集成测试,把真实闭环测试(用你所拥有的号码)留到每夜或发布前阶段,以控制成本。
- 快车道:在每次提交上模拟服务商或使用测试凭据。
- 慢车道:每夜或发布前做真实的发到自有号码测试。
- 也要断言失败路径:过期验证码、错误验证码与限流响应。
- 对送达延迟的回退发出告警,而不只是通过/失败。
测试送达,而非只测逻辑
逻辑测试证明你的代码正确;它们并不证明消息在现实世界中送达。请定期向你关键运营商与国家的号码发送真实测试流量,测量实际送达率与延迟,从而在用户之前发现路由或过滤的回退。
送达问题常按国家或按运营商出现。请把你的监控在真实目标地组合上轮换——送达率指南解释了原因。