测试WebSocket API:如何获取单条实时数据的服务器到客户端毫秒级响应时间
如何获取WebSocket单条实时数据的毫秒级传输耗时(HH:MM:SS:sss格式)
一、Postman中实现单条数据耗时统计
Postman的WebSocket会话支持自定义脚本,可精准计算每条消息的传输耗时,分两种场景处理:
场景1:客户端主动发请求触发服务器推送
在WebSocket请求的两个脚本模块中添加代码:
- Pre-request Script:记录客户端发送请求的时间
pm.globals.set("sendTime", new Date().getTime());
- On Message Script:收到消息时计算耗时并格式化为目标格式
const receiveTime = new Date().getTime(); const sendTime = pm.globals.get("sendTime"); const latency = receiveTime - sendTime; // 格式化毫秒数为HH:MM:SS:sss function formatLatency(ms) { const hours = Math.floor(ms / 3600000); const minutes = Math.floor((ms % 3600000) / 60000); const seconds = Math.floor((ms % 60000) / 1000); const milliseconds = ms % 1000; return `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}:${String(milliseconds).padStart(3, '0')}`; } console.log(`单条数据传输耗时:${formatLatency(latency)}`); pm.environment.set("currentLatency", formatLatency(latency));
场景2:服务器主动推送消息(无客户端请求触发)
如果服务器返回的消息携带自身发送的毫秒级时间戳(比如JSON格式里的serverSendTime字段),优先用这个时间戳计算,避免客户端与服务器时间不同步的误差:
// On Message Script const receiveTime = new Date().getTime(); const message = JSON.parse(pm.response.text()); const serverSendTime = message.serverSendTime; const latency = receiveTime - serverSendTime; // 复用上面的formatLatency函数 const formattedLatency = formatLatency(latency); console.log(`单条数据传输耗时:${formattedLatency}`);
二、JMeter中正确统计单条WebSocket消息耗时
你之前误用了平均响应时间,JMeter可以精准捕获单条消息的耗时,步骤如下:
- 选用合适的WebSocket Sampler:如果是服务器主动推送,用WebSocket Sampler (Jetty);如果是请求-响应模式,用WebSocket Request-Response Sampler。
- 在Sampler配置中开启Capture individual messages,让JMeter为每条收到的消息生成独立样本。
- 添加JSR223 PostProcessor到Sampler下方,编写Groovy脚本来格式化耗时:
def latency = prev.getTime(); // 获取当前样本的响应时间(毫秒) def hours = String.format("%02d", latency / 3600000 as int); def minutes = String.format("%02d", (latency % 3600000) / 60000 as int); def seconds = String.format("%02d", (latency % 60000) / 1000 as int); def milliseconds = String.format("%03d", latency % 1000); def formattedLatency = "${hours}:${minutes}:${seconds}:${milliseconds}"; prev.setResponseMessage("传输耗时:${formattedLatency}");
配置完成后,在View Results Tree中就能看到每条消息的格式化耗时。
三、关键注意事项
- 优先使用服务器发送时间戳计算耗时,避免客户端与服务器时间不同步导致的误差。
- Postman的控制台可实时查看每条消息的耗时日志,方便调试;JMeter的样本结果可导出做后续分析。
内容的提问来源于stack exchange,提问作者pushkar singh
相关产品推荐
相关产品推荐

