本页由英文自动翻译。

阅读英文版
Proxy Mail QA

在 Playwright 中测试注册邮件

要在 Playwright 中测试邮箱验证,给每个测试一个新地址,用它注册,然后等待验证码或链接并完成流程。用 proxymail-qa 包只需两次调用:表单前调用 createAddress,表单后调用 waitForCode 或 waitForLink。免费套餐即可运行,本地和 CI 中都可以。

更新于

设置

安装 proxymail-qa 包,并把 API 密钥 放进 PROXYMAIL_QA_API_KEY:可以在 shell 中、不提交到 Git 的 .env 文件中,或 CI 的 secrets 中。免费套餐就够了。

npm install --save-dev proxymail-qa

测试

从 proxymail-qa/playwright 导入 test 和 expect:每个测试都会得到一个 qa fixture,这个客户端还会在每次调用中带上测试名,用于下文所述的报告。

signup.spec.ts
import { test, expect } from 'proxymail-qa/playwright';
test('sign-up sends a working code', async ({ page, qa }) => {
const { address, password } = await qa.createAddress({ persona: true, password: true });
const submitted = new Date();
await page.goto('/signup');
await page.getByLabel('Email').fill(address);
await page.getByLabel('Password').fill(password);
await page.getByRole('button', { name: 'Sign up' }).click();
const { value } = await qa.waitForCode(address, { since: submitted });
await page.getByLabel('Code').fill(value);
await expect(page).toHaveURL(/welcome/);
await qa.deleteAddress(address);
});

如果是链接而不是验证码:

const { value: link } = await qa.waitForLink(address, { type: 'verify', since: submitted });
await page.goto(link);

type 可以是 verify、magic_signin、invite、reset 或 any。请按你的应用调整标签和路由,不要直接照抄。

检查邮件本身,而不只是验证码

注册测试通过,也可能藏着有问题的邮件。这些检查能发现常见问题:

// Exactly one verification email, not two.
await new Promise((resolve) => setTimeout(resolve, 10_000)); // time for a duplicate
expect((await qa.countEmails(address, { since: submitted, type: 'link' })).count).toBe(1);
// Its link goes to staging, not localhost or production, and it passes SPF, DKIM and DMARC.
const result = await qa.checkEmail(address, { since: submitted, type: 'link', expectHost: 'staging.example.com' });
expect(result.failed).toEqual([]);

checkEmail 还会标记没写验证码何时过期、可能在手机上显示不全的邮件,配合 expectText 和 expectLanguage 还能发现缺少的语句或语言错误。它只返回检查结果,从不返回邮件。

在 CI 中运行,并在 pull request 上生成报告

在测试前添加 GitHub Action,并把 reporter 加到 Playwright 配置中。pull request 上的报告会列出收到了哪些邮件、多快到达、各来自哪个测试,以及失败的测试和失败的步骤。

.github/workflows/e2e.yml
- uses: aaquib90/proxymail-qa-action@v1
with:
api-key: ${{ secrets.PROXYMAIL_QA_API_KEY }}
- run: npx playwright test
env:
PROXYMAIL_QA_API_KEY: ${{ secrets.PROXYMAIL_QA_API_KEY }}
playwright.config.ts
export default defineConfig({
reporter: [['list'], ['proxymail-qa/playwright/reporter']],
});

每份报告都会与同名的最近几次运行比较,因此还会指出邮件是否变慢、某个测试现在收到两封邮件,或某个测试时好时坏。

更多内容见 Playwright 文档、Node.js 客户端 和在 CI 中运行。

在你的下一次注册测试中试试

免费版,无需信用卡。创建一个地址,看着验证码或链接送达。

免费创建账号打开应用

常见问题

在 Playwright 测试中如何拿到验证码?

在提交表单前记下时间,然后调用 qa.waitForCode(address, { since })。它最多等待 30 秒,并直接返回验证码,测试里不需要解析邮件。如果是链接,waitForLink 会返回 URL,用 page.goto 打开。

为什么测试有时会取到旧验证码?

没有 since 时,等待可能匹配到之前步骤或之前测试运行的邮件。传入表单提交的时间,并给每个测试单独的地址。

如果邮件一直没到怎么办?

等待会失败,并在 Proxy Mail QA 能判断的范围内说明原因:最常见的是应用的邮件服务商处于沙盒或测试模式,只向已验证的地址发信。这时延长超时没用,要修复发送端。

测试可以并行运行吗?

可以。给每个测试单独的地址,或者每次运行一个地址、每个测试一个加号标签(name+worker1@ 会投递到 name@,等待只匹配自己的标签)。一次等待无论持续多久都算一次请求。

你的应用是用 AI 工具构建的?选择你的工具

对本页有疑问?

可以用任何语言提问。文档可以立即回答,你也可以把问题发给 Proxy Mail QA 团队,他们会用英文回复。