测试工程

通知恰好一次的测试:允许消息重复,不允许用户看见重复

在至少一次消息、Service Worker 重启与多标签页环境下,用稳定事件 ID、原子领取和 notification tag 验证用户只收到一次提示。

好的实现不会依赖用户反复刷新碰运气,而会让每个阶段有明确输入、输出、超时和终态。 传输层很难保证恰好一次,但用户可见副作用可以幂等。通知事件拥有稳定 ID,客户端在持久存储中原子标记 claimed 后才调用 showNotification。

测试要把状态机、故障注入和真实浏览器组合起来。确定性用例守住已知契约,随机时序寻找竞态,失败 seed 和两端轨迹必须保存成永久回归。

先定义系统契约

先从数据和协议能保证的事实出发,再决定界面承诺。下面的规则都应有明确所有者、边界值和兼容策略,不能只存在于某次代码评审的口头共识里。

  • 多标签页通过 BroadcastChannel 或存储事务竞争 owner;Service Worker 使用相同去重库,tag 允许操作系统替换同事件而非新增。
  • 所有输入都设置大小、次数和时间预算,并在超限时返回可操作的稳定错误码。
  • 兼容性通过显式能力协商决定,旧客户端得到可解释的降级路径,而不是进入半可用状态。

“通知恰好一次的测试:允许消息重复,不允许用户看见重复”的交付标准是正常路径可用、异常路径收敛、资源有界,并且用户能理解系统为何采用当前状态。 这样得到的不是演示代码,而是能解释、能降级、能回滚的生产能力。

哪些情况会破坏契约

失败路径需要与成功路径共享同一套状态模型。只弹一个错误提示却不释放资源、不传播终态,下一次恢复就会继承脏状态。

  • 内存 Set 在 Worker 被回收后清空;先展示再写去重记录会在崩溃窗口弹两次,正是“你好”出现双通知的来源。
  • 旧响应在新任务建立后迟到,如果没有版本隔离,会把健康状态覆盖成失败或再次启动已取消工作。
  • 指标标签直接包含用户或任务标识,既制造高基数成本,也让诊断数据泄露不必要的身份信息。

如何逐条验证契约

发布闸门应包含确定性回归、随机时序探索和真实浏览器组合。发现一次失败后保存 seed 与状态轨迹,让它永久成为可重放用例。

  1. 把同一事件同时投给两个标签和 Worker,在展示前后分别终止进程并重放,系统通知中心始终只能有一个活动条目。
  2. 连续执行一百次开始、失败、重试和取消,检查句柄、监听器、队列及临时数据回到基线。
  3. 发布前记录成功率、p50/p95/p99 延迟、错误分类和资源高水位,并为回退条件设定明确阈值。

最终结果应同时满足正确性、可恢复性和可解释性。任何一项只能依赖刷新页面或工程师猜测,都说明协议闭环仍不完整。

把方法变成一次真实连接

打开 uCopy,让两台设备在浏览器里安全连接并开始传输。

开始免费使用