两个官方默认值先定下预期:Playwright Test 的单项测试超时默认是 30 秒,自动重试断言默认是 5 秒。官方超时说明 这适合等待页面状态或短时接口结果,却不能证明服务器定时任务已经执行,更不能证明邮件已进收件箱。

适合:需要验收自家产品定时邮件的开发者与 QA;分别检查调度记录和受控收件箱,才能判断“已触发”与“已实收”。
不适合:想只用 page.clock 把服务器时间快进,或仅凭页面日期变化认定邮件送达的人。

独立开发者可用本文核对上线前的延迟通知与摘要邮件。
QA 工程师可把触发条件、邮件内容和实际收件拆成可复核的验收项。
调度任务维护者可据此区分浏览器时间模拟、服务器执行证据与收件箱实收。

验收时间线:页面时钟不等于服务器调度

Playwright 的 page.clock 控制的是页面中的时间相关行为,例如 Date、浏览器计时器和动画帧;它不是服务器时钟控制器,也不会自动运行你的队列消费者、计划任务或外部调度器。官方 Clock 文档 因此,先明确本次要证明哪一层,再选证据:

选项 能验证什么 不能单独证明什么 适合的证据
页面时钟 页面上的日期显示、倒计时和浏览器端规则 服务器任务已执行、邮件已发送或已实收 页面断言、浏览器行为记录
服务器调度 到期任务是否被领取、执行及处理 收件方邮箱已收到邮件 任务记录、应用发送结果、关联标识
受控收件箱 邮件是否实际出现、内容是否匹配 生产环境对所有收件方都能送达 收件箱邮件、主题与正文检查

page.clock 能否直接启动服务器上的定时邮件任务?不能。它只操控浏览器页面中的时间行为;要验证服务器任务,应按自家产品实现操作测试调度器或受控测试入口,并检查任务执行记录。Playwright 的 API 请求能力可以用来准备服务器状态、验证服务端后置状态,但请求本身也不会替代调度器执行。官方 API 测试文档

建议按里程碑留证:创建本次测试数据 → 满足触发条件 → 观察服务器任务执行 → 检查应用发送结果 → 在测试收件箱核对实收。每一段都记录同一非敏感 runId,避免把旧邮件或另一轮测试误认成本次结果。

延迟通知:条件、任务记录与同一轮测试

怎样验证自家产品的延迟邮件按预期触发?把“条件是否成立”和“任务是否运行”分开断言。只改浏览器日期,最多能检查前端怎样展示预约时间;触发证据应来自服务器端任务记录,且记录要能与本轮预约数据关联。

按下面的步骤搭建一轮可复核测试:

  1. 在测试环境创建专用测试用户和预约记录,写入唯一、非敏感的 runId。收件地址只用于测试自家产品或获授权环境。
  2. 固定这条测试数据的触发条件,例如状态变化、到期时间或用户操作,并记录产品预期的触发规则。
  3. 如果需要检查页面倒计时或日期展示,再用 page.clock 固定浏览器页面的时间;不要把这一步当作服务器时间推进。
  4. 按项目架构调用测试环境的调度器、任务执行入口,或等待真实调度触发;随后查询该 runId 对应的任务记录。
  5. 检查任务状态、处理的预约记录和应用发送结果;最后再到受控收件箱确认是否出现对应邮件。

如果产品提供专用测试时钟或任务执行器,应确认它只影响测试环境,并让测试报告标明触发方式。不要为了让测试变快,直接把“页面时间已变化”记作“任务已执行”。

定时摘要:业务窗口与邮件内容

摘要邮件的核心不只是页面显示了哪一天,而是邮件实际汇总了哪个业务时间范围、发给哪个测试收件人、包含哪些记录。按产品自己的定义准备边界案例,并检查邮件正文或结构化发送内容;不要从某个时区的测试结果推导出普遍规则。

建议核对这几项:

  • 时间窗口:本次摘要起止范围是否符合产品定义,边界记录有没有遗漏或重复。
  • 收件目标:本轮测试用户、租户或订阅配置是否对应预期地址。
  • 内容关联:邮件里的摘要数据是否来自本轮测试数据,而非旧任务或其他用户。
  • 时区与日历边界:涉及夏令时、跨日或月末时,按产品支持的时区和可复现用例分别验证,不把一个用例的结果推广成通用结论。

需要从页面展示日期出发时,page.clock 可以帮助固定浏览器显示时间;但服务端摘要的统计窗口仍应依据业务逻辑和服务器侧记录验收。页面日期正确,不代表服务器按同一时间窗口生成了邮件。

重试与重复触发:区分测试重跑和业务重发

怎样检查重试后是否产生了重复邮件?先区分两种重试:测试框架重新运行失败用例,和产品调度器重试发送任务。前者会再次执行测试步骤,后者可能再次处理业务任务;它们需要分别验证。Playwright 默认不会自动重试失败测试,启用重试后,可通过 testInfo.retry 识别当前测试是否为重跑。官方重试说明

对每一轮测试使用新的 runId,并在测试环境检查产品规定的幂等行为:同一任务重复领取、执行失败后恢复,以及测试用例再次运行时,系统应该保留一封、生成多封,还是按业务规则更新记录。这里没有适用于所有产品的“只发一次”结论;应以自家产品的设计要求为准。

记录至少包含任务标识、测试轮次、应用发送结果和邮件关联信息。避免在日志或主题中放入真实姓名、个人邮箱等敏感信息。一条任务成功日志只说明某个执行环节报告成功,不能单独证明邮件只发了一次或已经进入收件箱。

真实收件:发送结果与实收证据分层

要确认定时邮件确实进入测试收件箱,应使用专为自家产品或获授权环境准备的受控地址,并检查邮件是否可读取、主题与正文是否关联本轮 runId。必要时保存脱敏后的验收记录;不要把完整个人资料、验证码或生产用户内容放进测试日志。

Playwright 的断言会在等待条件满足或超时前重复检查;但这类等待机制针对的是被断言的条件,并不会把服务器发送成功改写为收件箱实收。官方断言说明 特别是邮件到达时间受实际发送与收件链路影响,测试通过不能成为普遍送达保证。

建议将结论分别记录为:

  • 调度触发:本轮任务是否被执行,依据是什么。
  • 应用发送:应用是否报告已发送,关联哪条任务记录。
  • 测试实收:受控收件箱中是否找到本轮邮件,正文是否匹配。
  • 结论边界:本次结果只说明该产品、该配置和该收件条件下的测试观察,不等于生产环境对所有域名均可送达。

收件地址选择与验收结论

收件地址应先按测试目的选择:短期测试且结束后不需找回账号,可考虑临时收件地址;需要持续收信、回复或找回账号,则使用受控测试邮箱或长期地址。临时邮箱不适合银行、支付、政务等重要账号,也不适合依赖长期收信的场景。可先读临时邮箱、邮箱别名与主邮箱的用途对比,再按测试等待时长查看一小时收件箱的有效期与续期说明。

核对 HourInbox 当前公开页面可见的能力:临时收件箱页面无需注册即可使用,页面展示的临时地址后缀为 @hourinbox.com;临时地址默认保留一小时,邮箱到期后邮件会清理。页面也展示了可选前缀,但这是登录后创建长期别名的功能,不应误认为临时收件地址可以自定义前缀;长期别名会转发到经过验证的收件邮箱。以上是产品页面描述,不代表你的邮件一定到达,也不代表所有测试环境都会接受该地址。HourInbox 临时收件箱页面

最终验收可用一句记录格式收口:“本轮 runId 的触发条件为……;服务器任务记录为……;应用发送结果为……;测试收件箱实收为……;结论仅适用于本次测试环境。”若只需短时注册、试用或验证自家产品的一封通知,可先评估 HourInbox 的临时收件箱是否符合测试环境要求;它无需注册、可即开即用,能避免把主邮箱地址交给测试流程,也减少测试邮件混入日常收件箱的情况。若需要长期找回账号、回复邮件或接收重要通知,应改用长期受控地址。

短期收信,长期联络,各就各位。

一次性任务用带倒计时的收件箱;之后还要收信,就为自己建立长期转发别名。