You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多WebSocket连接性能测试:JMeter无法触发onLoad问题求助

解决JMeter无法执行页面onLoad中WebSocket连接代码的问题

首先得明确:JMeter本身不会自动解析和执行页面中的JavaScript——它的核心是模拟HTTP请求/响应交互,而非模拟真实浏览器的渲染和脚本执行流程,所以页面里的onLoad事件自然不会触发,WebSocket连接也就建立不起来。不过有几种方案可以实现你的压测需求:

方案1:用JMeter的WebSocket专用插件(最推荐)

直接跳过浏览器模拟的环节,用JMeter的WebSocket插件直接创建WebSocket连接,这比模拟页面执行JS要高效且准确:

  • 先通过JMeter的Plugins Manager安装「WebSocket Samplers by Peter Doornbosch」插件
  • 配置压测流程:
    1. 添加Thread Group:设置线程数就是你要模拟的并发WebSocket连接数,循环次数根据需求调整(比如永久循环来维持长连接)
    2. 添加WebSocket Open Connection采样器:填写你的WebSocket服务地址(比如ws://your-server/mqtt,如果是MQTT over WebSocket的话)
    3. 如果需要发送MQTT的CONNECT帧(因为MQTT over WebSocket需要先完成MQTT协议握手),可以添加WebSocket Send Text/Frames采样器,构造符合MQTT协议格式的帧内容
    4. 添加WebSocket Read Text/Frames采样器:用于接收服务器推送的数据,设置合适的超时时间
    5. 最后添加监听器(比如Summary Report、View Results Tree)来监控连接成功率、数据接收情况等

如果是专门针对MQTT over WebSocket的压测,还可以安装「MQTT Plugin for JMeter」,它会封装好MQTT的协议细节,无需手动构造帧,更省心。

方案2:让JMeter执行页面中的JavaScript(不推荐,仅作补充)

如果一定要通过页面的onLoad代码来建立连接,需要手动启用JMeter的JS执行功能并补充脚本:

  1. 打开JMeter安装目录bin下的user.properties文件,修改/添加以下配置:
    jsr223.engine=graal.js
    javascript.enabled=true
    
  2. 添加HTTP Request采样器获取你的测试页面
  3. 添加JSR223 PostProcessor,把页面中onLoad事件里的WebSocket连接代码复制进去
    • 注意:JMeter的JS执行环境和浏览器不同,浏览器的WebSocket对象可能需要替换成Java的WebSocket客户端实现(比如javax.websocket相关类),需要手动调整代码适配,这个过程比较繁琐,所以不推荐用这种方式

方案3:用其他专用压测工具

如果JMeter的配置让你觉得麻烦,也可以试试这些更轻量化的工具:

  • Node.js脚本:用ws库写个简单的脚本,循环创建WebSocket连接并维持,比如:
    const WebSocket = require('ws');
    const connectionCount = 100; // 要模拟的连接数
    
    for (let i = 0; i < connectionCount; i++) {
      const ws = new WebSocket('ws://your-server/mqtt');
      ws.on('open', () => {
        console.log(`Connection ${i} opened`);
        // 如果是MQTT,这里发送CONNECT帧
      });
      ws.on('message', (data) => {
        console.log(`Connection ${i} received: ${data}`);
      });
      ws.on('error', (err) => {
        console.error(`Connection ${i} error: ${err}`);
      });
    }
    
  • wscat:命令行工具,配合shell脚本批量创建连接,比如用xargs循环执行wscat -c ws://your-server/mqtt
  • Autobahn Testsuite:专门用于WebSocket的兼容性和压力测试,支持模拟大量并发连接

注意事项

  • 压测时要逐步增加连接数,不要一次性压满服务器,避免直接导致服务崩溃,无法观察到渐进式的性能变化
  • 如果是MQTT over WebSocket,要确保连接时正确处理MQTT的协议握手(比如发送CONNECT包、处理CONNACK响应),否则连接可能会被服务器主动断开

内容的提问来源于stack exchange,提问作者Christian68

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:40:52