两个官方默认值先定下预期:Playwright Test 的单项测试超时默认是 30 秒,自动重试断言默认是 5 秒。官方超时说明 这适合等待页面状态或短时接口结果,却不能证明服务器定时任务已经执行,更不能证明邮件已进收件箱。
不适合:想只用
page.clock 把服务器时间快进,或仅凭页面日期变化认定邮件送达的人。独立开发者可用本文核对上线前的延迟通知与摘要邮件。
QA 工程师可把触发条件、邮件内容和实际收件拆成可复核的验收项。
调度任务维护者可据此区分浏览器时间模拟、服务器执行证据与收件箱实收。
验收时间线:页面时钟不等于服务器调度
Playwright 的 page.clock 控制的是页面中的时间相关行为,例如 Date、浏览器计时器和动画帧;它不是服务器时钟控制器,也不会自动运行你的队列消费者、计划任务或外部调度器。官方 Clock 文档 因此,先明确本次要证明哪一层,再选证据:
| 选项 | 能验证什么 | 不能单独证明什么 | 适合的证据 |
|---|---|---|---|
| 页面时钟 | 页面上的日期显示、倒计时和浏览器端规则 | 服务器任务已执行、邮件已发送或已实收 | 页面断言、浏览器行为记录 |
| 服务器调度 | 到期任务是否被领取、执行及处理 | 收件方邮箱已收到邮件 | 任务记录、应用发送结果、关联标识 |
| 受控收件箱 | 邮件是否实际出现、内容是否匹配 | 生产环境对所有收件方都能送达 | 收件箱邮件、主题与正文检查 |
page.clock 能否直接启动服务器上的定时邮件任务?不能。它只操控浏览器页面中的时间行为;要验证服务器任务,应按自家产品实现操作测试调度器或受控测试入口,并检查任务执行记录。Playwright 的 API 请求能力可以用来准备服务器状态、验证服务端后置状态,但请求本身也不会替代调度器执行。官方 API 测试文档
建议按里程碑留证:创建本次测试数据 → 满足触发条件 → 观察服务器任务执行 → 检查应用发送结果 → 在测试收件箱核对实收。每一段都记录同一非敏感 runId,避免把旧邮件或另一轮测试误认成本次结果。
延迟通知:条件、任务记录与同一轮测试
怎样验证自家产品的延迟邮件按预期触发?把“条件是否成立”和“任务是否运行”分开断言。只改浏览器日期,最多能检查前端怎样展示预约时间;触发证据应来自服务器端任务记录,且记录要能与本轮预约数据关联。
按下面的步骤搭建一轮可复核测试:
- 在测试环境创建专用测试用户和预约记录,写入唯一、非敏感的
runId。收件地址只用于测试自家产品或获授权环境。 - 固定这条测试数据的触发条件,例如状态变化、到期时间或用户操作,并记录产品预期的触发规则。
- 如果需要检查页面倒计时或日期展示,再用
page.clock固定浏览器页面的时间;不要把这一步当作服务器时间推进。 - 按项目架构调用测试环境的调度器、任务执行入口,或等待真实调度触发;随后查询该
runId对应的任务记录。 - 检查任务状态、处理的预约记录和应用发送结果;最后再到受控收件箱确认是否出现对应邮件。
如果产品提供专用测试时钟或任务执行器,应确认它只影响测试环境,并让测试报告标明触发方式。不要为了让测试变快,直接把“页面时间已变化”记作“任务已执行”。
定时摘要:业务窗口与邮件内容
摘要邮件的核心不只是页面显示了哪一天,而是邮件实际汇总了哪个业务时间范围、发给哪个测试收件人、包含哪些记录。按产品自己的定义准备边界案例,并检查邮件正文或结构化发送内容;不要从某个时区的测试结果推导出普遍规则。
建议核对这几项:
- 时间窗口:本次摘要起止范围是否符合产品定义,边界记录有没有遗漏或重复。
- 收件目标:本轮测试用户、租户或订阅配置是否对应预期地址。
- 内容关联:邮件里的摘要数据是否来自本轮测试数据,而非旧任务或其他用户。
- 时区与日历边界:涉及夏令时、跨日或月末时,按产品支持的时区和可复现用例分别验证,不把一个用例的结果推广成通用结论。
需要从页面展示日期出发时,page.clock 可以帮助固定浏览器显示时间;但服务端摘要的统计窗口仍应依据业务逻辑和服务器侧记录验收。页面日期正确,不代表服务器按同一时间窗口生成了邮件。
重试与重复触发:区分测试重跑和业务重发
怎样检查重试后是否产生了重复邮件?先区分两种重试:测试框架重新运行失败用例,和产品调度器重试发送任务。前者会再次执行测试步骤,后者可能再次处理业务任务;它们需要分别验证。Playwright 默认不会自动重试失败测试,启用重试后,可通过 testInfo.retry 识别当前测试是否为重跑。官方重试说明
对每一轮测试使用新的 runId,并在测试环境检查产品规定的幂等行为:同一任务重复领取、执行失败后恢复,以及测试用例再次运行时,系统应该保留一封、生成多封,还是按业务规则更新记录。这里没有适用于所有产品的“只发一次”结论;应以自家产品的设计要求为准。
记录至少包含任务标识、测试轮次、应用发送结果和邮件关联信息。避免在日志或主题中放入真实姓名、个人邮箱等敏感信息。一条任务成功日志只说明某个执行环节报告成功,不能单独证明邮件只发了一次或已经进入收件箱。
真实收件:发送结果与实收证据分层
要确认定时邮件确实进入测试收件箱,应使用专为自家产品或获授权环境准备的受控地址,并检查邮件是否可读取、主题与正文是否关联本轮 runId。必要时保存脱敏后的验收记录;不要把完整个人资料、验证码或生产用户内容放进测试日志。
Playwright 的断言会在等待条件满足或超时前重复检查;但这类等待机制针对的是被断言的条件,并不会把服务器发送成功改写为收件箱实收。官方断言说明 特别是邮件到达时间受实际发送与收件链路影响,测试通过不能成为普遍送达保证。
建议将结论分别记录为:
- 调度触发:本轮任务是否被执行,依据是什么。
- 应用发送:应用是否报告已发送,关联哪条任务记录。
- 测试实收:受控收件箱中是否找到本轮邮件,正文是否匹配。
- 结论边界:本次结果只说明该产品、该配置和该收件条件下的测试观察,不等于生产环境对所有域名均可送达。
收件地址选择与验收结论
收件地址应先按测试目的选择:短期测试且结束后不需找回账号,可考虑临时收件地址;需要持续收信、回复或找回账号,则使用受控测试邮箱或长期地址。临时邮箱不适合银行、支付、政务等重要账号,也不适合依赖长期收信的场景。可先读临时邮箱、邮箱别名与主邮箱的用途对比,再按测试等待时长查看一小时收件箱的有效期与续期说明。
核对 HourInbox 当前公开页面可见的能力:临时收件箱页面无需注册即可使用,页面展示的临时地址后缀为 @hourinbox.com;临时地址默认保留一小时,邮箱到期后邮件会清理。页面也展示了可选前缀,但这是登录后创建长期别名的功能,不应误认为临时收件地址可以自定义前缀;长期别名会转发到经过验证的收件邮箱。以上是产品页面描述,不代表你的邮件一定到达,也不代表所有测试环境都会接受该地址。HourInbox 临时收件箱页面
最终验收可用一句记录格式收口:“本轮 runId 的触发条件为……;服务器任务记录为……;应用发送结果为……;测试收件箱实收为……;结论仅适用于本次测试环境。”若只需短时注册、试用或验证自家产品的一封通知,可先评估 HourInbox 的临时收件箱是否符合测试环境要求;它无需注册、可即开即用,能避免把主邮箱地址交给测试流程,也减少测试邮件混入日常收件箱的情况。若需要长期找回账号、回复邮件或接收重要通知,应改用长期受控地址。
短期收信,长期联络,各就各位。
一次性任务用带倒计时的收件箱;之后还要收信,就为自己建立长期转发别名。