JMeter进行WebSocket压力测试

背景


之前两篇内容介绍了一下 WebSocket 和 SocketIO 的基础内容。之后用 Netty-SocketIO 开发了一个简单的服务端,支持服务端主动向客户端发送消息,同时也支持客户端请求,服务端响应方式。本文主要想了解一下服务端的性能怎么样,选择使用 JMeter 对 WebSocket 应用进行性能测试。

JMeter 扩展实现 WebSocket 支持


JMeter 是目前最为流行的开源性能测试工具,JMeter 本身提供的基于插件的机制允许第三方实现标准 JMeter 所不支持的协议,而 WebSocket 的一个比较好的实现是 WebSocketSampler 。利用此插件,能完成基于 WebSocket 协议的基本性能测试。

安装 WebSocketSampler 插件


  • 通过插件地址 Releases · fshutdown/JMeter-WebSocketSampler · GitHub 下载最新版本(目前版本是1.0.2),本项目的源码是用 Maven 管理,直接通过 mvn package 就能生成 jar 包,然后将其拷贝到 JMeter 安装目录的 $JMETER_HOME/lib/ext 下。在生成 jar 包前要先对源码进行一点修改,因为在测试的时候报错,如下图:

 很简单,用下面的代码替换

Queue<String> responeBacklog = new ConcurrentLinkedQueue<String>();

ServiceSocket.java 中的

protected Deque<String> responeBacklog = new LinkedList<String>();

一行即可。

java.util.LinkedList\$ListItr.checkForComodification(LinkedList.java:953)异常解决方案参考地址:

WebSocket plugin for Jmeter - Stack Overflow

Concurrent Modification · Issue #21 · fshutdown/JMeter-WebSocketSampler · GitHub

  • 下载相关额外的依赖,并将他们也拷贝到 JMeter 安装目录的 $JMETER_HOME/lib/ext,如下:
  1. jetty-http-9.1.1.v20140108.jar
  2. jetty-io-9.1.1.v20140108.jar
  3. jetty-util-9.1.1.v20140108.jar
  4. websocket-api-9.1.1.v20140108.jar
  5. websocket-client-9.1.1.v20140108.jar
  6. websocket-common-9.1.1.v20140108.jar

注意版本号要写插件项目里的版本一致,我在最开始使用上面的 jar 包时用的最新版本,报错。

如果没有上面的6个 jar 包,在进行测试的时候同样也会报错。

配置 JMeter 的测试脚本


新建线程组

 

 创建循环控制器

 

 

添加 WebSocket Sampler

添加查看结果树

 

添加聚合报告

 

 

配置 WebSocket Sampler


  • Server Name or IP:部署 WebSocket 应用所在的服务器地址;
  • Port Number:端口号;
  • Timeout:Connection,连接超时,超过此时间未建立连接则测试报错;Response,发送消息后的超时时间;
  • Implementation:现在只支持 RFC6455;
  • Protocol:ws 或者 wss。wss 指的是加密的 WebSocket,根据被测的配置而定;
  • Path:所部署 WebSocket 服务的路径;
  • Streaming connection:测试期间是否重用连接,如果处于非选中状态,每次得到服务器端的返回后就会关闭连接,下次执行时会新建连接;
  • Request Data:发送出去的数据 —— 下面重点说怎么发送数据与接收数据;
  • Response pattern:等待服务器返回的特定的字符集合;否则等待Response Timeout设定的超时时间;
  • Close Connection Pattern:与8类似,但是符合条件的时候连接将被关闭;
  • Message Backlog:定义最多留下的返回消息的数目。

发送与接收数据


  • 在 chrome 的调试模式下可以找到 WebSocket 的连接信息:

  •  查看发送的信息内容,右键可以进行 copy

 

  • 根据上面的 ws 连接信息配置 WebSocket Sampler

 

运行输出结果

 

 

通过聚合报告看性能


  • Samples:样本总数量,等于线程总数 * 循环次数。
  • Average:请求处理的平均时间(毫秒ms),是压力测试的主要指标之一 。
  • Median:请求处理的中值时间(毫秒ms),样本数量中有一半的处理时间在这个值之上,有一半的处理时间在这个值之下。
  • 90%Line,95%Line,99%Line:样本中百分之多少的处理时间都在这个值之下,是压力测试的主要指标之一。
  • Min:耗时最少的请求时间。
  • Max:耗时最多的请求时间。
  • Error%:错误率。
  • Throughput:吞吐量,服务器每秒处理的请求数。
  • KB/sec:服务器每秒钟请求的字节数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/19820.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一百二十九、Kettle——从MySQL增量导入到GreenPlum

一、目标 用Kettle从MySQL增量导入数据到GreePlum 二、前提准备 &#xff08;一&#xff09;kettle已连上MySQL &#xff08;二&#xff09;kettle已连上GreenPlum 三、实施步骤 &#xff08;一&#xff09;打开kettle&#xff0c;新建转换任务。拖拽2个表输入、替换NULL…

Spring 如何解决 Bean 的循环依赖(循环引用)

Component public class A {Autowiredprivate B b;}Component public class B {Autowiredprivate A a;}上面的情况就是 循环依赖 Bean的创建初始化过程如下 如果不采取措施&#xff0c;那么循环依赖就会进入死循环 但 Spring 已经帮我们解决了大部分循环依赖问题 具体是如何解…

prompt:有需求就有价值,prompt案例

prompt&#xff1a;有需求就有价值 此文章来自于小七姐 首先来看需求&#xff1a; 客户需要生成1000条俏皮灵动&#xff0c;趣味盎然&#xff0c;比喻精妙的和美食有关的短句子&#xff0c;要求文风优美&#xff0c;句子让人充满食欲。 客户使用这些句子的场景比较奇妙&…

路径规划算法:基于食肉植物优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于食肉植物优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于食肉植物优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

2023年Q2空调行业品牌数据榜单(京东商品数据)

随着夏季的来临&#xff0c;高温天气也带动部分家电行业的销售&#xff0c;以空调为代表的家电市场正逐步恢复活力。结合鲸参谋电商数据分析平台的相关数据&#xff0c;我们来分析一下2023年Q2空调市场的具体销售表现。 根据鲸参谋平台的数据显示&#xff0c;2023年4-6月份&am…

数据库备份恢复和索引视图

样例表如下&#xff1a; /***************************样例表***************************/CREATE DATABASE booksDB;use booksDB;CREATE TABLE books(bk_id INT NOT NULL PRIMARY KEY,bk_title VARCHAR(50) NOT NULL,copyright YEAR NOT NULL);INSERT INTO booksVALUES (1107…

ICEFlow VPN敏感信息泄露

一个新的历史时期开始了&#xff0c;而眼下又是一个艰难的转折阶段&#xff1a;既要除旧&#xff0c;又要布新&#xff1b;这需要魄力&#xff0c;需要耐力&#xff0c;需要能力&#xff0c;需要精力&#xff0c;当然也需要体力——尽管这一切他都不够&#xff0c;但他自信他的…

前端学习——Web API (Day5)

BOM操作 Window对象 BOM 定时器-延时函数 案例 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport&q…

Broadcast 广播使用详解

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、Broadcast概述二、Broadcast的注册三、Broadcast的注册类型四、静态注册开机广播的实现五、动态监听亮灭屏幕广播实现六、广播的发送方法七、参考文…

基于单片机快递柜的设计与实现

功能介绍 以51单片机作为主控系统&#xff1b;液晶显示当前信息&#xff0c;最多可存储几十个&#xff1b;按下存储按键液晶显示当前快递柜剩余数量&#xff1b;继电器打开&#xff0c;表示用来放物品&#xff1b;正次按下存储按键将取消存快递&#xff0c;继电器关闭快递柜可用…

基于粒子群优化算法的分布式电源选址与定容【多目标优化】【IEEE33节点】(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

C#winform电脑关机实例

本篇实例演示C#winform电脑关机 创建winform添加一个按钮 Cs文件代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Runtime.InteropServices; using System.T…