pjtr / JMeter WebSocket Samplers / Downloads — Bitbuckethttps://bitbucket.org/pjtr/jmeter-websocket-samplers/downloads/
将下载的Jar包放在安装jmeter的/lib/ext路径下,重启生效
查看测试计划--》配置元件--》webSocket相关内容
查看用户组--》取样器--》webSocket相关内容
Sampler名称 |
说明 |
WebSocket Open Connection |
建立一个WebSocket连接 |
WebSocket Ping/Pong |
控制帧,发送Ping并接收Pong |
WebSocket request-response Sampler |
发送和接收文本或二进制WebSocket帧 |
WebSocket Single Write Sampler |
发送文本或二进制WebSocket帧 |
WebSocket Single Read Sampler |
接收文本或二进制WebSocket帧 |
WebSocket Close |
关闭WebSocket连接 |
注:
因为WebSocket是长连接流式通讯,所以可能存在发送一个请求收到多条响应的情况。收到的响应会以先后顺序排在一个响应队列中。当执行一个有读操作的Sampler时,就从队列头部取出一个响应;每当收到一个响应时,就将其放到队列尾部。
WebSocket Single Read Sampler是一个只读Sampler,它只从队列头部读取一个响应,如果读不到就等待,直至超时。
WebSocket Single Write Sampler是一个只写Sampler,它只向连接通道发送一个请求且不等待响应。
WebSocket Request Response Sampler是一个读写Sampler,它向连接通道发送一个请求,然后从响应队列头部读取一个响应,如果读不到就等待,直至超时。
如果放置的读Sampler和写Sampler数量不合适,可能会出现读到的数据错位的现象。
在JMeter页面中,右键单击Test Plan,选Add > Thread (Users) > Thread Group,将一个线程组添加到测试计划中。
右键单击Thread Group,选择Add > Sampler > WebSocket Open Connection,用于建立ws连接
配置项 |
示例值 |
说明 |
协议 |
WS |
协议可以是WS或WSS(Secure WebSocket)。使用WSS进行加密连接。 |
Server name or IP |
echo.websocket.org |
域名或IP |
Port |
443 |
端口 |
Path |
- |
可为空 |
Connection timeout(ms) |
20000 |
建连的超时时间 |
Read timeout(ms) |
6000 |
等待服务器响应的超时时间 |
右键单击Thread Group,选择Add > Sampler > WebSocket Ping/Pong。该Sampler用来测试Ping/Pong功能。
相关配置如下:
Pong(读)超时(ms):6000
Pong(读)超时表示如果JMeter在6秒内没有收到Pong消息,则Sampler将失效。此Sampler会复用已有连接。
右键单击Thread Group,选择Add > Sampler > WebSocket request-response Sampler。
相关配置如下:
配置项 |
示例值 |
说明 |
Connection |
use existing connection |
创建新的连接或复用已有连接。 |
数据类型 |
文本 |
指定数据类型、请求数据和响应超时值。 |
Request data |
PTS |
请求数据,这里以文本为例 |
Response (read) timeout (ms) |
6000 |
响应超时时间 |
右键单击Thread Group,选择Add > Sampler > WebSocket Single Write Sampler。此请求是非阻塞的,只是将数据发送到服务端不需要等待响应。
相关配置如下:
配置项 |
示例值 |
说明 |
Connection |
use existing connection |
创建新的连接或复用已有连接 |
数据类型 |
文本 |
指定数据类型、请求数据和响应超时值 |
Request data |
PTS |
请求数据,这里以文本为例 |
Response (read) timeout (ms) |
6000 |
响应超时时间 |
右键单击 Thread Group,选择Add > Sampler > WebSocket Single Read Sampler。接收服务端的消息响应需要使用这个Sampler。
相关配置如下:
配置项 |
示例值 |
说明 |
Connection |
use existing connection |
创建新的连接或复用已有连接 |
数据类型 |
文本 |
指定数据类型、请求数据和响应超时值 |
Response (read) timeout (ms) |
6000 |
响应超时时间 |
右键单击Thread Group,选择Add > Sampler > WebSocket Close。接收服务端的消息响应需要使用这个Sampler。
相关配置如下:
配置项 |
示例值 |
说明 |
Close Status |
二进制 |
关闭连接时定义的状态码,数据帧的头两个字节 |
Response (read) timeout (ms) |
6000 |
响应超时时间 |
此采样器将关闭现有的WebSocket连接,由于是协商关闭,显示原因为“1000:sampler requested close”。
右键单击Thread Group,选择Add > Listener > View Results Tree,在线程组中添加监听器View Results Tree,查看请求响应状态。
开启100个线程同时登录并打开websocket
从文件中获取获取信息--》右键添加Config元素--》csv数据文件设置
登录后添加后置Json提取器,获取登录的token
添加后置处理器,将值存起来
1、存到文件里,后面再从文件读取
FileWriter fstream = new FileWriter("D:/Software/jmeter-5.4.3/bin/Myworkspace/token.csv",false);
//这里结尾的true表示续写,即数据每次写入都在最末行续上;默认值为false:每次跑这个脚本都会覆盖原有内容再写入
BufferedWriter out = new BufferedWriter(fstream);
out.write(vars.get("access_token")+","+"\n");
//将提取出来的token写入,注意加上\n换行
out.close();
fstream.close();
2、存到变量里
${__setProperty(access_token_new,${access_token},true)}
后面参数调用方式:${__property(access_token_new,,)}
开启一个websocket,注意设置连接超时时间,最多不超过10分钟,也就是这次压测最长10分钟
但是我们想让他持续的压测,token不失效就一直有100个用户的websocket在连接中
加一个循环器,一直循环的定时在自动断开websocket连接时再开一个连接。
到这里就整体完成了