1、安装插件:JMeter WebSocket Samplers

pjtr / JMeter WebSocket Samplers / Downloads — Bitbucket

jmeter压测mqtt怎么发qos1的消息_websocket

https://bitbucket.org/pjtr/jmeter-websocket-samplers/downloads/

将下载的Jar包放在安装jmeter的/lib/ext路径下,重启生效

查看测试计划--》配置元件--》webSocket相关内容

jmeter压测mqtt怎么发qos1的消息_右键_02

查看用户组--》取样器--》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数量不合适,可能会出现读到的数据错位的现象。

2、创建常规脚本

在JMeter页面中,右键单击Test Plan,选Add > Thread (Users) > Thread Group,将一个线程组添加到测试计划中。

右键单击Thread Group,选择Add > Sampler > WebSocket Open Connection,用于建立ws连接

jmeter压测mqtt怎么发qos1的消息_Group_03

配置项

示例值

说明

协议

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功能。

jmeter压测mqtt怎么发qos1的消息_Group_04

相关配置如下:

Pong(读)超时(ms):6000

Pong(读)超时表示如果JMeter在6秒内没有收到Pong消息,则Sampler将失效。此Sampler会复用已有连接。

右键单击Thread Group,选择Add > Sampler > WebSocket request-response Sampler

jmeter压测mqtt怎么发qos1的消息_websocket_05

  • 相关配置如下:

配置项

示例值

说明

Connection

use existing connection

创建新的连接或复用已有连接。

数据类型

文本

指定数据类型、请求数据和响应超时值。

Request data

PTS

请求数据,这里以文本为例

Response (read) timeout (ms)

6000

响应超时时间

右键单击Thread Group,选择Add > Sampler > WebSocket Single Write Sampler。此请求是非阻塞的,只是将数据发送到服务端不需要等待响应。

jmeter压测mqtt怎么发qos1的消息_jmeter_06

相关配置如下:

配置项

示例值

说明

Connection

use existing connection

创建新的连接或复用已有连接

数据类型

文本

指定数据类型、请求数据和响应超时值

Request data

PTS

请求数据,这里以文本为例

Response (read) timeout (ms)

6000

响应超时时间

右键单击 Thread Group,选择Add > Sampler > WebSocket Single Read Sampler。接收服务端的消息响应需要使用这个Sampler。

jmeter压测mqtt怎么发qos1的消息_右键_07

相关配置如下:

配置项

示例值

说明

Connection

use existing connection

创建新的连接或复用已有连接

数据类型

文本

指定数据类型、请求数据和响应超时值

Response (read) timeout (ms)

6000

响应超时时间

右键单击Thread Group,选择Add > Sampler > WebSocket Close。接收服务端的消息响应需要使用这个Sampler。

jmeter压测mqtt怎么发qos1的消息_websocket_08

相关配置如下:

配置项

示例值

说明

Close Status

二进制

关闭连接时定义的状态码,数据帧的头两个字节

Response (read) timeout (ms)

6000

响应超时时间

此采样器将关闭现有的WebSocket连接,由于是协商关闭,显示原因为“1000:sampler requested close”。

右键单击Thread Group,选择Add Listener > View Results Tree,在线程组中添加监听器View Results Tree,查看请求响应状态。

jmeter压测mqtt怎么发qos1的消息_压力测试_09

3、优化脚本,模拟100个真实用户持续连接ws

开启100个线程同时登录并打开websocket

jmeter压测mqtt怎么发qos1的消息_websocket_10

从文件中获取获取信息--》右键添加Config元素--》csv数据文件设置

jmeter压测mqtt怎么发qos1的消息_jmeter_11

登录后添加后置Json提取器,获取登录的token

jmeter压测mqtt怎么发qos1的消息_jmeter_12

添加后置处理器,将值存起来

1、存到文件里,后面再从文件读取

jmeter压测mqtt怎么发qos1的消息_jmeter_13

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分钟

jmeter压测mqtt怎么发qos1的消息_压力测试_14

但是我们想让他持续的压测,token不失效就一直有100个用户的websocket在连接中

加一个循环器,一直循环的定时在自动断开websocket连接时再开一个连接。

jmeter压测mqtt怎么发qos1的消息_Group_15

到这里就整体完成了