MoeMail
返回博客

测试魔法链接 / 免密登录

免密(魔法链接)登录对用户很友好,对测试却很别扭:没有密码可输,只有一封邮件送来的一次性链接。好消息是——它和开发者邮件测试里其他一切用的是同一套读收件箱模式,简直就是找回密码测试的孪生兄弟。

流程

  1. 开一个全新的一次性收件箱,并为它请求一条魔法链接。
  2. 读取邮件,把登录 URL 提取出来。
  3. 打开这个 URL,并断言你已进入一个已认证的会话。

示例(Playwright)

const inbox = await createInbox()
await page.goto('/login')
await page.getByLabel('Email').fill(inbox.address)
await page.getByRole('button', { name: 'Send magic link' }).click()

const msg = await waitForMessage(inbox.id, 30000)
// 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 expect(page.getByText('Signed in')).toBeVisible()

这里的 createInbox / waitForMessage 小助手来自 Playwright 教程Cypress 的自定义命令用法相同。

边界情况

过期链接、一次性使用的强制约束(第二次点击应当失败),以及为一个不存在的地址请求链接(响应要保持一致,以免暴露用户是否存在)。每一种都是上面那条流程的小变体。当还涉及第二因素时,可对照OTP 与 2FA 测试

动手开始

创建一个邮箱,读一读 OpenAPI 文档,把收件箱调用接进你的测试套件。