websocket插件安装
jmeter想要测试websocket接口,但需要引入以下依赖包,把以下jar包放到jmeter安装目录的\lib\ext目录下:
- jetty-http
- jetty-io
- jetty-util
- websocket-api
- websocket-client
- websweocket-common
我用的是 下面版本的jar包?
1、JMeterWebSocketSamplers-1.2.2.jar
2、jetty-http-9.1.2.v20140210.jar 3、jetty-io-9.1.2.v20140210.jar 4、jetty-util-9.1.2.v20140210.jar 5、websocket-api-9.1.1.v20140108.jar 6、websocket-client-9.1.1.v20140108.jar 7、websocket-common-9.1.1.v20140108.jar
JMeterWebSocketSamplers.jar的所有版本下载地址
https://bitbucket.org/pjtr/jmeter-websocket-samplers/downloads/
jar包安装后重启jmeter,取样器里面会新增以下内容,如下图所示
脚本编写
在编写脚本之前,先要搞清楚推送服务的逻辑,它的逻辑是这样的:
- 首先,客户端向服务端发送请求,建立连接
- 建立连接后,客户端需要定时向服务端发送
ping-pong 消息,维持心跳 - 客户端发送主动断开连接的请求,服务端断开该连接
建立连接,使用【WebSocket request-response Sampler】,顾名思义,这个取样器既能发送请求也能接收响应。
说明一下各项内容:
Connection :有use existing connection 和setup new connection 两种模式,前者是使用已有连接,即上一个websocket请求所建立的连接通道,选择后Server URL 全置灰只读不可操作。后者指新建连接通道。Server URL :ws协议和wss(加密的websocket)可选,sever name or IP (服务器地址)、Port (端口号)、Path (路径)、Connection timeout (连接超时时间)这些含义也很明了。Data :发送数据,可以选择Text(文本,包括JSON)和Binary(二进制)形式,也可以通过勾选Read request data from file 来从文件中获取data。
这个请求要与连接请求是同一个线程,并且要定时运行,因此设计脚本结构如下:
注意两点:
- 想要建立3000个连接的话,一定是将【线程数】设置为3000,循环次数设置为1,而不是相反,这是许多人容易弄混淆的。
- 【Ramp-up 时间】这个参数是全部线程启动的时间,如果想给服务器较大的瞬时压力,就把时间设置短一些。经过实测,这个时间太短的话,最终成功建立的连接会明显少于设置的【线程数】,所以一般设置长一点。
一般的websocket推送服务,会设计定时心跳检测机制,也就是客户端定时向服务端发送一条特定的消息,这样服务端就会保持这个连接,否则的话,这个客户端就被服务端判定为不活跃而被断掉连接。因此,为了让我们的脚本持续跑下去,就需要加入心跳检测请求。
因为线程循环次数是1次(多次的话,就是一个线程反复建立连接了),因此我们要把【心跳检测】放到一个循环控制器中。
而【固定定时器】的作用,就是控制【心跳检测】发送的频率:
心跳检测:
尤其要注意两点:
Connection 项一定要选择?use existing connection ,表示使用该线程已经建立的连接,否则就重新创建连接了。Request data ?根据服务端的实现而定。
|