利用Jmeter对WebSocket进行压力测试

什么是WebSocket

是一种协议(具体查看参考文档,或者官方文档),在http中服务器只能在接收到请求后,才能给客户端返回response,在一些服务端需要主动发送数据的需求时,http的实现效果不是很好。而WebSocket能很好的解决这个问题,在建立连接后,服务端和客户端可以随意的来回发送数据,整个通信类似打电话:建立连接(拨通)->通信->关闭连接(挂断)。

如何识别性能测试的业务有WebSocket

  1. chrome浏览器打开调试工具, 查看网络请求触发源
    利用Jmeter对WebSocket进行压力测试_第1张图片
  2. 用抓包工具,如Charles
    利用Jmeter对WebSocket进行压力测试_第2张图片

JMeter中安装WebSocket插件

  1. 下载JMeter
  2. 下载jar包 (jetty-http, jetty-io, jetty-util, websocket-api, websocket-client, websocket-common)
  3. 将jar包放到jmeter的lib/ext目录下,重启Jmeter,就可以看到WebSocket的sampler
    利用Jmeter对WebSocket进行压力测试_第3张图片

Websocket几种sampler的使用

Websocket性能测试需要注意的点

  1. Websocket跟http请求的关系很小,几乎没有关系,所以在性能测试中,可以根据实际忽略业务场景中一些http请求
  2. 根据bodoudou业务场景的设计,我推测ws中很少会进行数据校验,所以可使用重复数据,不用考虑生成批量数据(数据校验会在http请求中)
  3. 有些Websocket Single Write和Websocket Single Read一一对应的使用,类似于一问一答的场景(类似http的request-response)可以使用WebSocket request-response Sampler。
  4. Websocket Single Read Sampler和WebSocket request-response Sampler中的Read timeout超时时间要注意根据实际场景来设置,如果太短的话,就获取不到数据了
  5. 发送的data支持文本(JSON)和Binary二进制数据(没了解过),可以抓包获取格式,直接复制

建立连接

WebSocket Open Connection

如果仅建立连接,不发送数据,不需要返回数据,用WebSocket Open Connection。ES剥豆豆场景中,建立连接的时候并不会发送data,用的是WebSocket Open Connection。
利用Jmeter对WebSocket进行压力测试_第4张图片

WebSocket request-response Sampler

如果建立连接时,还需要发送或用到返回数据,则用 WebSocket request-response Sampler。
利用Jmeter对WebSocket进行压力测试_第5张图片

Ping/Pong

利用Jmeter对WebSocket进行压力测试_第6张图片
根据需求使用,心跳机制,检查连接是否还存在。请求头带编码,告诉WebSocket服务,这是心跳,所以不用填写任何东西,可以直接使用。

参考文档: Websocket协议

上一篇 利用Jmeter进行分布式的性能测试
下一篇 利用ReportNG生成自动化测试报告

EduSoho官网 https://www.edusoho.com/
EduSoho开源地址 https://github.com/edusoho/edusoho
我们正在寻找开发者

你可能感兴趣的:(利用Jmeter对WebSocket进行压力测试)