前言 【图片觉得看不清的可以点击放大】
先把依赖包下载并解压到Jmeter跟目录下lib/ext下,重启Jmeter才能玩得转
谷歌WebScoket连接依赖包点击下载
点击支持作者的依赖包下载地址
- 一、添加线程组
1. 添加线程组等其他元件
-
添加线程组,Jmeter执行是通过线程组进行驱动的,测试计划必须最少有一个线程组,选中测试计划,点击右键,添加》线程》线程组
-
添加CSV 数据文件设置元件,该元件可用来参数化,点击右键》添加》配置元件》CSV 数据文件设置
-
添加用户定义的变量,该变量可在整个线程中进行调用,点击右键》添加》配置元件》用户定义的变量
-
添加HTTP信息头管理器,该请求头可在http请求时自动调用,点击右键》添加》配置元件》HTTP信息头管理器
-
添加HTTP Cookie管理器,该Cookie管理器可在整个线程中自动调用,点击右键》添加》配置元件》HTTP Cookie管理器
-
添加HTTP请求默认值,默认值可在整个线程中进行调用,点击右键》添加》配置元件》HTTP请求默认值
- 二、依次添加如下请求
- 添加登录请求-选中线程组,点击右键,添加》取样器》HTTP请求
- 获取用户信息、授权接口提取返回值,HTTP请求点击右键,添加》后置处理器》JSON提取器
- 添加创建连接请求-选中线程组,点击右键,添加》取样器》WebSocket Open Connection
-
建立长连接参数可以通过chrome接口请求查看
-
该请求的作用是和websocket接口创建连接,供其他接口连接,然后发送请求给服务器,配置如下:
-
添加加入聊天室请求-选中线程组,点击右键,添加》取样器》HTTP请求
-
添加发送请求-选中线程组,点击右键,添加》取样器》WebSocket request-response Sampler
-
添加读取请求-选中线程组,点击右键,添加》取样器》WebSocket Single Read Sampler
-
该请求的作用是读取系统返回的请求,需根据实际情况设置循环,比如发送信息会返回:加入聊天室成功、发送是否成功、发送具体消息等;第4点中 WebSocket request-response Sampler,会默认获取一次返回值
-
添加断言,判断响应信息中是否包含{“succeed”:true 返回信息,选中该WebSocket请求,点击右键,添加》断言》响应断言,输入预期结果
- 添加关闭请求-选中线程组,点击右键,添加》取样器》WebSocket Close
-
该请求用来关闭已经连接的websocket接口,如需持续发送消息,无需添加关闭,配置如下
-
三、添加察看结果树
-
察看结果树用来察看每次响应结果的响应数据,选中线程组,点击右键,添加》监听器》察看结果树
查看所有接口请求信息
-
实现效果如下,可以实现模拟多人在线聊天 -->> 具体效果,点击查看
-
四、补充用到的插件
-
发送随机聊天文本,CSV随机获取器,点击右键》添加》配置元件》bzm - Random CSV Data Set Config
-
发送消息条数记录,计数器,点击右键》添加》配置元件》计数器
-
发送消息随机等待时长,高斯随机定时器,点击右键》添加》定时器》高斯随机定时器
-
并发发送消息,同步定时器,点击右键》添加》定时器》同步定时器
-
接口请求前进行参数组装,点击右键》添加》前置处理器》BeanShell 预处理程序
- 最后彩蛋,来点随机消息源码,供参考
import java.io.UnsupportedEncodingException;
import java.util.Random;
/**
* 随机生成常见的汉字
*
* @author 火陌
*
*/
private static char getRandomChar(){
String str = "";
int hightPos; //
int lowPos;
//随机数对象
Random random = new Random();
//区码,0xA0打头,从第16区开始,即0xB0=11*16=176,16~55一级汉字,56~87二级汉字
hightPos = (176 + Math.abs(random.nextInt(39)));
//位码,0xA0打头,范围第1~94列
lowPos = (161 + Math.abs(random.nextInt(93)));
//字节码
byte[] b = new byte[2];
b[0] = (Integer.valueOf(hightPos)).byteValue();
b[1] = (Integer.valueOf(lowPos)).byteValue();
try {
//区位码组合成汉字
str = new String(b, "GBK");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
System.out.println("错误");
}
//根据索引返回对应的字符
return str.charAt(0);
}
//随机生成汉字消息
String msginfo="";
Random rands = new Random();
int msginfo_min = Integer.parseInt("${msginfo_min}");
int msginfo_max = Integer.parseInt("${msginfo_max}");
int msginfo_num = rands.nextInt(msginfo_max - msginfo_min) + msginfo_min;
for (int i = 1; i <= msginfo_num; i++){
msginfo = msginfo + getRandomChar();
}
//msginfo = "【${msgnum}】" + msginfo;
vars.put("msginfo",msginfo);
//log.info("========="+ msginfo);