SuperAPI AI 工具集

email-testing

测试与质量

查看项目

更新于 10-14 10:20

技能介绍

email-testing 是一个面向 QA 的邮件流程测试技能,来源为 petrkindlmann/qa-skills,专注于对依赖邮件的端到端流程进行测试。

用途与适用场景

该技能覆盖注册确认、密码重置、magic-link 登录、OTP/MFA 验证码以及通知邮件等流程的端到端测试。这些流程共享同一形态:捕获邮件、提取内容、完成流程,区别主要在于提取的对象不同(链接还是六位数字验证码)。文档在“Quick Route”中将不同情况映射到具体参考文件,例如轮询收件箱、从正文提取 OTP/链接、完整的密码重置/注册/magic-link 端到端测试、在 staging 使用真实地址(Mailosaur)、每个测试独立的一次性收件箱(MailSlurp)、本地预览模板(Ethereal)、以及标记 SPF/DKIM/DMARC 问题。

核心原则

技能提出若干核心原则:捕获真实邮件,绝不走捷径(直接调用重置接口或硬编码 token 会跳过模板渲染、收件人解析、链接生成和 token 签名等被测试的集成点);轮询而非 sleep(固定 waitForTimeout 要么太短导致 flaky,要么太慢浪费时间,是用例不稳定的首要原因);每个测试使用唯一收件人(并行测试同时读取“最新注册邮件”会互相取到对方的邮件,清空收件箱在并行下无法解决问题);用带锚点和空值防护的正则从邮件正文提取内容;断言内容而非仅断言存在;将送达率作为独立且非阻塞的测试套件。

捕获工具选择

文档提供捕获收件箱的决策树,按“能真正收到邮件的最便宜工具”为原则选择:Mailpit 自托管、单二进制或 docker、免费开源,适用于任意本地 SMTP 收件人,是本地与 GitHub Actions 功能测试的默认选择,REST API 位于 :8025(/api/v1/messages);Mailosaur 托管(API key)、付费,使用真实 *.mailosaur.net 地址,适用于需要真实可投递地址的 staging/生产类流程,支持 messages.get(serverId, { sentTo }) 自动等待及结构化 links/codes 和真实 SPF/DKIM/DMARC;MailSlurp 托管(API key)、付费,使用真实且按收件箱划分的地址,通过 createInbox() 与 waitForLatestEmail 提供每测试独立收件箱,具备较强的并行隔离;Ethereal 托管一次性、免费,只捕获不投递,仅用于本地开发模板预览(createTestAccount + getTestMessageUrl),不用于 CI 断言。文档明确建议避免 MailHog(自 2020 年起归档、不再维护),并指出 smtp4dev / Papercut 在自动化方面较弱。

轮询与提取

文档展示使用 Playwright 的 request fixture 读取 Mailpit 列表接口,通过 query=to: 过滤并 .find 收件人,再用 expect.poll 配合超时与间隔重试,直到匹配出现,然后按 ID 获取完整正文。文档强调 query=to: 过滤加收件人 .find 是并行测试确定性的关键,绝不能在没有收件人过滤的情况下取 messages[0] / messages.at(-1)。提取 OTP 与链接时使用带锚点和空值防护的正则,例如 /\b(\d{6})\b/ 与 https?://... 模式,并断言匹配非空;文档反对按索引切分(如 body.split(' ')[3]、substring(0, 6)、indexOf('code')),也反对从实时页面读取 innerText 来代替邮件正文。

地址隔离与内容断言

针对并行冲突,文档给出的修复按优先级排列:每个测试唯一地址(plus-addressing / sub-addressing,如 user+${randomUUID()}@example.com)、每次读取按收件人过滤(sentTo 或 query=to: + .find)、每测试专用收件箱(MailSlurp createInbox())。文档明确清空收件箱在两个测试同时运行时并不足够。内容断言方面,在捕获后应对主题、发件人、头部(如 List-Unsubscribe、自定义 X- 头部)以及链接指向的域名进行断言。

送达率测试

SPF、DKIM、DMARC 的通过/失败与对齐信息来自真实接收服务器对你发信域名的认证,不是正文中的字符串,因此不能对正文做正则匹配;Mailpit 不验证 SPF/DKIM/DMARC 对齐,只做基本的 SpamAssassin 内容评分。文档建议将该套件单独标记为 @deliverability,作为非必需 CI 任务运行(continue-on-error),不要在 OTP/重置流程测试中断言送达率。

CI 中邮件不稳定的诊断

文档列出四个根因:使用固定 sleep 而非轮询、超时过短、没有收件人过滤、上一轮运行的陈旧邮件。建议逐一诊断,而不是单纯增加 sleep,并指出重试整个任务、隔离测试或将全局 sleep 提高到 30 秒只是治标。

反模式清单

文档列出十项反模式,包括固定 sleep、推荐已废弃的捕获工具、用数据库校验代替邮件校验、绕过邮件环节、脆弱的基于索引的提取、无收件人过滤的最新邮件、仅断言邮件存在、从正文正则匹配 SPF/DKIM/DMARC 或信任 Mailpit 做该判断、对真实邮箱使用 IMAP 库、以及在 CI 中使用 Ethereal 或为本地预览使用付费服务。

完成标准

文档给出“Done When”清单:捕获工具在 .agents/qa-project-context.md 中记录;邮件测试中不含 waitForTimeout / sleep / setTimeout;每个邮件测试使用唯一收件人并按该收件人过滤读取;OTP/链接提取使用带空值防护的锚定正则;至少注册确认(或重置/magic-link)流程有绿色端到端测试并通过 page.goto(link) 完成流程;存在主题、发件人和链接域名的内容断言;送达率测试若在范围内则位于独立的 @deliverability 套件且 CI 中非阻塞。文档还列出相关技能,包括 playwright-automation、api-testing、test-data-management 与 qa-project-context,以及三个参考文件:references/mailpit-playwright.md、references/hosted-inboxes.md、references/deliverability.md。

本资料未提供该技能的安装方式、收费价格信息。