JMeter实现持续压测websocket

1、安装插件:JMeter WebSocket Samplers

pjtr / JMeter WebSocket Samplers / Downloads — Bitbucketicon-default.png?t=N7T8https://bitbucket.org/pjtr/jmeter-websocket-samplers/downloads/

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

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

JMeter实现持续压测websocket_第1张图片

查看用户组--》取样器--》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实现持续压测websocket_第2张图片

  • 配置项

    示例值

    说明

    协议

    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实现持续压测websocket_第3张图片

相关配置如下:

Pong(读)超时(ms):6000

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

右键单击Thread Group,选择Add > Sampler > WebSocket request-response SamplerJMeter实现持续压测websocket_第4张图片

  • 相关配置如下:

    配置项

    示例值

    说明

    Connection

    use existing connection

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

    数据类型

    文本

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

    Request data

    PTS

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

    Response (read) timeout (ms)

    6000

    响应超时时间

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

JMeter实现持续压测websocket_第5张图片

相关配置如下:

配置项

示例值

说明

Connection

use existing connection

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

数据类型

文本

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

Request data

PTS

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

Response (read) timeout (ms)

6000

响应超时时间

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

JMeter实现持续压测websocket_第6张图片

相关配置如下:

配置项

示例值

说明

Connection

use existing connection

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

数据类型

文本

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

Response (read) timeout (ms)

6000

响应超时时间

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

JMeter实现持续压测websocket_第7张图片

相关配置如下:

配置项

示例值

说明

Close Status

二进制

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

Response (read) timeout (ms)

6000

响应超时时间

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

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

JMeter实现持续压测websocket_第8张图片

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

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

JMeter实现持续压测websocket_第9张图片

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

JMeter实现持续压测websocket_第10张图片

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

JMeter实现持续压测websocket_第11张图片

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

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

JMeter实现持续压测websocket_第12张图片

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实现持续压测websocket_第13张图片

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

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

JMeter实现持续压测websocket_第14张图片

到这里就整体完成了

你可能感兴趣的:(Python实践,websocket,jmeter,压力测试)