测试找回密码邮件流程
找回密码是一条关键路径,既容易出问题、又难以测试,因为它要靠一封邮件送达的唯一链接来支撑。下面演示如何用一个一次性收件箱 API 把它端到端自动化——它属于开发者邮件测试,也是 OTP 与 2FA 测试和魔法链接登录的近亲。
流程
- 开一个全新收件箱,并用这个地址创建一个用户。
- 为它请求一次密码重置。
- 读取重置邮件,把链接提取出来。
- 打开链接,设置新密码,并断言你能登录成功。
示例(Playwright)
const inbox = await createInbox()
await page.goto('/forgot-password')
await page.getByLabel('Email').fill(inbox.address)
await page.getByRole('button', { name: 'Send reset link' }).click()
const msg = await waitForMessage(inbox.id, 30000)
// take the first http(s) URL in the email body
const link = (msg.links && msg.links[0])
|| msg.text.split(/\s+/).find(w => w.indexOf('http') === 0)
await page.goto(link)
await page.getByLabel('New password').fill('S0me-Str0ng-Pass')
await page.getByRole('button', { name: 'Reset password' }).click()
await expect(page.getByText('Password updated')).toBeVisible()
这里的 createInbox / waitForMessage 小助手,和 Playwright 教程里的是同一套;在 Cypress 里则改用自定义命令。
值得覆盖的边界情况
已过期或已使用的链接、为一个不存在的邮箱请求重置(应当与正常情况看起来一模一样,以免暴露用户是否存在),以及限流。每一种都是上面那条流程的小变体。
动手开始
创建一个邮箱、取一个 API 密钥,再读一读 OpenAPI 文档,把收件箱调用接进你的测试套件。