目录
1、目的
进一步规范和管理对Jmeter软件的使用方法。
2、范围
适用于SSTL测试中的性能测试的使用。适用于Jmeter版本。
3、工作程序
一、测试准备
安装JDK[S1]
- 下载安装JDK;
- 配置JDK环境变量;
右键计算机属性->高级系统设置->系统属性->高级->环境变量->添加如下的系统变量:
变量名:【JAVA_HOME】
变量值:【D:\Program Files\Java\jdk1.8.0_92】【jdk安装路径】
变量名:【path】
变量值:【\;%JAVA_HOME%\bin;】
变量名:【CLASSPATH】
变量值:【.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;】
- 验证JDK;
运行cmd->输入java -version->显示java版本就表示jdk安装成功
配置Jmeter
- 下载解压Jmeter,下载地址:http://jmeter.apache.org/download_jmeter.cgi
- 配置Jmeter环境;
变量名:【JMETER_HOME】
变量值:【F:\test\jmeter\apache-jmeter-3.0(根据实际的jmeter解压路径填写)】
变量名:【CLASSPATH】
变量值:
【%JMETER_HOME\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-2.0.jar;】
启动Jmeter
Jmeter无需安装,只需解压,双击Jmeter解压路径(apache-jmeter-3.0\bin)的bin下面的jmeter.bat。
二、测试执行
HTTP请求测试
脚本录制有两种方式:一种是利用Jmeter代理服务器录制,另一种是利用badboy工具录制。
***利用Jmeter代理服务器录制脚本***
- 添加虚拟用户组
右击“测试计划”>添加>Threads(Users)>线程组。线程组(Thread Group)就是指一组用户的意思,换句话说一个线程组就是一组虚拟用户(virtual users),这些虚拟用户用来模拟访问被测系统
- 线性属性设置
- 线程数:指虚拟用户数。
- Ramp-Up Period (in seconds):虚拟用户增长时长,指用户在多长时间内增长完毕。此处设置为0,表示用户数同时加载。
- 循环次数:指一个虚拟用户做多少次的测试
- 设置并启动Jmeter代理服务器
① 右键单击工作台(Work Bench),选择非测试元件(Non-Test Elements)中的Http代理服务器(HTTP Proxy Server),如下图所示:
② 设置该“Http 代理服务器(HTTP Proxy Server)”->目标控制器(Target Controller)选择刚才建立的线程组(测试计划>线程组)
3 设置IE的代理服务器配置
打开IE界面,选择“工具(Tools)”->“Internet选项(Internet Option)”->“连接(connections)”->“局域网设置(LAN setting)”,如下图所示:
在局域网设置(LAN setting)界面勾上“为LAN使用代理服务器(Use a proxy server for your LAN)”,设置地址(address)为“localhost(本机)”,端口(Port)为8888,端口号必须是没有被占用的(可以通过netstat –ano命令查看一下本机正在使用的端口,不要重复使用,否则录制不到Jmeter脚本)
注意:录制完成后记得恢复浏览器的代理服务器设置,否则无法上网
- 录制脚本
在浏览器的URL栏输入需要测试的地址,进行需要录制的操作,操作完毕后,点击Jmeter中的“Http代理服务器(HTTP Proxy Server)”的“停止(STOP)”按钮
此时录制完成后你会发现录制到太多的没用数据,此时需要使用正则表达式在代理服务器的排除模式下添加过滤(如过滤jpg文件使用.*\.jpg),如下图所示:
- 参数化
在使用Jemeter做压力测试的时候,往往需要参数化用户名、密码以到达到多用户使用不同的用户名密码登录的目的.这个时候我们就可以使用CSV Data Set Config实现参数化登录
- 右击脚本中的用户名和密码,选择“Replace values with variables”,对用户名和密码做参数化
2、右击线程组(Thread Group)->配置元件(Config Element)->CSV Data Set Config,设置相关参数:
- FileName:csv文件的完整路径(当csv文件在bin目录下时,只需给出文件名即可)
- File Encoding:默认为ANSI
- Varible Names:定义文本文件中的参数名,参数之间逗号分隔.参数项的名称应该与HTTP Request中的参数项一致。
- Delimiter:如文件中使用的是逗号分隔,则填写逗号;如果使用的是TAB,则填写\t;
- Allow Quoated data:选项选为True的时候对全角字符的处理出现乱码
- Recycle on EOF:设置为True后,允许循环取值;设置为False后,当读取文件到结尾时,停止读取文件
- Stop Thread on EOF:当“Recycle on EOF”为False并且Stop Thread on EOF为True,则读完csv文件中的记录后,停止运行
- Sharing Mode:设置是否线程共享
***利用badboy工具录制脚本***
- 下载并启动Badboy工具
进入Badboy安装目录下双击badboy.exe。下图是Badboy主界面:
以登录百度为例录制脚本,输入百度网址后回车,即进入百度界面
在输入框中输入“badboy”,点击百度搜索。
将录制脚本导出为jmx格式。点击File -> Export to Jmeter -> 另存为“百度搜索.jmx” -> 保存。
2、添加结果监听器
右击“线程组”->“监听器”->“察看结果树”、“图形结果”、“聚合报告”来查看性能测试过程中请求和响应信息
运行脚本
- 使用单台机器做负载测试
试运行脚本:先点击保存后点击运行测试按钮。
- 压力测试:修改线程组的线程数等参数,然后执行。
注意:使用badboy录制的脚本做多线程测试时需要在逻辑控制器中添加循环控制器,否则脚本只运行一次不会做多线程并发。
使用多台机器做负载测试
1、在所有期望运行jmeter作为负载生成器的机器上安装jmeter,并确定其中一台机器作为controller,其他的机器作为agent。
2、运行所有agent机器上的jmeter-server文件(假定使用两台机器192.168.9.99 和192.168.9.130作为agent)
3、在controller机器的jmeter的bin目录下,找到jmeter.properties文件,编辑该文件:
查找:remote_hosts=127.0.0.1
修改为:remote_hosts=192.168.9.99:1099,192.168.9.130:1099
这里要特别注意端口号,有些资料说明端口1644为jmeter的controller和agent之间进行通信的默认RMI端口号,但是在测试时发现,设置为1644运行不成功,改成1099后运行通过。另外还要留意agent的机器是否开启了防火墙等。
4、启动controller机器上的jmeter应用jmeter.bat,选择菜单“运行”--->“远程启动”,来分别启动agent,也可以直接选择“远程全部启动”来将所有的agent启动。
结果分析
一般使用聚合报告、图形结果查看性能,如下图所示:
WebService接口测试
- 打开Jmeter,添加线程组
- 添加WebService测试单元;右键线程组-->添加-->Sample--> SOAP/XML-RPC Request
具体原理:Web service都是放在Web服务器(如IIS)后面的,客户生成的SOAP请求会被嵌入在一个HTTP POST请求中,发送到Web服务器来。Web服务器再把这些请求转发给Web service请求处理器。请求处理器的作用在于,解析收到的SOAP请求,调用Web service,然后再生成相应的SOAP应答。所以我们要添加soap协议request。
- 添加查看结果选项
右键选择添加的SOAP/XML-RPC Request,添加监听器,点击图形结果和用表格查看结果,也可以加入其它结果
- 设置SOAP/XML-RPC Request
填写WebService的地址,SOAPAction地址以及数据格式,webservice暴露了哪些接口,接口都需要传入哪些参数,在数据格式中都有体现,你只需要去替换参数,传给服务器就可以了
- 试运行:设置完之后,可以点击运行按钮,测试一下,点击添加的结果模块查看结果是否成功
- 压力测试:测试成功之后,设置线程组的线程数和循环条件进行压力测试。
- 试运行:设置完之后,可以点击运行按钮,测试一下,点击添加的结果模块查看结果是否成功
- 压力测试:测试成功之后,设置线程组的线程数和循环条件进行压力测试。
WebSocket接口测试
- 打开Jmeter,添加线程组
- 在线程组下选择Sampler,添加Websocket Sampler(直接打开是没有WebSocket Sampleer的,这里需要安装插件,网上自行下载插件包,把解压后的插件包拷贝到Jmeter/lib/ext的目录下,然后重启Jmeter)
- 添加结果监听器
右击“线程组”->“监听器”->“察看结果树”、“图形结果”、“聚合报告”来查看性能测试过程中请求和响应信息
配置websocket sampler,如下图所示:
- Server Name or IP:WebSocket发送的目标服务器的地址或者名称
- Port Number:WebSocker服务器监听的端口号。(一般是HTTP 80端口,可以通过WireShark数据包得到
- Connection:发送一个连接请求后,Jmeter等待连接完成的最长时间,单位是毫秒
- Response:对响应消息的最大等待时间
- Implementation:只支持RFC6455(v13),WebSocket协议标准的最新版
- Protocol:有ws与wss之分,ws前缀是WebSocket连接的辨别标识,wss前缀是WebSocket安全连接的辨别标识。根据自己的实际情况填写
- Streaming Connection:选择这个TCP session要不要保持,如果勾上标识连接会一直存在,如果没有勾上,那么得到第一次响应后该链接就会被关闭
Request data:填入将要发送的请求,要跟开发沟通好,这个是什么格式的消息
- 可以在chrome的调试模式下(F12)可以找到websocket的连接信息
在frame的tab页可以看到发送的信息内容,右键可以进行copy
根据上面的ws连接信息配置websocket sampler
测试后恢复
- 数据清理:测试结束后,需要把和项目有关的测试数据备份出来,并将测试设备上的数据清除,以免造成被测项目的信息泄露;
- 测试设备、软件状态恢复:检查测试设备及软件的状态是否正常,如发现异常需及时修复。