Jmeter的主要元件及元件的执行顺序
一、JMeter的主要元素
1.Test Pan(测试计划)
Jmeter中的测试计划包括一个或者一组的测试用例,一个Thread Group可以认为是一个测试用例,一个测试计划中可以包括多个Thread Group,即多个测试用例。
在测试计划中可以为该测试计划下的重复的值设置静态变量,例如URL地址,www.baidu.com,可以把该值设置为变量,在使用的地方只需要将其替换为${URL},这样为后续更换为其他url提供了便利,不建议在此处设置变量,因为不方便停用,可以直接选择Config Element下的User Defined Variables,增加用户自定义变量。
Run Thread Groups consecutively:独立运行每个线程组,勾选之后,则按顺序执行测试计划中的每个线程组,否则测试计划中的线程组是交替执行的。
Run TearDown Thread Groups after shutdown of main threads:在主线程组运行完之后运行TearDown线程组。
Functional Test Mode:函数测试模式,将请求的响应保存到文件中,很影响性能,一般不勾选。
2.Thread(Users)(线程)
Thread Group:
线程组,对特定服务器执行测试的用户池,可以设置并发的用户数,加速时间(启动所有线程所需的时间),执行测试的次数,可以把线程组理解为用户组,每个线程为一个虚拟用户。
setUp Thread Group:
一种特殊类型的线程组,用来在执行普通的线程组之前执行的预处理,和普通的线程组元素完全相同,只是该线程组在每个普通线程组之前执行。
tearDown Thread Group:
一种特殊类型的线程组,用来在执行普通的线程组之后执行,和普通的线程组元素完全相同,只是该线程组在普通的线程组执行后执行。
说明:线程组中设置了循环次数和持续执行时间,则JMeter运行达到持续时间后结束;如果只是设置了循环次数,没有设置循环时间,则JMeter会一直循环运行。
3.Test Fragment(测试片段)
Test Fragment是一种特殊的线程组,在测试树中与线程组处于同一等级,Test Fragment不会执行,需要配合Including Controller和module Controller一起使用,Test Fragment的作用是模块化了,类似于程序语言的函数,可以方便重复调用。
1)使用Including Controller
新增加测试计划,然后新增加Test Fragment,在该线程组下新增加Http Request,模拟登陆百度。
然后新增加测试计划,新增加Thread Group,在该线程组下增加Including Controller,引入上一步新增加的代码片段,这样就可以很方便的引用了。
2)使用Module Controller
新增加测试计划,新增加一个Thread Group,然后在同级新增加一个Test Fragment,在Test Fragment中新增加Http Request,命名为登录百度,在Thread Group线程组中新增加Module Controller,在Module To Run中选择Test Fragment,选中会高亮显示,然后运行测试。
4.Sampler(采样器)
采样器完成Jmeter的实际工作,发送请求,接收响应,记录结果,可以在Listener(监听器)中查看结果,这里以Http Request为例介绍在实际使用JMeter进行测试的过程中的方法。
添加HTTP Request采样器,用来发送实际的请求。
Name:取样器的名称。
Protocol:发送请求使用的协议,默认使用http。
Server Name or IP:服务器的域名或者IP地址,如:www.baidu.com或者192.168.11.2这样,这个是必须维护的,除非在HTTP Request Defaults进行设置或者在Path中设置了完整的URL。
Post Number:访问请求使用的端口号。
Method:请求使用的方法,POST,PUT,GET,PATCH等。
Path:资源的路径,如果资源需要查询字符串参数,可以在Parameters中添加,如果资源路径是以http开头,则JMeter会当做完整的URL地址。
Content encoding:发送的内容的编码方式。
Redirect Automatically:自动重定向,只能针对GET和HEAD方法,在View Results Tree中只能看到重定向后的响应,不能看到重定向之前的响应,因此不能用来进行关联。
Follow Redirects:跟随重定向,跟随重定向可以自动重定向到目标页面,在View Results Tree中即可以看到重定向前的相应,也可以看到重定向后的响应,可以用来进行关联。
Use KeepAlive:JMeter和目标服务器之间使用KeepAlive进行通信。
Use multipart/form-data:上传文件时使用,用以模拟往服务器发送二进制数据。
Browser-compatible headers:浏览器兼容模式,如果勾选了Use multipart/form-data时建议勾选此项。
Parameters:当使用get或者post方法时,url带的参数,如xxx=xx&xxx=xxx。
Body Data:传递请求实体参数,如果需要传递json格式的参数,需要在HTTP Header Manager中添加Content-Type=application/json。
Files Upload:当勾选Use multipart/form-data进行文件上传时,可以在此处添加需要上传的文件。
Retrieve All Embedded Resources:获取所有内嵌资源,在实际的性能测试过程中,需要勾选此项,因为这样,更能模拟实际的场景。
Parallel downloads Number:设置并发获取数量。
URLs must match:使用正则表达式设置需要获取的URL。
Timeouts:用来指定超时时间,Connect,连接超时时间,Response:响应超时时间。
Implementation:使我们可以更高效的访问HTTP协议的资源,推荐使用HttpClient4,不选默认为HttpClient4。
5.Logic Controller(逻辑控制器)
逻辑控制器用来控制取样器的执行顺序,仅对其子节点取样器起作用,这里以If Controller控制器为例。
6.Listener(监听器)
监听器主要用来展示测试结果,常用的有查看结果树,聚合报告等。
7.Config Element(配置元件)
配置元件可以设置默认值和变量以供采样器使用。
说明:配置元件中以Manager结尾的元件,同一个作用域内只能使用一个,因为多个的话,JMeter会产生混乱,而以DEFAULT结尾的元件,同一个作用域内可以使用多个,JMeter会对多个元件进行叠加。
8.Time(定时器)
定时器在每个采样器之前执行,可以用来模拟实际中用户每个操作之前的间隔时间。
9.Assertion(断言)
断言用来对其作用域的采样器进行检查,当采样器执行完之后进行检查,为了实现每个断言只对一个采样器生效,可以把断言设置为采样器的子级。
10.Pre Processor(前置处理器)
前置处理器用来处理请求前的一些准备工作,如参数设置,环境变量设置等。
11.Post Processor(后置处理器)
后置处理器用来处理响应返回的数据,一般用来提取响应返回的特定数据,如果一个后置处理器为一个采样器的子节点,则该处理器只对该采样器作用,实际中使用最多的是正则表达式处理器。
二、JMeter的执行顺序
1.Config Elements
2.Pre Processor
3.Time
4.Sampler
5.Post Processor
6.Assertion
7.Listener
三、JMeter元件的作用域
Sampler不与其他元件交互,因此不存在作用域的问题,Controller只对其子节点的采样器和逻辑控制器其作用;除了Sampler和Controller,其他6类如果在Sampler子节点,则只对该Sampler和该Sampler子节点起作用;如果其他6类的父节点不是采样器,则他们的作用域是父节点下所有子节点包括子子节点。
如上:Simple Controller对Two,Three和Four起作用,Timer #1对Two,Three和Four起作用,Assertion #1只对Three起作用,Timer #2对所有的Sampler起作用。
执行顺序为Timer #2--One--Timer #2--Timer #1--Two--Timer #2--Timer #1--Three--Assertion #1--Timer #2--Timer #1--Four--Timer #2--Five。
- 前置处理器、后置处理器和断言等元件对取样器作用,因此,如果它们的作用域没有任何取样器,则不会被执行。
- 如果在同一作用域范围内有多个同一类型的元件,则这些元件按照它们在测试计划中的上下顺序依次执行。
说明:User Defined Variables的作用域为整个测试计划,所以无论它定义在何处,结果都是一样的。