测试动态 / 测试知识 / JMeter WebSocket取样器实战:实时通讯压力测试
JMeter WebSocket取样器实战:实时通讯压力测试
2026-07-29 作者:cwb 浏览次数:4

面对实时通讯(如在线聊天、游戏指令、行情推送)的压力测试,JMeter配合WebSocke 插件是性价比很高的选择。


一、环境准备

1. JMeter本体

下载5.5+ 版本(官网),解压即可。


2. WebSocket 插件

最主流、功能最完整的插件是 WebSocket Samplers by Maciej Zaleski。

安装方式:打开 JMeter - Options - Plugins Manager,在 Available Plugins中搜索WebSocket Samplers并安装。

如果找不到Plugins Manager,先安装JMeter Plugins Manager。


安装后,在取样器列表中可看到:

WebSocket Open Connection:建立连接

WebSocket request-response Sampler:发送请求并同步等待响应

WebSocket Single Write Sampler:仅发送,不等待响应

WebSocket Single Read Sampler:仅等待接收一条(或一段)消息

WebSocket Close:关闭连接


这些组件可组合使用,完美模拟长连接下的各种通信方式。

二、从一个Echo测试开始配置

我们模拟一个完整生命周期:建立连接 - 发送消息 - 接收回显 - 关闭连接。

假设测试地址为 ws://echo.websocket.org(已停止,可用 ws://ws.ifelse.io 或自己搭建的 Echo 服务)。


1. 测试计划结构

Thread Group(线程组:模拟并发用户)

WebSocket Open Connection

WebSocket request-response Sampler

WebSocket Close

View Results Tree(调试监听器)


2. 配置WebSocket Open Connection

Server name or IP:echo.websocket.org(或 ws.ifelse.io)

Port:80(ws 默认 80,wss 默认 443)

Protocol:留空表示 ws,如果为 wss 则填 https

Path:/

Connection id:myWsConn ⭐


这个变量名非常重要,后续所有操作都要通过它引用同一个连接,避免每个取样器重复建立连接。

其他超时时间可暂用默认。


3. 配置WebSocket request-response Sampler

Connection:选择 use existing connection

Connection id:myWsConn(和上面一致)

Data type:Text,也可选 Binary

Request data:{"type":"echo","msg":"hello"} 或纯文本 Hello WebSocket!

Response timeout (ms):2000(等待服务器回包的超时)


4. 配置WebSocket Close

Connection id:myWsConn

Close status:1000(正常关闭)

运行线程组(1 个线程,循环 1 次),在View Results Tree中应能看到绿色成功的取样结果,响应数据为服务器回包内容。


三、实时推送场景模拟

实际业务中客户端常常:

建立连接后保持在线

间歇性发送心跳/订阅指令

不断接收服务端推送,而不是一问一答

这就需要更灵活的取样器组合。


场景:模拟聊天室客户端

建立连接后发送登录 Token

循环接收推送消息,并每隔 10 秒发送一次心跳 Ping

最后正常断开


脚本结构:


Thread Group

WebSocket Open Connection  (connId: chatConn)

WebSocket request-response Sampler (登录)

Request Data: {"action":"login","token":"${userToken}"}

Response timeout: 3000

Loop Controller (无限循环,或通过计数器控制时长)

WebSocket Single Write Sampler (心跳)

Connection: use existing (chatConn)

Request Data: PING

  (不等待响应)


Constant Timer (10秒间隔)


WebSocket Single Read Sampler (接收推送)

Connection: use existing (chatConn)

Timeout (milliseconds): 5000

 (读取一条消息,如果无新消息会在超时后退出)

WebSocket Close (connId: chatConn)


说明:

Single Read Sampler 默认从连接缓冲区读取一条完整的 WebSocket 消息。如果服务器一直在推送,它将不断被循环中的下一次读取继续消费。

超时设置:如果设置 5000ms,当 5 秒内无消息到达,该取样器会标记为失败(或警告),并跳出,循环继续执行下一次心跳和读操作。

为了不让超时导致测试报告充满错误,可以在 Single Read Sampler 后添加 Response Assertion 勾选 Ignore Status,或使用 If Controller 判断响应代码。

如果希望不断阻塞等待消息直到测试结束,可在 While Controller 中用条件永远真,但注意合理设置 timeout 避免线程僵死。


四、多用户高并发压力测试实现

将脚本放入并发用户模型中:


线程组设置

线程数:500(模拟 500 个同时在线用户)

Ramp-up 时间:60 秒(每秒启动约 8 个连接,避免冲击)

循环次数:勾选 Forever,并设置调度器 Duration 为 600 秒(不断压测 10 分钟)


参数化

使用 CSV Data Set Config 从文件读取不同的登录 Token、用户名、消息内容等,绑定到变量 ${userToken}。


连接复用和独立性

JMeter 的每个线程是独立运行的,不同线程之间的 WebSocket 连接互不干扰。我们的 Connection id 只在同一线程内有效,所以 500 个线程会建立 500 个独立的 WebSocket 连接,完全模拟真实客户端。


SSL / WSS 配置

如果服务器为 wss://,除了在 Open Connection 中设置 Protocol 为 https 并填写 443 端口外,还要将证书导入 JMeter 的 Truststore 或修改 jmeter.properties 绕过证书证实(仅测试环境):


properties

# 在 bin/jmeter.properties 中

javax.net.ssl.trustStore=

# 同时注释掉全部SSL相关,并在HTTP Request默认值(如果有)忽略


更安全的做法是使用JMeter的SSL Manager加载证书。


五、结果分析监控

监听器:

View Results Tree:调试时使用,压测时禁用或仅记录错误。

Aggregate Report:观察平均响应时间、吞吐量、错误率。

Backend Listener:对接 InfluxDB + Grafana,实现实时趋势监控。


观察:

WebSocket 建立连接耗时:Open Connection 取样器的响应时间,如果过高检查网络或握手过程。

读写响应时间:Single Read 的延迟可能显示推送时延,但注意其受到 timeout 设置影响,应结合业务分析。

错误率:连接超时、读取超时、HTTP 500 状态码(如果握手返回 HTTP 错误),需检查服务器端并发连接数和消息处理能力。

系统资源:压测时必须监控服务器 CPU、内存、网络 TCP 连接数(netstat -ant | grep ESTABLISHED | wc -l),以及端口范围是不是耗尽。


六、避坑技巧

连接数限制

单台 JMeter 压测机受限于操作系统端口数,一般建议 ulimit -n 65535 并调整 tcp_tw_reuse。5000 个以上并发连接建议使用分布式压测。


读超时和循环

如果使用 While Controller 无限循环 Single Read,且服务器静默时间超过 timeout,线程将不断产生 timeout 失败并重试,可能导致大量错误日志。解决方案是:

将 timeout 设为一个相对较大的值(如 30 秒),并接受偶尔的超时。

在 Single Read 后添加 JSR223 PostProcessor 检测响应码,如果是超时则忽略或 continue。


流式二进制处理

WebSocket request-response Sampler 支持 Binary 数据类型,可直接发送和接收二进制帧。如果需分析二进制内容(如 Protobuf),可使用 JSR223 取样器编写 Groovy 脚本处理原始字节。


测试脚本录制

JMeter 无法直接录制 WebSocket 流量,推荐使用浏览器 DevTools 的 Network → WS 标签,查看实际交互的数据帧,手工编写成上述取样器请求。这也是最准确的方式。


模拟断线重连

可在循环中捕捉到连接断开错误后,利用 If Controller 判断 ${JMeterThread.last_sample_ok} 是不是为 false,然后跳转到 Open Connection 重新连接,保证长连接测试的健壮性。


七、脚本示例

目的: 100 用户并发,向 Echo 服务每秒发送一条消息并接收回显,不断 5 分钟。


Test Plan结构:

User Defined Variables:server=ws.ifelse.io , port=80

Thread Group:100 线程,Ramp-up 30s,Duration 300s

CSV Data Set Config(可选,如消息内容文件)

WebSocket Open Connection:Server: ${server}, Port: ${port}, Connection id: echo

Loop Controller:勾选 Forever

WebSocket request-response Sampler

Connection: use existing, echo

Request data: Hello ${__counter(TRUE,)} (内含自增计数器)

Timeout: 2000

Constant Timer:1000 ms(控制每秒发送一条)

WebSocket Close:connId: echo

Listeners: Aggregate Report, View Results Tree (仅记录错误)


保存并运行,即可得到 100 路并发的 WebSocket 消息吞吐量和响应延迟。


JMeter WebSocket 取样器的组合能力非常强,几乎可以包括所有实时通讯的压力场景。只需清楚业务交互流程,就能像搭积木一样组装出复杂的长连接测试脚本。


文章标签: 压力测试 软件测试 测试工具
热门标签 换一换
第三方软件国产化测试 第三方信创测试 CNAS软件测评报告 CMA软件测评报告 首版次软件认定 软件结题验收 软件测试报告书 软件质量检测 数据库测试 H5应用测试 软件质检机构 第三方质检机构 第三方权威质检机构 信创测评机构 信息技术应用创新测评机构 信创测试 软件信创测试 软件系统第三方测试 软件系统测试 软件测试标准 工业软件测试 软件应用性能测试 应用性能测试 可用性测试 软件可用性测试 软件可靠性测试 可靠性测试 系统应用测试 软件系统应用测试 软件应用测试 软件负载测试 API自动化测试 软件结题测试 软件结题测试报告 软件登记测试 软件登记测试报告 软件测试中心 第三方软件测试中心 应用测试 第三方应用测试 软件测试需求 软件检测报告定制 软件测试外包公司 第三方软件检测报告厂家 CMA资质 软件产品登记测试 软件产品登记 软件登记 CNAS资质 cma检测范围 cma检测报告 软件评审 软件项目评审 软件项目测试报告书 软件项目验收 软件质量测试报告书 软件项目验收测试 软件验收测试 软件测试机构 软件检验 软件检验检测 WEB应用测试 API接口测试 接口性能测试 第三方系统测试 第三方网站系统测试 数据库系统检测 第三方数据库检测 第三方数据库系统检测 第三方软件评估 课题认证 第三方课题认证 小程序测试 app测试 区块链业务逻辑 智能合约代码安全 区块链 区块链智能合约 软件数据库测试 第三方数据库测试 第三方软件数据库测试 软件第三方测试 软件第三方测试方案 软件测试报告内容 网站测试报告 网站测试总结报告 信息系统测试报告 信息系统评估报告 信息系统测评 语言模型安全 语言模型测试 软件报告书 软件测评报告书 第三方软件测评报告 检测报告厂家 软件检测报告厂家 第三方网站检测 第三方网站测评 第三方网站测试 检测报告 软件检测流程 软件检测报告 第三方软件检测 第三方软件检测机构 第三方检测机构 软件产品确认测试 软件功能性测试 功能性测试 软件崩溃 稳定性测试 API测试 API安全测试 网站测试测评 敏感数据泄露测试 敏感数据泄露 敏感数据泄露测试防护 课题软件交付 科研经费申请 软件网站系统竞赛 竞赛CMA资质补办通道 中学生软件网站系统CMA资质 大学生软件网站系统CMA资质 科研软件课题cma检测报告 科研软件课题cma检测 国家级科研软件CMA检测 科研软件课题 国家级科研软件 web测评 网站测试 网站测评 第三方软件验收公司 第三方软件验收 软件测试选题 软件测试课题是什么 软件测试课题研究报告 软件科研项目测评报告 软件科研项目测评内容 软件科研项目测评 长沙第三方软件测评中心 长沙第三方软件测评公司 长沙第三方软件测评机构 软件科研结项强制清单 软件课题验收 软件申报课题 数据脱敏 数据脱敏传输规范 远程测试实操指南 远程测试 易用性专业测试 软件易用性 政府企业软件采购验收 OA系统CMA软件测评 ERP系统CMA软件测评 CMA检测报告的法律价值 代码原创性 软件著作登记 软件著作权登记 教育APP备案 教育APP 信息化软件项目测评 信息化软件项目 校园软件项目验收标准 智慧软件项目 智慧校园软件项目 CSRF漏洞自动化测试 漏洞自动化测试 CSRF漏洞 反序列化漏洞测试 反序列化漏洞原理 反序列化漏洞 命令执行 命令注入 漏洞检测 文件上传漏洞 身份验证 出具CMA测试报告 cma资质认证 软件验收流程 软件招标文件 软件开发招标 卓码软件测评 WEB安全测试 漏洞挖掘 身份验证漏洞 测评网站并发压力 测评门户网站 Web软件测评 XSS跨站脚本 XSS跨站 C/S软件测评 B/S软件测评 渗透测试 网站安全 网络安全 WEB安全 并发压力测试 常见系统验收单 CRM系统验收 ERP系统验收 OA系统验收 软件项目招投 软件项目 软件投标 软件招标 软件验收 App兼容性测试 CNAS软件检测 CNAS软件检测资质 软件检测 软件检测排名 软件检测机构排名 Web安全测试 Web安全 Web兼容性测试 兼容性测试 web测试 黑盒测试 白盒测试 负载测试 软件易用性测试 软件测试用例 软件性能测试 科技项目验收测试 首版次软件 软件鉴定测试 软件渗透测试 软件安全测试 第三方软件测试报告 软件第三方测试报告 第三方软件测评机构 湖南软件测评公司 软件测评中心 软件第三方测试机构 软件安全测试报告 第三方软件测试公司 第三方软件测试机构 CMA软件测试 CNAS软件测试 第三方软件测试 移动app测试 软件确认测试 软件测评 第三方软件测评 软件测试公司 软件测试报告 跨浏览器测试 软件更新 行业资讯 软件测评机构 大数据测试 测试环境 网站优化 功能测试 APP测试 软件兼容测试 安全测评 第三方测试 测试工具 软件测试 验收测试 系统测试 测试外包 压力测试 测试平台 bug管理 性能测试 测试报告 测试框架 CNAS认可 CMA认证 自动化测试
专业测试,找专业团队,请联系我们!
咨询软件测试 400-607-0568