JMeter进行WebSocket压力测试

向量数据库大模型云通信

背景

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

JMeter 扩展实现 WebSocket 支持

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

安装 WebSocketSampler 插件

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

picture.image

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


 1. `Queue<String> responeBacklog = new ConcurrentLinkedQueue<String>();`

ServiceSocket.java 中的


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

一行即可。

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

https://stackoverflow.com/questions/16152648/websocket-plugin-for-jmeter

https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/21

  • 下载相关额外的依赖,并将他们也拷贝到 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 的测试脚本

新建线程组

picture.image

picture.image

创建循环控制器

picture.image

picture.image

添加 WebSocket Sampler

picture.image

picture.image

添加查看结果树

picture.image

picture.image

添加聚合报告

picture.image

picture.image

配置 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 的连接信息:

picture.image

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

picture.image

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

picture.image

运行输出结果

picture.image

picture.image

通过聚合报告看性能

  • Samples:样本总数量,等于线程总数 * 循环次数。

  • Average:请求处理的平均时间(毫秒ms),是压力测试的主要指标之一 。

  • Median:请求处理的中值时间(毫秒ms),样本数量中有一半的处理时间在这个值之上,有一半的处理时间在这个值之下。

  • 90%Line,95%Line,99%Line:样本中百分之多少的处理时间都在这个值之下,是压力测试的主要指标之一。

  • Min:耗时最少的请求时间。

  • Max:耗时最多的请求时间。

  • Error%:错误率。

  • Throughput:吞吐量,服务器每秒处理的请求数。

  • KB/sec:服务器每秒钟请求的字节数。

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
KubeZoo: 轻量级 Kubernetes 多租户方案探索与实践
伴随云原生技术的发展,多个租户共享 Kubernetes 集群资源的业务需求应运而生,社区现有方案各有侧重,但是在海量小租户的场景下仍然存在改进空间。本次分享对现有多租户方案进行了总结和对比,然后提出一种基于协议转换的轻量级 Kubernetes 网关服务:KubeZoo,该方案能够显著降低多租户控制面带来的资源和运维成本,同时提供安全可靠的租户隔离性。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论