快速掌握jmeter的基本操作和使⽤
0. Jmeter
Jmeter简介
Apache JMeter是Apache组织开发的基于Java的压⼒测试⼯工具。用于对软件做压力测试,它最初被设计用于 Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态⽂文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应⽤用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使⽤正则表达式创建断⾔。
Apache jmeter 可以⽤用于对静态的和动态的资源(文件,Servlet,Perl脚本,java 对象,数据库和查询,FTP服 务器器等等)的性能进行测试。它可以用于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你可以使用它做性能的图形分析或在大并发负载测试你的服务器/脚本/对象。
作⽤:
1.能够对HTTP和FTP服务器进行压力和性能测试,也可以对任何数据库进⾏同样的测试(通过JDBC)。
2.完全的可移植性和100% 纯java。
3.完全 Swing 和轻量量组件支持(预编译的JAR使⽤用 javax.swing.*)包。
4.完全多线程 框架允许通过多个线程并发取样和通过单独的线程组对不同的功能同时取样。
5.精心的GUI设计允许快速操作和更精确的计时。
6.缓存和离线分析/回放测试结果。
高可扩展性
1.可链接的取样器允许无限制的测试能⼒。
2.各种负载统计表和可链接的计时器可供选择。
3.数据分析和可视化插件提供了很好的可扩展性以及个性化。
4.具有提供动态输入到测试的功能(包括Javascript)。
5.⽀持脚本变成的取样器(在1.9.2及以上版本⽀支持BeanShell)。
6.可通过JAVA编写扩展 jar 包,对JMETER 进行应用扩展
1. Jemeter下载安装
官⽹下载最新版本的Jemeter,解压到任意目录,下载链接:Dowenload Apache JMeter 安装完成后,进入“pache-jmeter-5.0/bin/”⽬录下通过如下命令启动Jmeter:
sh jmeter
2. 解决Jmeter乱码问题
1)Jmeter安装⽬目录/bin/jmeter.properties中sampleresult.default.encoding默认为ISO-8859-1,将参数修改为 sampleresult.default.encoding=utf-8
且按如下图操作:
2)重启jmeter
3. Jmeter的使⽤
为了方便分类测试和管理,建议在外⾯建个文件夹单独用来存测试案例和环境变量,并建立“xxxx.jmx”,xxxx 为你要测试的案例名,再建⽴一个cvs⽂件夹用来存储全局变量文件。
Threads(Users)线程用户
虽然有3个添加线程组的选项,名字不同但创建后界面完全一样。
1)Thread Group(线程组)
这个就是我们通常添加运行的线程。通俗的讲一个线程组,,可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。线程组中包含的线程数量在测试执行过程中是不会发⽣改变的。
线程数:这里选择5。
Ramp-Up Period:单位是秒,默认时间是1秒。它指定了启动所有线程所花费的时间,比如,当前的设定表示“在5秒内启动5个线程,每个线程的间隔时间为1秒”。如果你需要Jmeter立即启动所有线程,将此设定为0即可。
循环次数:表示每个线程执行多少次请求。
2)setUp Thread Group
一种特殊类型的ThreadGroup的,可⽤于执行预测试操作。这些线程的行为完全像一个正常的线程组元件。不同的是,这些类型的线程执行测试前进行定期线程组的执⾏。说⽩了相当于init,可⽤于执行预测试操作。
3)tearDown Thread Group
一种特殊类型的ThreadGroup的,可用于执行测试后动作。这些线程的行为完全像一个正常的线程组元件。不同的是,这些类型的线程执行测试结束后执行定期的线程组。说白了相当于end,可⽤于执行测试后的动作。
取样器器
取样器(Sampler)是性能测试中向服务器发送请求,记录响应信息,记录响应单位的最小单元,Jmeter原⽣⽀持多种不同sampler,如HTTP Request Sampler 、 FTP Request Sampler 、TCP Request Sampler 、JDBC Request Sampler 等,每一种不同类型的 sampler 可以根据设置的参数向服务器发出不同类型的请求。
定时器器
定时器(Timer)用于操作之间设置等待时间,等待时间是性能测试中常用的控制客户端QPS的手段。类似于 LoadRunner⾥面的“思考时间”。 JMeter 定义了Bean Shell Timer、Constant Throughput Timer、固定时器等不同类型的Timer。
逻辑控制器器
要了解具体的各种逻辑控制器可以参考链接逻辑控制器。
逻辑控制器器,包括两类元件,一类是用于控制test plan 中 sampler 节点发送请求的逻辑顺序的控制器,常⽤的有如果(If)控制器、switch Controller 、Runtime Controller、循环控制器等。另一类是用来组织可控制 sampler 来节点的,如事务控制器、吞吐量控制器。
例如循环控制器(Loop Controller):
注:该控制器器下的取样器器可以循环运⾏。
参数说明:
循环次数(Loop Count):在输⼊入框中输⼊入需要循环的次数,控制器器下的请求即可循环运⾏行行。
永远(forever):如果勾选该项,那么控制器器下的请求可一直运⾏。
全局变量的使⽤
详细全部变量的设定可以参考链接全局变量设置, 这个全局变量比较多,我就举一个服务器全局变量的例子,其他同理理:
建立一个server.cvs⽂件内容如下,可根据具体情况自行更改或添加(A站环境):
http://sapp. xxxx.com
【File】->Open 打开你“xxxx.jmx”⽂文件,选择服务器参数,按如下图操作导入:
循环次数(Loop Count):在输入框中输入需要循环的次数,控制器下的请求即可循环运⾏。
永远(forever):如果勾选该项,那么控制器下的请求可一直运⾏。
配置HTTP请求头
配置请求头可参照下图,具体参数视情况而定,请求头数详解可参考链接HTTP Header 详解:
建⽴立HTTP请求:
例如登录接口配置如下:
Jmeter调⽤用外部Jar包
1)⾸先要准备要使用的jar包,把jar包放到jmeter⽬录下,建议新建第三方jar包目录。
第三方jar包目录需要修改jmeter配置文件jmeter.properties,搜索 plugin_dependency_paths,在下面添加 jar包目录名称即可。
#plugin_dependency_paths=../dependencies/lib;../app1/;../app2/
plugin_dependency_paths=../dependencies;
2)在测试计划中导入jar包,具体细节可参考:https://blog.csdn.net/dhq_blog/article/details/80430781
3)⽤正则匹配获取相应返回的值关于正则表达式提取器的具体说明,可参考正则表达式提取器
例如获取登录返回码:
为了对一些有条件的接口进⾏批量测试,有时需要设置特定的条件和顺序,例如大部分接⼝是登录之后才有相应的操作,这个时候我们就可以利用if-controller的特性来操作:
此时与获取的登录的返回码比较,若匹配则说明登录成功,便可在if-controller下添加需登录后才可以操作的接⼝了
断⾔
详细的断言可以参考链接断言。
断言用于检查测试中得到的相应数据等是否符合预期,断⾔一般用来设置检查点,用以保证性能测试过程中的 数据交互是否与预期一致。
断⾔匹配类型如下:
注:正常响应请求情况下不不需要勾上Ignore Status。
参数说明:
Text Response:从服务器返回的响应⽂文本。不包括 HTTP Header。
Response Code:响应码。比如 200。
Response Message:响应信息。比如 OK。
Pattern Matching Rules:匹配规则。
Contains:上面选中的部分包含下面的正则表达式就算Pass。
Matches:上面选中的整个部分匹配下面的正则表达式就算Pass。
Equals:上面选中的整个部分和下面的字符串相等就算Pass,不支持正则表达式,同时对⼤小写敏敏感。
Substring:上⾯选中的部分包含下面的字符串就算Pass,不支持正则表达式,同时对⼤小写敏敏感。
Not:勾选上之后,会对前⾯选择的进⾏反转。比如Matches + Not 就是不匹配就算Pass。
jmeter之http请求如何上传文件
下⾯一张图片介绍了如何实现文件的上传。
注意:MIME类型填入:application/octet-stream,勾上"Use multipart/form-data"(⽤于上传文件), implementation选择”java“。
jmeter之http请求上传excel⽂文件
注意:MIME类型填入:application/vnd.ms-excel,还有就是勾上“Use multipart/form-data"和”Browser- compatible headers“,implementation选择"HttpClient4"。
查看结果
注意:可以看到显示红色的X的是没有通过的案例,同时点开有Response Assertion,点击Response Assertion可以看到具体内容。
注意:显示绿⾊√是通过的,在Sampler result监听⾥面,可以看到所有的监听情况,在Response data中可以看到具体的返回值及验证数据的正确性。
Summary Report(表格形式显示)
Summary Report以表格的形式显示取样器结果,同时也提供存储取样器结果的功能,并可配置存储哪些结果属性。
如果不同取样器(不同请求)具有相同的名字,那么在Summary Report中会统计到同⼀行,所以在取样器取别名时最好不要为空,建议按业务功能来取名。
参数说明:
Label:取样器别名(或者说是事务名)。
Samples:取样器运⾏次数。
Average:请求(事务)的平均响应时间。
Min:请求的最⼩响应时间。
Max:请求的最⼤响应时间。
Std.Dev:响应时间的标准偏差。
Error%:事务错误率。
Throughput:吞吐率,即常说的TPS。
KB/sec:每秒事务流量,单位KB。
Avg.Bytes:响应平均流量,单位Byte。
TOTAL:把多个取样器按结果公式(简单相加再平均)处理后的结果。
计算公式
吞吐量 = 样本总数 / (当前HTTP请求对应最后一个样本处理完成时间 - 当前HTTP请求对应第一个样本的起始时间
KB/sec = HTTP请求总响应数据⼤小 / (当前HTTP请求对应最后一个样本处理完成时间 - 当前HTTP请求对应第一个样本的起始时间)
推荐阅读