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会一直循环运行。

Thread Group(线程组)

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。

采样器----Debug Sampler

 5.Logic Controller(逻辑控制器)

逻辑控制器用来控制取样器的执行顺序,仅对其子节点取样器起作用,这里以If Controller控制器为例。

Logic Controller(逻辑控制器)

6.Listener(监听器)

 监听器主要用来展示测试结果,常用的有查看结果树,聚合报告等。

7.Config Element(配置元件)

配置元件可以设置默认值和变量以供采样器使用。

JMeter HTTP Cookie Manager

说明:配置元件中以Manager结尾的元件,同一个作用域内只能使用一个,因为多个的话,JMeter会产生混乱,而以DEFAULT结尾的元件,同一个作用域内可以使用多个,JMeter会对多个元件进行叠加。

8.Time(定时器)

定时器在每个采样器之前执行,可以用来模拟实际中用户每个操作之前的间隔时间。

Timer(定时器)

9.Assertion(断言)

断言用来对其作用域的采样器进行检查,当采样器执行完之后进行检查,为了实现每个断言只对一个采样器生效,可以把断言设置为采样器的子级。

Response Assertion(响应断言)

JSON Assertion(JSON断言)

Duration Assertion(持续时间)

Size Assertion

Bean Shell

10.Pre Processor(前置处理器)

前置处理器用来处理请求前的一些准备工作,如参数设置,环境变量设置等。

11.Post Processor(后置处理器)

后置处理器用来处理响应返回的数据,一般用来提取响应返回的特定数据,如果一个后置处理器为一个采样器的子节点,则该处理器只对该采样器作用,实际中使用最多的是正则表达式处理器。

后置处理器----正则表达式提取器

后置处理器----JSON提取器

后置处理器----边界提取器

 二、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。

关于执行顺序,有2点需要注意:
  • 前置处理器、后置处理器和断言等元件对取样器作用,因此,如果它们的作用域没有任何取样器,则不会被执行。
  • 如果在同一作用域范围内有多个同一类型的元件,则这些元件按照它们在测试计划中的上下顺序依次执行。

说明:User Defined Variables的作用域为整个测试计划,所以无论它定义在何处,结果都是一样的。

posted @ 2019-01-14 17:14  博小园  阅读(1599)  评论(0编辑  收藏  举报
回到顶部