模拟sse流式推送需构造符合协议的http响应流:content-type为text/event-stream,cache-control: no-cache且connection: keep-alive,数据块以data:开头、双换行结尾;express可用res.write()分段推送,msw/playwright需手动构造readablestream;前端须断言onopen、onmessage、onerror及重连行为。

在自动化测试脚本中模拟 SSE(Server-Sent Events)流式推送,关键不是“伪造连接”,而是**可控地构造符合 SSE 协议的 HTTP 响应流**,让前端 EventSource 能真实接收、解析、重连,并触发对应事件。这比 mock 一个静态 JSON 更严格,也更贴近生产行为。
服务端需返回标准 SSE 响应格式
测试中若用本地 mock 服务(如 Express、MSW 或 Playwright 自定义路由),必须确保响应满足三项硬性要求:
- Content-Type 必须是 text/event-stream,不能是 application/json 或其他类型
- Cache-Control: no-cache + Connection: keep-alive 缺一不可,否则浏览器可能缓存或提前关闭连接
-
数据块必须严格按 SSE 格式书写:每条消息以
data: {...}开头,结尾用两个换行符(\n\n);支持可选字段如id:、event:、retry:
用 Express 模拟带节奏的流式响应
适合 Node.js 测试环境。核心是禁用缓冲、分段写入、保持连接不结束:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 调用
res.flush()和res.write()主动推送,避免被中间件或代理缓存 - 用
setTimeout控制发送节奏,例如每 800ms 推一条 CPU 数据,验证前端是否平滑更新 - 中途可主动
res.destroy()模拟网络中断,验证 EventSource 是否在约 3 秒后自动重连
用 MSW 或 Playwright 拦截并注入流式响应
适用于 E2E 测试,无需启动独立 mock 服务:
-
MSW 不直接支持流式响应,但可通过自定义
ctx.fetch()返回一个手动构造的ReadableStream,逐块controller.enqueue()发送data: {...}\n\n字符串 -
Playwright 中 route.fulfill() 不支持流,需改用
route.continue()并代理到一个本地 Express 流式接口,或用route.handler返回自定义 Response + ReadableStream - 务必设置
response.headers.set('content-type', 'text/event-stream'),否则 EventSource 不会启动监听
前端测试断言要覆盖真实生命周期
不能只检查最终 DOM 状态,要验证整个流式交互是否符合预期:
- 监听
es.onopen确认连接建立成功(状态码 200,header 正确) - 用
es.onmessage统计收到的消息数量和内容结构,例如判断第 3 条 data 是否含"status": "warning" - 主动触发断连(如关闭 mock 服务),验证
es.onerror被调用且后续es.onopen再次触发 - 修改服务端
retry: 5000字段后,检查重连间隔是否变为 5 秒而非默认值
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










