JMeter元件作用域实践指南

从一个问题说起

对于以下测试脚本:

JMeter元件作用域实践指南

为了能调用进入房间接口,需要从考场接口获取考场token。为了调用考场接口,需要从登陆接口获取登陆token。元件说明如下:

学生登录,提取登录${token}传入下个接口参数。

添加HTTP Header Manager:

JMeter元件作用域实践指南

考场token,提取考场${exam_token}传入下个接口参数。

添加HTTP Header Manager:

image-20201102153752646

进入房间

貌似挺合理,HTTP Header Manager会给下方的接口添加请求头,运行结果真的如我们所料么?

运行顺序

在回答这个问题之前,有必要搞懂JMeter元件的运行顺序,它是由2 个维度来决定的:从上往下和元件类型。

从上往下,即目录树从上往下。元件类型,分为3类:

线程组、逻辑控制器。

取样器。

配置元件、前置处理器、定时器、后置处理器、断言、监听器。

它们的运行顺序如下:

配置元件(如果存在)

前置处理器(如果存在)

定时器(如果存在)

取样器(如果存在)

后置处理器(如果存在且取样器的结果不为空)

断言(如果存在且取样器的结果不为空)

监听器(如果存在且取样器的结果不为空)

换句话说,假设我们新建了1个线程,想用这个线程去发请求。

第一步,初始化配置,比如参数化、设置Header、Cookie等,用到配置元件。

第二步,可能需要给线程加点参数,比如用户参数,用到前置处理器。

第三步,在发送请求前可能会等待一段时间,用到定时器。

第四步,发送请求,用到取样器。

第五步,可能需要提取响应数据,比如正则表达式提取器、JMESPath提取器,用到后置处理器。

第六步,验证结果符合预期,用到断言。

第七步,查看请求响应数据和测试结果,用到监听器。

实践指南

对于以下所列元件:

image-20201102110655732

JMeter会按以下步骤运行:

线程组(如果有多个线程组可以在测试计划设置是顺序执行还是同时执行)

简单控制器(父节点)

HTTP Cookie管理器(配置元件)

用户参数(前置处理器)

Synchronizing Timer(定时器)

HTTP 请求1(取样器)

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

响应断言(断言)

HTTP Cookie管理器(配置元件)

用户参数(前置处理器)

Synchronizing Timer(定时器)

HTTP 请求2(取样器)

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

响应断言(断言)

HTTP 请求3(取样器)

察看结果树(严格来讲是与第 6 步并行,也就是取样器之后)

作用域

其中有个观察作用域实际效果的关键元件:HTTP请求2,它的前后并没有元件,但是也被作用上了。在JMeter中,同一层级的元件具有相同的作用域!

简单控制器是一个执行单元,本身没有内容,它的作用是把元件进行分组:

image-20201102114047379

因为简单控制器通过分组给元件划分了层级,所以简单控制器下面的这些同层级元件,作用域相同,既会作用于 HTTP请求1,也会作用于HTTP请求2。注意了!配置元件、前置处理器、定时器、后置处理器、断言、监听器,这六个组件,会作用到范围内的所有取样器。

除了同级作用域,还有上下级,JMeter的上级作用域包含下级作用域,但是下级是不能作用到上级。比如HTTP请求3,简单控制器下级的元件,是不会作用到HTTP请求3的。

回答开头的问题

image-20201102153442568

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpsxff.html