JMeter进行WebSocket压力测试

简介: 之前两篇内容介绍了一下 WebSocket 和 SocketIO 的基础内容。之后用 Netty-SocketIO 开发了一个简单的服务端,支持服务端主动向客户端发送消息,同时也支持客户端请求,服务端响应方式。本文主要想了解一下服务端的性能怎么样,选择使用 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 包前要先对源码进行一点修改,因为在测试的时候报错,如下图:

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

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

ServiceSocket.java 中的

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 的测试脚本


新建线程组


创建循环控制器


添加 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:服务器每秒钟请求的字节数。
相关文章
|
1月前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
【10月更文挑战第1天】Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
130 3
|
2月前
|
测试技术 数据库 UED
Python 性能测试进阶之路:JMeter 与 Locust 的强强联合,解锁性能极限
【9月更文挑战第9天】在数字化时代,确保软件系统在高并发场景下的稳定性至关重要。Python 为此提供了丰富的性能测试工具,如 JMeter 和 Locust。JMeter 可模拟复杂请求场景,而 Locust 则能更灵活地模拟真实用户行为。结合两者优势,可全面评估系统性能并优化瓶颈。例如,在电商网站促销期间,通过 JMeter 模拟大量登录请求并用 Locust 模拟用户浏览和购物行为,可有效识别并解决性能问题,从而提升系统稳定性和用户体验。这种组合为性能测试开辟了新道路,助力应对复杂挑战。
108 2
|
13天前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
39 3
|
12天前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
28 1
|
2月前
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
1月前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
【10月更文挑战第1天】告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
60 4
|
2月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
239 7
Jmeter实现WebSocket协议的接口测试方法
|
2月前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
【9月更文挑战第10天】随着软件应用的不断扩展,性能测试成为确保系统稳定运行的关键环节。本文通过对比Apache JMeter和Locust,探讨了如何在Python环境中利用这两款工具挖掘更多性能测试潜力。JMeter是一款成熟且功能强大的开源工具,支持多种协议,适用于各种应用的测试;而Locust则基于Python,通过简单脚本模拟HTTP请求,更适合Web应用测试。
93 3
|
2月前
|
消息中间件 监控 测试技术
惊呆了!Python性能测试高手都用这些神器:JMeter+Locust,效率翻倍📈
【9月更文挑战第8天】在软件开发中,性能测试对确保应用稳定性和高效运行至关重要。对于Python开发者而言,选择合适的性能测试工具能显著提升测试效率并精准定位性能瓶颈。本文深入探讨了JMeter和Locust这两款工具的独特优势。JMeter作为跨平台的性能测试工具,支持多种协议,具备高度可定制性和扩展性;而Locust则专为Python应用设计,利用协程实现高并发,提供实时监控和分布式测试功能。两者结合使用,可在实际项目中实现1+1&gt;2的效果,帮助开发者构建全面高效的测试方案,保障应用稳定运行。
176 1
|
3月前
|
测试技术 持续交付 Apache
深度挖掘:Python性能测试中JMeter与Locust的隐藏技能🔍
【8月更文挑战第5天】随着软件规模扩大,性能测试对系统稳定性至关重要。Apache JMeter和Locust是两大主流工具,各有千秋。本文探索它们在Python环境下的进阶用法,挖掘更多性能测试潜力。JMeter功能强大,支持多种协议,可通过命令行模式执行复杂测试计划,并与Python集成实现动态测试数据生成。Locust基于Python,通过编写简洁脚本模拟HTTP请求,支持自定义请求及与Python库深度集成。掌握这些技巧可实现高度定制化测试场景,有效识别性能瓶颈,提升应用稳定性。
127 1