性能接口工具之Jmeter
一、Jmeter下载安装以及环境变量配置(本文仅介绍windows环境):
前提:基于Java环境已安装且配置好Java环境变量(此处就不介绍了)
1、进入Jmeter官网下载界面:http://jmeter.apache.org/download_jmeter.cgi
2、点击下载Jmeter的zip格式压缩包包(如果是linux则下载tgz压缩包)
压缩包解压到指定Jmeter使用目录,如我解压的目录为D:\apache-jmeter-5.1.1【备注说明:下载Jmeter与jdk版本要想匹配,本人使用的jdk版本为1.8,Jmeter版本为5.1.1】
3、环境变量配置:
右击电脑属性:
选择高级系统配置:
选择环境变量,并在系统变量中新建JMETER_HOME变量确定并保存:
在进入系统变量中的path变量:新建添加变量后确定并保存。
4、验证是否安装成功:
方法(1)、进入安装文件目录下的bin目录:双击打开jmeter.bat文件,观察是否启动
方法(2)、win +R ,在dos命令窗口输入jmeter,观察是否启动如下图(此方法在环境变量配置好之后才可运行)。启动后不可关闭dos窗口,否则直接退出jmeter界面。
二、Jmeter使用((Jmeter使用以及使用经验可进入Jmeter中文网察看:http://www.jmeter.com.cn/category/jmeter-book))
1、界面语言选择如下图(此部分针对新上手Jmeter群体操作更容易上手且更容易理解):
2、常用Http配置元件描述:
Test Plan的配置元件中有一些和HTTP属性相关的元件:HTTP Cache Manager(缓存管理器)、HTTP Authorization Manager(授权管理)、HTTP Cookie Manager(Cookie管理器)、HTTP Header Manager(信息头管理器)、HTTP Request Defaults(请求默认)等,这些是什么呢?
JMeter不是浏览器,因此其行为并不和浏览器完全一致。这些JMeter提供的HTTP属性管理器用于尽可能模拟浏览器的行为,在HTTP协议层上定制发送给被测应用的HTTP请求。
(1)HTTP Request Defaults
该属性管理器用于设置其作用范围内的所有HTTP的默认值,可被设置的内容包括HTTP请求的host、端口、协议等。
一个Test Plan中可以有多个HTTP Request Defaults,处于多个HTTP Request Defaults作用域内的Sampler使用HTTP Request Defaults中设置值的叠加值。
事例:
HTTP Request Defaults1:Server Name or IP: www.baidu.com,一个参数:aaa=111
HTTP Request Defaults2:Server Name or IP: www.qq.com,两个参数:bbb=222,aaa=333
运行结果:
总结:
1、一个测试计划中可以有多个Defaults组件,多个Defaults组件的默认值会叠加,如上图,虽然两个Defaults 组件都定义了参数aaa,但发出的请求还是会叠加起来。
2、两个default中都定义的"Server Name or IP",显示在发送请求时只能使用一个,这里使用的是第一个default定义的值www.baidu.com
(2)HTTP Authorization Manager
该属性管理器用于设置自动对一些需要NTLM验证的页面进行认证和登录。如下图:监控tomcat
(3)HTTP Cache Manager
该属性管理器用于模拟浏览器的Cache行为。为Test Plan增加该属性管理器后,Test Plan运行过程中会使用Last-Modified、ETag和Expired等决定是否从Cache中获取相应的元素。
注意:如果Test Plan中的某个Sampler请求的元素是被Cache的元素,则Test Plan在运行过程中会直接从Cache中读取该元素,这样Sampler得到的返回值就会是空。在这种情况下,如果为该Sampler设置了Assertion检查响应体中的制定内容是否存在,该Assertion就会失败。
(4)HTTP Cookie Manager
该属性管理器用于管理Test Plan运行时的所有Cookie。HTTP Cookie Manager可以自动储存服务器发送给客户端的所有Cookie,并在发送请求时附加上合适的Cookie.
同时,用户也可以在HTTP Cookie Manager中手工添加一些Cookie,这些被手工添加的Cookie会在发送请求时被自动附加到请求。
注意:
如果在一个测试计划内有多个Cookie Manager ,Jmeter目前无法指定哪个被使用。所以,一个测试计划内最好只有一个cookie manager。并且,一个manager里的 cookie 并不能被其它manager所引用。所以在使用多个Cookie Managers 时要谨慎。
同理,上面这个规则同样适用于config element下面的其它manager:
如果选中"Clear cookies each iteration?"此项,意味着线程在每次迭代时清除自己会话中的所有Cookie.
(5)HTTP Header Manager
该属性管理器用于定制Sampler发出的HTTP请求的请求头的内容。不同的浏览器发出的HTTP请求具有不同的Agent,访问某些有防盗链的页面时需要正确的Refer...这些情况下都需要通过HTTP Header Manager来保证发送的HTTP请求是正确的。如下图:
3、创建一个简单的接口性能测试:
添加线程组
一个性能测试请求负载是基于一个线程组完成的。一个测试计划必须有一个线程组。测试计划添加线程组非常简单。在测试计划右键弹出下拉菜单(添加-->Threads(Users)--->线程组)中选择线程组即可。
jmeter中 每个测试计划至少需要包含一个线程组,当然也可以在一个计划中创建多个线程组,那么多个线程组之间又会怎样的顺序执行(串行还是并行)?在测试计划下面多个线程是并行执行的,也就是说这些线程组是同时被初始化并同时执行线程组下的Sampler的。
线程组主要包含三个参数:线程数、准备时长(Ramp-Up Period(in seconds))、循环次数。
线程数: 虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
准备时长: 设置的虚拟用户数需要多长时间全部启动。如果线程数为20 ,准备时长为10 ,那么需要10秒钟启动20个线程。也就是每秒钟启动2个线程。
循环次数: 每个线程发送请求的次数。如果线程数为20 ,循环次数为100 ,那么每个线程发送100次请求。总请求数为20*100=2000 。如果勾选了“永远”,那么所有线程会一直发送请求,直到选择停止运行脚本。
设置合理的线程数对于能否达到测试目标有决定性的影响。除了上面介绍的固定循环次数与永远外;也可以灵活的选择设定测试运行时间。勾选“调度器”,进行调度器配置。
- 设置:线程数为10,其它参数默认。
添加HTTP请求
添加完成线程组后,在线程组上右键菜单(添加--->Sampler--->HTTP请求)选择HTTP请求。对于jmeter来说,取样器(Sampler)是与服务器进行交互的单元。一个取样器通常进行三部分的工作: ``` 1、向服务器发送请求
2、记录服务器的响应数据
3、记录响应时间信息 ```
一个HTTP请求有着许多的配置参数,下面将详细介绍:
名称: 本属性用于标识一个取样器,建议使用一个有意义的名称。
注释: 对于测试没有任何作用,仅用户记录用户可读的注释信息。
服务器名称或IP : HTTP请求发送的目标服务器名称或IP地址。
端口号: 目标服务器的端口号,默认值为80 。
协议: 向目标服务器发送HTTP请求时的协议,可以是http或者是https ,默认值为http 。
方法: 发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等(路径为Get/Post等方法的请求路径)。
Content encoding : 内容的编码方式,默认值为iso8859
路径: 目标URL路径(不包括服务器地址和端口)
自动重定向: 如果选中该选项,当发送HTTP请求后得到的响应是302/301时,JMeter 自动重定向到新的页面。
Use keep Alive : 当该选项被选中时,jmeter 和目标服务器之间使用 Keep-Alive方式进行HTTP通信,默认选中。
Use multipart/from-data for HTTP POST : 当发送HTTP POST 请求时,使用Use multipart/from-data方法发送,默认不选中。
- 在这里我们添加一个HTTP请求: http://www.testclass.net
添加监听器(Listener)【常用监听器:察看结果树、图形结果、聚合报告】
脚本的主要部分设置完成后,需要通过某种方式获得性能测试中的测试结果,在本例中,我们关心的是请求的响应时间。
Jmeter 中使用监听器元件收集取样器记录的数据并以可视化的方式来呈现。Jmeter有各种不同的监听器类型,因为上面添加的为HTTP请求,这里添加聚合报告,更为直观的查看测试结果。
添加聚合报告,右键点击线程组,在弹的菜单(添加--->监听器--->聚合报告)中选择聚合报告。
点击工具栏上的 绿色运行按钮
或者通过菜单栏(运行--->启动)来运行测试。
查看 "聚合报告" 的运行结果:
Label: 请求的名称,就是我们在进行测试的httprequest sampler的名称
Samples: 总共发给服务器的请求数量
Average: 单个请求的平均响应时间,单位是毫秒
Median: 50%的请求的响应时间
90%Line: 90%的请求的响应时间
95%Line: 95%的请求的响应时间
99%Line: 99%的请求的响应时间
Min: 最小的响应时间
Max: 最大的响应时间
Error%: 错误率=错误的请求的数量/请求的总数
Throughput: 吞吐量即表示每秒完成的请求数
Received KB/sec: 每秒从服务器端接收到的数据量
Sent KB/Sec: 每秒从发送到服务器端的数据量
到此,一个简单的性能测试完成了