设置
安装 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,这个客户端还会在每次调用中带上测试名,用于下文所述的报告。
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 duplicateexpect((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 上的报告会列出收到了哪些邮件、多快到达、各来自哪个测试,以及失败的测试和失败的步骤。
- 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 }}export default defineConfig({ reporter: [['list'], ['proxymail-qa/playwright/reporter']],});每份报告都会与同名的最近几次运行比较,因此还会指出邮件是否变慢、某个测试现在收到两封邮件,或某个测试时好时坏。
更多内容见 Playwright 文档、Node.js 客户端 和在 CI 中运行。