一 jmeter插件准备
1,去以下站点下载jar包(jetty-http, jetty-io, jetty-util, websocket-api, websocket-client, websocket-common)
2,将jar包放到jmeter的lib/ext目录下
3,重启Jmeter,进入选项>插件管理处
4,安装插件,勾选上websocket相关的,应用并重启jmeter
5,新建测试计划,建立线程组,右键线程组>添加>取样器,就可以看到WebSocket相关的sampler了
6,需要用到后置处理器的jp@gc-JSON/YAML Path Extractor,还需要把这个插件也装上
7,在一个http请求右键添加>后置处理器,就可以看到jp@gc-JSON/YAML Path Extractor了,主要作用是获取响应中的报文,把一些参数提取出来,比如token,传递给别的请求作为入参使用,建立关联
二 构建业务场景
以用户登录后进入聊天室进行发言为例。通过抓包可发现用户登录是http,带着token进入聊天室,是websocket,建立长连接后就可以不停的发言发图及其他业务,直到长连接closed。
1,创建测试计划>线程组,添加登录的http请求,这里所有的用户都使用相同的密码,只对用户名进行参数化,使用变量名${user}
2,CSV参数化
建立一个txt文件,格式如图,第一行开始写要做参数的数据源,如果要同时对多个字段参数化,用,分割(user,password),一行表示执行一次线程取的参数
jmeter>线程组右键>添加>配置元件>CSV数据文件设置
引用txt文件,并设置参数化的变量user,此前已在登录的请求中${user}做了引用,到此参数化设置完成
3,关联
在登录请求后添加后置处理器jp@gc-JSON/YAML Path Extractor,设置token这个变量,把响应报文中的token提取出来并赋值给token变量
4,构建websocket请求
抓包得到websocket请求的url。
和websocket发送数据的格式
在jmeter几个sampler的大概意思如下,用最后一个请求响应的
相关的信息填写如下
server name or IP :chat-ws.test.com
Port:80
Path:/w?roomCode=xxxxxx&authorization=${token}
这里的token值直接用变量代替${token},
Request data:{"reqType":1,"msgType":1,"content":{"msg":"XXX压测数据"}}
5,添加监听器
6,设置循环次数,保存,并执行
7,查看运行结果,抽其中一对登录和websocket请求响应验证一下,登录账号hk0066,对应昵称是逐月
在websocket请求响应所对应的响应数据,进入聊天室的欢迎词:欢迎玩家逐月进入房间,再查看下一个登录,账号是hk0064,排序和txt的吻合……查看聊天室,已经有不同的用户的压测数据刷屏了
三 性能监控
1,jmeter安装插件PerfMon,主要作用是将加压的服务器的指标在jmeter前端展示
2,线程组添加监听器jp@gc-PerfMon Metrics Collector
3,设置如下图,host /IP:被监听的服务器 Port:4444(默认) Metric to collect:CPU/Menory/…… 点击add row,每增加一行,Metric to collect是不同的对象
4,服务器上安装ServerAgent-2.2.3做监听
下载ServerAgent-2.2.3.zip 并上传到被监听服务器上。这里服务器是Linux,先到Linux机器上建一个目录perfMon,再使用rz命令上传到该目录perfMon下。rz,sz是Linux/Unix同Windows进行ZModem文件传输的命令行工具。
从服务端发送文件到客户端:
sz filename
从客户端上传文件到服务端:
rz
在弹出的框中选择文件,rz上传文件的用户和组是当前登录的用户
步骤:
4.1 ,Linux上执行
mkdir perfMon //建一个目录perfMon
yum install lrzsz //安装lrzsz
4.2,选择Xshell的当前链接SIT>右键属性>文件传输>ZMODEM>连接
然后进入Linux命令行
cd perfmon
rz
弹出如下框,选择下载好的ServerAgent-2.2.3.zip,勾选底部的□发送文件到ASCII
打开即开始上传了
上传完毕,返回linux
ll //可查看到上传的文件
unzip ServerAgent-2.2.3.zip //解压到当前目录下
cd ServerAgent-2.2.3 //进入该目录
./startAgent.sh
5,jmeter设置持续时间,没设置集合点做并发,暂时只是设置持续执行180秒(3分钟)
6,查看监听器,结果如下
抛砖引玉,一次jmeter的websocket压测就执行完成了