一、简介
Jmeter是性能,接口测试工具,开源,免费,使用简单,安装简便。
Jmeter适合测试使用公有协议(如http,JDBC等)服务,模块,适合B/S结构的后台性能系统。
Jmeter需要Java环境,有大量第三方插件,也可以比较方便的编写适合自己使用的插件。
二、基本概念
1、测试计划
Jmeter测试计划是一系列配置器,线程组,控制器,Sampler,断言,监听器,定时器组成的集合。
Jmeter的各种部件以树形目录结构在工程中被组织起来,根节点下属器件类型一般是,配置器,线程组,监听器。
Jmeter运行时会首先运行配置器,然后启动线程组,全部线程组中Simpler的执行结果会在配置器的监听器中出现。
虽然界面上可以在测试计划根节点上添加监听器,断言,但是绝大多数情况下,不需要在根节点配置这两类器件。
2、线程组Threads
线程组是一组器件,是一系列配置器,控制器,定时器,Simpler,断言和监听器的集合。
线程组的是线程数量,执行次数,启动时间都可以配置,线程启动会顺序执行下属的配置器,控制器,定时器,Simpler,断言和监听器,实现一系列包含测试逻辑的操作
线程组Thread Group参数
-Name Comments
Name:线程组名称,用在ui显示时区分不同的线程组,可以同名但尽量不要同名
Comments:线程组说明,注释
-Action to be take after sampler error
这一组配置项用于定义线程组内sampler发生error时,线程组的行为。
进行测试时一般选择Continue。
进行调试时一般选择Stop Test Now。
Continue:继续执行当前线程。
Start next Thread loop:结束当前线程,启动新的线程执行测试。
Stop Thread:停止当前线程,并且不再启动新的线程
Stop Test:停止整个测试
Stop Test Now:强制停止整个测试
Stop Test 和Stop Test Now的区别类似于kill和kill -9
-Thread Properites:
--Number of Thread(user):线程数量。几个线程模拟几个用户
--Ram-up Period(in seconds): 线程启动时间间隔。Jmeter会根据该配置,间隔启动线程。如10线程,延迟100s,则每10s启动一个线程
--Loop Count:每个线程执行次数。
--Delay Thread creation until needed:这个选项在Ram-up Period(in seconds)配置时生效,如果不选择,Jmeter会先创建全部实例,再逐个启动,如果选择,Jmeter会在上一个线程启动后,再创建下一个线程
3、采样器Sampler
可以理解为对被测目标的一次请求或调用。
Jmeter原生携带了很多常用的Sampler,HTTP,BSF,JSR223,JDBC等。
一般情况下,进行Web后端测试使用HTTP,BSF,JSR223是三个类型的Sampler加上对应的控制器已可以满足需要了,偶尔可能会用到JDBC,有些系统会使用Websocket等第三方插件
3.1、HTTP Reuqest Sample参数
用于发送HTTP请求并接收请求返回结果。
大部分选项对应HTTP协议参数。
如果同级或上级目录有HTTP Requests Defaults,不填写时会使用HTTP Requests Defaults的配置,填写后会覆盖HTTP Request Default的配置。
HTTP Sampler会校验请求的Response code,Response code!=200时HTTP Sample会认为请求失败,这里的返回码指的是HTTP协议定义的Response code,而不是response body中内容。
参数介绍
--name[名字],comment[注释]
--Web Server
配置服务器主机名,ip,端口,连接和相应超时时间
--HTTP Request
配置实现,路径,编码格式,请求参数
请求重定向行为一般使用默认即可,需要对HTTP的重定向有一定了解才能修改这项配置,如果重定向出现问题又不知道怎么配置找对应开发人员求助
如果服务器接收表单形式请求,选择Parameters,如果服务器接收Json,xml格式请求,在Body Data中填写
4、控制器Controller
4.1、Logic Contoller逻辑控制器
这一类器件用于控制线程组内部的采样器的执行逻辑。
以HTTP采样器为例,可以通过loop控制器定义某个或某几个采样器的执行次数,可以通过IF控制器定义某个采样器执行后,接下来执行哪个采样器。
逻辑控制器的作用和各种语言中的逻辑控制语句非常相似。
4.2、Simple Controller
用于打包一组Sampler,这样可以让线程组看起来简洁。
4.3、Loop Controller
循环执行下属的Sampler,循环次数可以配置为整数常量,也可以配置为变量
5、定时器Timer
Timer定时器,定时器一般只在线程组中被使用,作用实际上是让线程等待一段时间。Jmeter提供很多类型的定时器,可以根据自己需要选择合适的
6、断言Assertions
断言是一种条件判断器件,断言为真时,Jmeter认为采样器的执行结果为成功,反之亦然。
断言一般情况添加在采样器上,采样器执行完毕,Jmeter会调用采样器上的断言,根据断言中的配置或代码判断执行结果为成更还是失败。
以response assertion为例,选择包含,并填写字符串后,采样器返回包含字符串即为成功,反之为失败。
虽然HTTP Sampler会自动验证response code,但是很多时候需要对其返回内容进行验证,这时一般需要Assertion
HTTP测试常用断言为Resonse Assertion,Duratin Assertion【时间】, JR223Assertion有时也会用到,这个断言可以通过代码实现复杂的结果检查。
7、监听器Listener
监听器用于收集Jmeter的运行结果并展示给用户。
Jmeter提供的监听器绝大部分是用于性能统计的,能够获取请求详细信息的只有View Results Tree。统计类型的监听器最常使用的是Aggregate Graph。
监听器作用域:
-监听器在根目录时,监听全部Sampler
-监听器在线程组根目录时,监听线程组全部Sampler
-监听器在某个Sampler上,仅监听这个Sampler
7.1、查看结果树View Results Tree
监听Sampler的详细信息,常用于debug,实际进行性能负载测试一般会关闭这个监听器或选择仅监听失败的Sampler
参数说明:
-FileName
选项配置后可以存储到一个文件中
-Log/Display only
选项可以过滤成功或失败的请求
-左下方会列出执行的Samplers,选中Samplers,右下方会列出Sampler这次执行的详细信息,以HTTP Sampler为例
Sampler Result页签内会显示请求开始是时间,加载时间等以及HTTP请求的一些信息。如Header,response code
Request页签会显示请求的具体信息,包括请求类型,url,data和全部Header
7.2、聚合图表Aggregate Graph
参数说明:
-文件名:结果文件存储到磁盘路径与文件名,如保存为jtl,后续生成HTML报告
-仅日志错误:是否仅记录错误事务
-secess:记录成功事务
-configure:弹出配置窗口进行配置
-Label:请求别名
-Samples:执行了多少次取样
--Average:平均响应时间,单位毫秒
--Median:响应时间中间值
--90%line:90%事务响应时间
--Min:最小响应时间
--Max:最大响应时间
--Error:出错率
--Throught:吞吐量,TPS
8、配置元件Config Element参数
Jmeter中的配置元件主要用于管理Sampler的参数或变量.
点击选中配置器,然后点击Jmeter UI上的蓝色问号,可以查看配置器对应的文档.
一般情况下,HTTP相关配置元件添加于根目录,添加于根目录时,Test Plan的全部HTTP Sampler会使用根目录的配置。
如有特殊情况,可以在某个Thread Group或Sampler上添加配置元件,覆盖默认配置
HTTP测试常用的配置元件:
8.1、HTTP Request Defaults[默认参数]
一般配置在根节点上,整个Test Plan里面所有HTTP Sampler都会默认使用HTTP request defaults的配置
最常用的选项为服务器的IP,Port[端口],Implementation[指定使用哪个HTTP实现,一般选择HTTPClient4,Jmeter使用Apache HTTPClient4.x版本处理HTTP请求。
8.2、HTTP Header Manager[配置HTTP Sampler请求的Header]
对于Header没有特殊要求的HTTP接口,可以不添加。
该配置和接口定义有关,可以通过浏览器抓取请求来看,或者翻阅开发文档获取信息。
8.3、HTTP Cookie Manager[配置浏览器缓存]
配置HTTP Sampler使用的cookie,使用cookie的请求必须添加这个配置元件,不使用cookie的可以不添加
一般情况下,添加后使用默认配置即可,如默认配置和服务器端实现不同时,可以从开发人员处了解实现细节修改对应配置.