这篇文章讨论一下jmeter工具的使用方法,以Linux发行版debian为例,Windows下使用方法类似。
jmeter_4">一 jmeter是什么
jmeter是Apache组织开发的一款跨平台的开源压测工具,可以用于对web应用以及多种领域的压力测试,而且jmeter还提供了数据分析和可视化功能,可以很方便的理解以及分析结果。
jmeter_8">二 jmeter下载以及部署
2.1 下载
先在官网下载页面下载jmeter。
比如这篇文章我们就以图中这个版本为例
下载完成之后解压到合适的目录,比如使用命令tar -xzvf ./apache-jmeter-5.6.3.tgz
就解压到当前文件夹里。
2.2 安装部署
使用jmeter需要先安装部署Java环境,所以我们要先执行命令apt install default-jdk
安装java环境,这个命令会安装默认版本的java环境,当然也可以选择安装指定版本。
然后可以执行命令java --version
确认是否已经安装完成。
安装好java环境之后,我们看一下刚才解压出来的文件,在/apache-jmeter-5.6.3/bin/目录下会有一些脚本以及可执行程序,启动jmeter可视化界面有多种方法,Linux下建议直接执行/apache-jmeter-5.6.3/bin/目录下的jmeter.sh脚本,Windows下建议直接执行/apache-jmeter-5.6.3/bin/目录下的jmeter.bat脚本,当然在启动前也可以选择先设置一下环境变量,这篇文章里就不设置环境变量了。
启动jmeter的图形化界面之后,可以选择改为中文界面。
这样就部署完成可以使用了。
jmeter_32">三 jmeter使用方法
为了演示特意用C++写了一个简单的http服务端程序的demo,直接手动按照http协议写的,具体代码就不放这里了。
3.1 图形化界面
启动jmeter的图形化界面之后,我们需要先创建一个测试计划,比如按照如下步骤:
1.点击文件->新建。
2.右键点击测试计划->添加->配置元件->HTTP请求默认值。
3.右键点击测试计划->添加->配置元件->HTTP信息头管理器。
4.右键点击测试计划->添加->断言->响应断言。
5.右键点击测试计划->添加->断言->响应断言。
6.右键点击测试计划->添加->线程(用户)->线程组。
7.右键点击测试计划->添加->线程(用户)->线程组。
8.右键点击测试计划->添加->监听器->汇总报告。
9.右键点击第一个线程组->添加->取样器->HTTP请求。
10.右键点击第一个线程组->添加->监听器->查看结果树。
11.右键点击第二个线程组->添加->取样器->HTTP请求。
12.右键点击第二个线程组->添加->监听器->查看结果树。
完成之后就是这个样子:
另外这些组件都是可以改名字的,可以选择改为一个觉得合适的名字。
然后我们需要设置具体内容,比如按照如下方式:
1.在测试计划里选择独立运行每个线程组。
2.在HTTP请求默认值里设置协议、服务器和端口。
3.在HTTP信息头管理器里设置信息头,比如使用json。
4.在第一个响应断言里选择响应代码,选择相等,设置为200。
5.在第二个响应断言里选择响应文本,选择包括,设置为ok。
6.在第一个线程组里设置线程数为2,循环次数为2。
7.在第一个线程组的HTTP请求里设置HTTP请求相关内容。
8.在第二个线程组里也设置一下,另外,在查看结果树和汇总报告里可以设置将数据保存到文件里,并且可以自定义保存哪些数据。
设置完成之后,我们点击保存按钮将测试计划保存下来,然后直接点击启动按钮,之后就可以在查看结果树和汇总报告里分析结果了,相关按钮可以在界面上方的工具栏找。
建议只使用图形化界面来创建和调试测试计划,实际测试还是要使用命令行,因为图形化界面会影响性能,从而就会影响测试结果。
3.2 命令行
使用命令行执行测试计划在Windows下和Linux下的命令几乎完全一样。
比如我们将测试计划保存在/apache-jmeter-5.6.3/bin/demo/目录下,保存为demo.jmx,可以使用命令./jmeter -n -t ./demo/demo.jmx -l ./demo/result.txt -e -o ./demo/webreport -j ./demo/jmeter.log
执行测试计划。
解释一下这条命令的参数含义:
-n:使用命令行模式。
-t:指定测试计划.jmx文件所在位置。
-l:指定测试结果存放位置。
-e:指定需要生成测试报告。
-o:指定测试报告存放位置。
-j:指定测试日志存放位置。
使用命令行执行测试计划之后,我们可以看到生成了很多文件,这些文件包含了很多信息,比如测试结果result.txt,测试日志jmeter.log,以及其他很多文件,分析的时候都是可以利用起来的。
比如我们可以用浏览器打开index.html,可以看到详细的图形化报告,因为内容很多,这里就随便展示下,具体可以自己研究一下。
3.3 动态传参
jmeter有好几种方法可以实现动态传参,这里介绍其中一种方法。
比如我们想动态设置线程数,可以修改一下测试计划,设置线程数为${__P(concurrentNumber,1)},意思是线程数参数名为concurrentNumber,默认值为1。
保存修改之后就可以执行命令./jmeter -n -t ./demo/demo.jmx -l ./demo/result.txt -e -o ./demo/webreport -j ./demo/jmeter.log -JconcurrentNumber=2
使用动态传参的方式执行测试计划了,这条命令里的-J参数就是指定需要动态传参,当然如果不传参就是使用默认值。
这里一个比较好的经验是将查看结果树这种组件保存的数据文件所在目录,设置为动态传参(比如设置为${__P(resultDir,/demo/result)}/resultxml/demo.xml),不然保存的位置和想象中可能区别很大,实际测试一下就知道情况了。
四 一个自动测试解决方案
这里提供一个自动测试解决方案,方案如下:
- 创建jmeter测试计划。
- 编写shell脚本,这个脚本具体做的事情包括:
- 创建一个以日期时间命名的文件夹,用来保存正在执行的测试计划的测试结果,这样结构就会比较清晰。
- 使用命令行的方式执行测试计划。
- 解析生成的测试报告里的statistics.json文件的内容,这个文件里有比较详细的测试结果统计信息。
- 根据解析出的statistics.json文件的内容生成需要的报告内容。
- 将报告内容以需要的方式发送出来,比如使用curl或者邮件的方式发送为通知。
- 使用crontab设置定时任务,定时执行测试脚本就可以了。
当然shell脚本解析json文件好像是比较麻烦的,可以编写比如python脚本进行解析,然后shell脚本调用python脚本,具体方案可以根据需求调整。
五 其他
1.这篇文章有些细节并未展示,实际测试的时候应该就能发现了。
2.可以将应答数据使用提取器(比如JSON提取器,创建方式为右键某个元件->添加->后置处理器->JSON提取器)提取并保存到变量里,供之后的测试使用,比如将第一个api的应答保存下来,然后在第二个api的断言中使用。可以使用测试片段(创建方式为右键某个元件->添加->测试片段->测试片段)创建一些用来复用的测试流程,然后用模块控制器(创建方式为右键某个元件->添加->逻辑控制器->模块控制器)使用这些测试片段。可以使用Include控制器(创建方式为右键某个元件->添加->逻辑控制器->Include控制器)包含其他创建好的测试计划。这些内容只是简单了解了一下,所以就不展开了。
3.jmeter这个测试工具很强大的,可以查看官网了解更多用法。
如果这篇文章对你有帮助,别忘了关注我啊,可能我还会写出更多对你有帮助的文章