JMeter简单的性能测试使用介绍
工作需要,写了一份JMeter简单使用的文档,删改部分工作相关的图,应该没大影响。
下载JMeter
下载原始Jmeter文件
最新的3.1的下载地址如下
Windows下:
http://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-3.1.zip
Linux下:
http://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-3.1.tgz
下载后解压文件即可,注意JMeter需要java环境。
安装必要插件jmeter-plugins(windows下)
下载插件管理器
http://www.jmeter-plugins.org/get/
将下载所得的jar包放在{jmeter}/bin/lib/ext目录下
打开GUI模式下的jmeter下载所需插件
选择菜单栏中的“选项”,选择“Plugings Manager”,如图
选择所需插件安装
打开插件管理器后选择Available Plugings,勾选3 Basic Graph 以及Custom Thread Groups,点击Apply Changes and Restart JMeter,等待下载完成重启JMeter即可。
安装必要插件jmeter-plugins(Linux下)
查找并复制jar包
在windows的界面下,安装好插件后,根据上图的Review Changes中的信息,在{jmeter}/bin/lib/ext中找到新增jar包,复制到linux上。
使用JMeter测试
GUI模式下测试接口
添加线程组
在GUI模式,打开JMeter。右键点击“测试计划”,选择“添加”→“Threads(Users)”→“线程组”,如图所示:
添加HTTP请求
线程组属性不做修改,右键点击新添加的“线程组”,选择“添加”→“Sampler”→“HTTP请求”,如图所示:
完成HTTP请求
根据请求信息,完成“HTTP请求”:修改名称;注意IP和端口号,在路径栏补齐除ip端口号的剩余路径;Implementation使用httpClient4;使用https的协议需要在协议栏填写https;选择请求的方法,多数为POST或这GET;若请求体中含有中文,最好在content encoding中填写utf-8;请求参数可以选择Parameters或者Body Data,Parameters的参数更加直观,Body Data的更加方便参数修改且参数以parameter1=value1&mmeter2=value2形式。
添加查看结果数
右键点击“HTTP请求”,选择“添加”→“监听器”→“查看结果树”,如图所示:
添加证书文件
协议为Https的请求还需要加载证书,如果为https协议,在没有加载证书的情况下,进行了测试,最好保存测试计划,然后重启JMeter,重启后先加载证书,再进行测试,否则,报错。选择“选项”→“SSL管理器”,如图所示:
选择pkcs12的证书文件
使用pkcs12的证书文件,jks直接用是不行的,需要java打包下
启动测试
点击“启动”按钮,启动测试,如图所示
输入pcks12的密码
启动测试后,弹出“KeyStore Password”,输入pcks12生成时用的密码。
测试后查看结果树
测试结束后,点击“查看结果树”,可以看到当前测试运行了一个实例,选中该结果,点击“响应数据”查看响应的文本,检查文本是否为正确的响应数据,JMeter会把所有响应码200的回复都当成成功,一些服务例如查询等,可能会设置查询失败下返回提示语句但响应码依旧是200。此时需要查看响应文本中正确响应的关键词,方便压测时设置响应断言。
GUI模式下创建压力测试计划
添加Concurrency Thread Group
可以新建一个测试计划,也可以在原先接口测试的测试计划上修改。本例直接修改原先的接口测试,右键“测试计划”,选择择“添加”→“Threads(Users)”→“Concurrency Thread Group”,如图所示:
设置Concurrency Thread Group
根据需求完成线程组的设置,需要填写“Target Concurrency”,为压力测试预期的并发压力(注意Jmeter采用线程模拟并发的策略,大并发意味着大量线程,测试机性能会大量消耗,甚至影响测试结果,所以需要大并发的情况下,建议采用分布式部署Jmeter进行测试);“Ramp Up Time”,为测试并发数启动所需时间(注意测试并不是所有并发启动后才运行,在启动过程中,先启动的线程会先运行请求);“Ramp Up Steps Counts”,为是否将启动线程分阶段的启动,例如10即为分10次阶段性的启动一部分线程,可以为空;“Hold Target Rate Time”,为并发达到要求后再运行多久时间;“Time Unit”,时间单位,非常重要,有分和秒,不要选择错误。
添加Http请求
直接复制之前接口测试时的http请求,删去查看结果树即可。
添加聚合报告
右键http请求,选择“添加”→“监听器”→“聚合报告”。如图所示
聚合报告中保存测试数据
在聚合报告的“文件名”栏,填入./*-${__time(yyyyMMdd-HHmmss,)}.jtl,表示在当前目录生成jtl(jmeter的数据文件格式),${__time(yyyyMMdd-HHmmss,)}为jmeter的时间函数,生成测试的年月日分钟秒,方便后期管理测试数据。
添加响应断言
右键http请求,选择“添加”→“断言”→“响应断言”,如图所示:
配置响应断言
不同请求配置不同的断言。根据之前的接口测试,点击添加,输入判断文本,不同模式匹配规则,自行百度
保存测试计划
删除接口测试的线程组,点击“文件”,选择“保存测试计划为”,保存测试计划。压测计划创建完成。注意3.1版本“保存测试计划为”下面是“选中部分保存为”,旧版就是“保存为”,会保存选中的部分,然后实际测试的时候因为测试计划不完整是没法跑测试的,会报Error in NonGUIDriver java.lang.RuntimeException: Could not find the TestPlan class!,这雷旧版很容易踩上。
NO-GUI模式下启动压力测试
Windows下
打开cmd,目录切换到测试计划(jmx)所在的目录,证书放在同一目录下,输入{jmeter}/bin/jmeter -Djavax.net.ssl.keyStore=*.pkcs12 -Djavax.net.ssl.keyStorePassword=* -n -t *.jmx
{jmeter}为jmeter的安装目录
-Djavax.net.ssl.keyStore=**.pkcs12 是证书文件
-Djavax.net.ssl.keyStorePassword=** 是证书文件生成时的密码
-n 为nogui模式
-t 后面为测试计划文件(jmx)
linux下(推荐)
目录切换到测试计划(jmx)所在的目录,证书放在同一目录下,输入{jmeter}/bin/jmeter -Djavax.net.ssl.keyStore=*.pkcs12 -Djavax.net.ssl.keyStorePassword=* -n -t .jmx |tee -a .out
{jmeter}为jmeter的安装目录
-Djavax.net.ssl.keyStore=**.pkcs12 是证书文件
-Djavax.net.ssl.keyStorePassword=** 是证书文件生成时的密码
-n 为nogui模式
-t 后面为测试计划文件(jmx)
tee -a 参数后为文本文件,用于保存测试时输出summarize数据
若是为http的,Djavax.net.ssl.keyStore=*.pkcs12 -Djavax.net.ssl.keyStorePassword=* 直接省去
使用JMeter查看数据
在GUI模式下
选择报表
打开Jmeter,右击测试计划,选择“添加”→“监听器”→“聚合报告”;“添加”→“监听器”→“Response Times Over Time”;“添加”→“监听器”→“Transactions per Second”(有其他图表需要可以自行下载插件安装),如图所示:
加载数据
选择聚合报告,点击文件名栏后的浏览,选择jtl文件,加载数据(其余监听器类似),如图所示:
其他:
http会产生cookie的,需要删除或者其他操作的,需要添加cookie管理器。
默认jtl数据不保存响应文本,需要保存错误文件的信息,可以添加监听器中的保存响应到文件,勾选Save Failed Responses only(不推荐有较多错误的情况去保存文本,容易卡住)。
Bin目录下有个templates文件夹,里面有些JMeter用法的例子,可以看看。
NOGUI模式下可以使用jmeter -g result.jtl -o ./ResultReport生成一个html的报表(3.0版本以上)