验证邮件出现并不代表注册流程已经正确。链接可能指向错误环境,旧邮件可能被误用,backend也可能根本没有更新用户状态。可靠测试要沿着同一个identity从表单走到最终verified状态,并证明收到的消息属于当前尝试。
测试完整状态机
- 1
从未注册地址开始
避免把duplicate或resend行为当成首次注册。
- 2
只提交一次注册
记录identity、locale和环境。
- 3
匹配当前邮件
核对收件人、时间、host和code/token。
- 4
走公开验证流程
不要直接改数据库状态。
- 5
验证最终状态
确认访问规则也真正按verified状态改变。
重要负向场景
| 场景 | 断言 | 捕获问题 |
|---|---|---|
| 旧邮件 | 不能验证错误尝试 | false positive |
| 错误环境 | staging不跳production | 环境混淆 |
| 过期 | 安全失败并可恢复 | 延迟使用 |
| 重复使用 | 符合产品策略 | replay |
验证属于identity state
OWASP把邮箱验证放在identity system中讨论,Auth0也允许根据email_verified控制访问。因此“请检查邮箱”的页面不是最终证据。
只有检查真实状态,才能发现邮件正确但backend transition错误的情况。
失败时保留的证据
- 地址与环境
- 注册后的response
- 发件人、主题、时间
- 隐藏secret后的verification host
- 验证前后状态
注册验证测试只有在正确identity真正进入产品承诺的verified状态时才完成。邮件只是这次状态迁移的一部分证据。
需要一个干净的收件地址做手工邮件 QA?
使用 MailOnce 检查真实的注册、OTP、魔法链接、密码重置和通知邮件,无需把个人邮箱放进测试数据。
创建临时邮箱来源与延伸阅读
用于支撑测试建议的安全资料和测试运行器一手文档。
继续测试
继续查看同一邮件测试问题空间中的下一个边界。