Jmeter对Web Socket进行压力测试

一.简单介绍一下Sample Socket组件的界面

1、WebServer
(1)Server Name or IP:WebSocket发送的目标服务器的地址或者名称
(2)Port Number:WebSocker服务器监听的端口号。(一般是HTTP 80端口,可以通过WireShark数据包得到)

2、Timeout: 
(1)Connection – 发送一个连接请求后,Jmeter等待连接完成的最长时间,单位是毫秒。
(2)Response - 对响应消息的最大等待时间。

3、WebSocket Request
(1)Implementation – 只支持RFC6455(v13) ,WebSocket协议标准的最新版。
(2)Protocol – 有ws与wss之分,  ws前缀是WebSocket连接的辨别标识,wss前缀是WebSocket安全连接的辨别标识。根据自己的实际情况填写
(3)Streaming Connection – 选择这个TCP session要不要保持,如果勾上标识连接会一直存在,如果没有勾上,那么得到第一次响应后该链接就会被关闭。(*重要!不勾选的话,请求成功就会断开连接)
(4)Request data:请求内容,填入将要发送的请求,要跟开发沟通好,这个是什么格式的消息。

(5)Connection Id: 连接ID (*重要!就是通过这个来区分不同会话)

4.WebSocket Response
(1)Response Pattern – 采样器将等待含有该标识的消息并继续通信(或者直到timeout,该连接关闭)
(2)Close Connection Pattern – 如果服务器返回的消息含有这样的字符,就结束会话。
(3)Message Backlog – 保留返回结果的数量(如果希望只保留最新一条,可以设定为1)

 

测试方案:

a) 用一台负载机分别模拟,无学生、50个学生、100个学生、200个学生同时上课的情况。如果结果可以接受,继续增加上课学生。

b) 用一台客户机分别登录老师和单个真实学生,查看课堂情况。

c) 监控服务器资源占用情况。(本次教程不涉及)

实现方案:

a) Jmeter 发起Web Socket请求,最基本连接请求外,额外学生发言一次,并且每25秒循环请求一次保持长连接。 

1.根据刚才学到的用Chrome可以看到WebSocket会话方法。我获取学生进入房间WS接口最基本的3个东西 

1) 协议&地址&端口&query参数组成的URL

2) Headers头信息

2.新建一个Jmeter脚本,添加HTTP信息头管理器和WebSocket Sampler。然后填入基本信息。

1) 头信息可以直接从Chrome全复制下来一键粘进HTTP信息头管理器。

2) URL填入这几个地方。 

3.其实这个时候应该就可以正确建立连接了。但是我们希望学生上课,要传达这个信息给服务器。就需要传入请求参数。 
其实不难发现,进入教室就是红框里的三个绿色箭头,也就是说我们要上课,至少要请求3次。之后的绿色箭头判断下来请求内容无实际意义,作用之后会提到。

4.将WebSocket Sampler 复制3个,分别把Chrome里三次请求的请求内容填进去。这样一个基本的ws脚本就构成了。

5.之前Chrome中有一些红框外的绿箭头,之前介绍过WebSocket有一个超时机制,我们可以看到这些请求之间都恰巧间隔25秒(这里截图没截好)。我们需要模拟这个动作,来保证长连接不会断开。也就是就算什么都不做,也每隔25秒请求一次。 

6.脚本设计如下

a) 线程组设定线程数50、100、200,循环为1。
b) 用户参数前置处理器 生成区分不同学生的id、name、Connection Id。注意勾选"每次迭代更新一次"。
c) 1 2 3 是进入教室的基本请求
d) 4 是学生发言(手动浏览器发言一次,获取到发言操作的接口请求内容)
e) 循环控制器勾选永远。
f) 5 在循环控制器下的循环,并设定定时器,间隔25秒。
 

7.最终实现目标