新手区 jmeter 的 websocket 接口性能测试,举例讲解

大话性能 · 2018年09月13日 · 最后由 我去催饭 回复于 2021年04月07日 · 6462 次阅读

也许你现在还用不到用 jmeter 测试 websocket,可以先了解下,收藏着。

更多工作中的测试技能干货,大家可以关注微信公众号<大话性能>,每篇文章都会让你有所收获。

http://dwz.cn/NNW9Wm5G

Websocket 简介

WebSocket protocol 是 HTML5 一种新的协议。它实现了浏览器与服务器全双工通信,即有效解决了 HTTP 协议的一个缺陷 (通信只能由客户端发起)。
在以前如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们只能使用"轮询":每隔一段时候,就发出一个询问,了解服务器有没有新的信息,这种方式性能比较差,就算在空闲的时候也要消耗资源。利用 websocket 协议可以解决此类问题。最典型的场景就是聊天室、实时更新状态的系统等。

Websocket 优势

浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
最主要的 2 个特点是:
1、数据 header 很小,传输开销小;
2、server push,服务端也可以主动的推送消息;

Websocket 性能关注点

性能测试针对不同协议,关注的指标还是会略有不同。对于基于 websocket 协议开发的系统,性能测试关注点侧重于连接数(可以建立多少个并发连接)和连接处理能力(模拟 websocket 并发地发消息)。

Jmeter 添加 jar 包

默认情况下,jmeter 是没有 websocket 的 sample 请求的,需要自己去扩展。
首先,我们需要准备 Jmeter 的 WebSocket 协议的支持插件:
JMeterWebSocketSampler-1.0.2-SNAPSHOT.jar
这插件依赖一下几个 jar 包
1、jetty-http-9.1.2.v20140210.jar
2、jetty-io-9.1.2.v20140210.jar
3、jetty-util-9.1.2.v20140210.jar
4、websocket-api-9.1.1.v20140108.jar
5、websocket-client-9.1.1.v20140108.jar
6、websocket-common-9.1.1.v20140108.jar
我们准备好这些 jar 包后,把它们拷贝到 Jmeter 目录的\lib\ext\目录下。

为了便于大家统一下载所以的依赖 jar 包,我上传到了网盘
微信公众号(大话性能)后台回复 websocket,即可获取下载 jar 包的密码。
下载的链接为:https://share.weiyun.com/5KpGmxu

组件介绍

1、WebServer

(1)Server Name or IP:WebSocket 发送的目标服务器的地址或者名称
(2)Port Number:WebSocker 服务器监听的端口号。
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)connection id:会话的 id 标志。
(5)Request data:填入将要发送的请求,要跟开发沟通好,这个是什么格式的消息。

4.WebSocket Response

(1)Response Pattern – 采样器将等待含有该标识的消息并继续通信(或者直到 timeout,该连接关闭)
(2)Close Connection Pattern – 如果服务器返回的消息含有这样的字符,就结束会话。
(3)Message Backlog – 定义服务器返回消息保留的最大长度。

例子讲解

1、Streaming Connection 勾选与否的影响

线程组设置 1 个并发,循环 2 次。
2 个 websocket sample 请求都不勾选 Streaming Connection
发现每次请求都会 opening new connection。

都勾选
发现 4 个请求都在同一个 connection 中


因此,当勾选了 streaming connection 时,不仅会在结束会话后保留连接,而且勾选了的 sampler 会在有可用连接是直接使用,而没有勾选的 sampler 即使存在可用连接也会重新打开一个新的连接。因此,如果是要在一个会话中发送多条消息,请勾选这个 streaming connection。

2、connection id 的设置
Connection id 代表会话的标志,不同的 connection 会话有不同的 id 值。
线程组设置 1 个并发,循环 2 次。
在 2 个 websocket sample 请求中都勾选了 streaming connection 复用连接,但是 connection id 填的不同。
结果是 websocket sample2 会新建一个 connection 会话,而不是复用 websocket sample1 的 connection 会话。


3、response pattern 和 close pattern 的设置
Response pattern 是对响应结果的匹配和响应断言配合使用。Close pattern 是可以人工的停止会话。

Response pattern 的设置


如上 websocket sample1 的 response pattern 填的是 test:002,而正确的是 test:001,故 websocket sample1 的运行结果就是 didn’t match any pattern。若是为空不填,代表什么都可以匹配。

close pattern 的设置

在 websocket sample1 请求中设置 close connection pattern 为 test:001,2 个 websocket sample 都勾选 streaming connection,按理说 4 个请求都应该是复用同一个连接(connection id 不设置)。但是由于现在设置了 close connection pattern,第一个 websocket sample1 第一次请求满足了这个条件,就 close 了 session,导致后面的 websocket sample 没有连接可以复用,报如下错误。



以上就是对 jmeter 中的 websocket 中核心设置的讲解,希望以后在做 websocket 接口或性能测试的时候有帮助。

大家可持续关注大话性能公众号,不断学习测试实战技能和高薪岗位内推。

共收到 4 条回复 时间 点赞

帮助理解 jmeter 的 websocket

大话性能 回复

怎么保持长连接啊

求验证码,谢谢楼主~

想请教一下老师,这个报错是因为我的参数传的不对么?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册