一、下载Jmeter插件
1.下载链接:https://jmeter-plugins.org/install/Install/
2.点击下图箭头标记点击下载
3.将下载jar包复制到jmeter的 lib/ext目录,重启jmeter
二、添加插件
1.在工具栏>>>>Options(选项)>>>Plugins Manager 点击进入
image.png
2.选择Available Plugins
3.输入websocket
image.png
4.选择websoket相关插件,勾选并点击下面的Apply and restart jmeter,这时manager会自动帮你下载依赖包并安装到lib目录下
三、添加WebSocket Sampler
1.新建一个测试计划
2.添加一个线程组
3.右键添Sampler时就能看到websocket的模板
4.常用的就是websocket request-response Sampler(连接+发送data或者只发data),其次是WebSocket Open Connection(只连接,不发送data)
5.添加一个websocket request-response Sampler
image.png
说明:
(1)Connection:有两项,第一项是使用已有连接,就是上一个websocket请求所建立的连接通道,选择后Server URL全置灰只读不可操作。第二项是新建连接通道。
(2)Server URL:可以发送ws协议和wss协议(加密的websocket),以上图的配置所对应的连接串如下:
wss://192.18.24.211:8888/testPath
(3)Data:支持文本(包括JSON)和Binary二进制数据的发送。默认请求响应的超时时间为6S,超过这个时间报错。
三、使用小技巧
1、Path和Requst data要注意编码格式
websocket发送数据到后端,与http请求的原理是相通的,所以发送的数据如果含有非常字符,如"/"、"+"、"%"、引号等,就会引起解析错误,所以需要特别注意,比如:
如上所示,websocket请求的上一个请求TR-token可以获取一个token串(通过正则表达式提取器提取),而这个串的格式可能是这样的:Ivj6eZRx40+MTx2Zv/G8nA,可以发现含有"+"、"/"字符,而我们需要把这个串作为Path的一部分来发送,那么我们就需要对${token}变量进行URL转码,用到jmeter的函数 __urlencode()
2、可以通过逻辑控制器来模拟群发消息
(1)通过循环控制器调取参数化文件(CSV)里的用户信息表来实现群发消息,如下所示:
(2)或者先通过发送请求来获取用户信息(正则表达式提取),再用ForEach调取用户组变量发送消息,如下所示:
3、以时间戳来查看当前聊天记录应注意websocket的response延时
在并发的情况下,websocket请求延时可能要远大于http请求,比如延时2秒以上(从发送消息到看到聊天面板已经过了2秒以上)。所以在jmeter中用时间戳函数${__time(,)}来表示最新一条聊天记录的时间是不可靠的。我们应该在websocket请求中插入正则表达式提取器,通过在response中获取其时间才能确保消息接收时间准确(即不要用客户端时间来判断你的聊天时间)。
(1)先提取websocket反馈的服务端时间戳
(2)再作为查询当前聊天记录的时间戳依据
4、最后说一下jmeter4.0,如果是要做分布式测试,jmeter4.0默认是要求RMI传输必须SSL加密的,否则jmeter-server就启动不了,我们可以用简单的配置来回避这个问题。就是server端和client端的jmeter我们统一做如下配置:
(1)用编辑器打开bin/user.properties文件
(2)找到server.rmi.ssl.disable,将#注释符去掉,改成 server.rmi.ssl.disable=true
现在可以奔跑了,我直接用以下shell脚本实现在linux下分布式调用jmeter-server进行测试,并生成html报告:
!/bin/bash
testAPI="websocket-test.jmx" #jmeter测试脚本
Cur_Dir=(dirname "Cur_Dir/jmeter4.0/bin/Cur_Dir/jmeter4.0/bin/jmeter -n -t {testAPI} -R 172.16.1.67,172.16.5.241 -l (date -d "today" +"%Y%m%d%H%M%S").csv -e -o (date -d "today" +"%m%d%H%M%S")
另外测试还开启了jmeter监控工具(influxDB+grafana),具体安装配置方式参见我的另一篇文章《关于Jmeter长时间压测的可视化监控报告》(区别是这篇文章用的是windows版的,而我这次测试用的是Linux版的,网上有相关下载,开源工具)。
添加配置后,监控后的效果如下:
补充:除了常用的WebSocket Open Connection和WebSocket request-response 这两个Sampler,WebSocket Single Read Sampler也比较常用,一般是用在群聊消息已读回执的发送。比如在微信群里发一条消息,通过抓包分析,可以看到客户端是发出了两条消息(同时服务端也回发了两条消息),如下所示:
第二条消息表示发送消息已读回执,按以往的方式,我们需要通过正则表达式提取器提取第一条消息的返回值,然后发送第二条消息,这样的效率就不高,我们可以直接用WebSocket Single Read Sampler来模拟消息的已读回执:
原文链接:https://blog.csdn.net/smooth00/java/article/details/81355110
网友评论