Jmeter(九) – 从入门到精通 – JMeter逻辑控制器 – 上篇(详解教程)

1.简介

Jmeter官网对逻辑控制器的注释是:“Logic Controllers determine the order in which Samplers are processed.”。

意思是说,逻辑控制器可以控制采样器(samplers)的执行顺序。由此可知,控制器需要和采样器一起使用,否则控制器就没有什么意义了。放在控制器下面的所有的采样器都市当做一个整体,执行时也会一起被执行。

JMeter逻辑控制器可以对元件的执行逻辑举行控制,除仅一次控制器外,其他可以嵌套其余种类的逻辑控制器。

2.逻辑控制器分类

JMeter中的Logic Controller分为两类:
(1)控制测试设计执行历程中节点的逻辑执行顺序,如:Loop Controller、If Controller等;
(2)对测试设计中的剧本举行分组、利便JMeter统计执行效果以及举行剧本的运行时控制等,如:Throughput Controller、Transaction Controller。

3.预览逻辑控制器家族

首先我们来看一下JMeter的逻辑控制器,路径:线程组(用户)->添加->逻辑控制器(Logic Controller);我们可以清晰地看到JMeter5中共有17个逻辑控制器,如下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

若是上图您看得不是很清晰的话,宏哥总结了一个头脑导图,关于JMeter5的逻辑控制器类型,如下图所示: 

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

 通过以上的领会,我们对逻辑控制器有了一个大致的领会和熟悉。下面宏哥就给小伙伴或则童鞋们分享解说一些通常在事情中会用到的逻辑控制器。 

4.常用逻辑控制器详解

  这一小节,宏哥就由上而下地详细地解说一下常用的逻辑控制器。由于时间关系,宏哥将这部门分为上、中、下三个部门解说。

4.1if Controller

在现实事情中,当使用Jmeter举行接口测试或者性能测试时,有时需要凭据差别条件做差别的操作,为领会决这个问题,Jmeter提供了IF控制器。顾名思义,IF控制器实现了代码中IF的功效,通过判断表达式的True/False来判断是否执行响应的操作。通过条件判断下边的节点执行不执行。

1、我们先来看看这个if Controller长得是啥样子,路径:线程组 > 添加 > 逻辑控制器 > 若是 (if) 控制器,如下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

2、要害参数说明如下:

Name:名称,可以随意设置,甚至为空;

Comments:注释,可随意设置,可以为空。

Expression (must evaluate to true or false) :表达式(值必须是true或false),也就是说,在右边文本框中输入的条件值必须是true 或 false,(默认情况下)

Interpret Condition as Variable Expression?:默认勾选项,将条件注释为变量表达式(需要使用__jexl3 or __groovy 表达式)

Evaluate for all children?:条件作用于每个子项(详细明白宏哥会在后边实战篇枚举例子说明),判断条件是否针对所有子节点,默认不勾选,只在if Controller的入口处判断一次。

注重:敲黑板!!!敲脑壳啦!!!

1、文本框上的黄色感叹号,就是提醒你,建议接纳__jexl3 or __groovy 表达式,以提高性能,也就是默认的方式。

2、if 控制器 只能作用于其下的子项

4.1.1默认用法

1、默认用法,就是接纳__jexl3 or __groovy 表达式if 控制器下有一个 接见北京宏哥的博客园首页的取样器,只有if条件知足时,才会执行该取样器。接纳默认方式,将条件’北京宏哥’==’北京宏哥’,放入 __jexl3表达式中。如下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

 2、若是不知道表达式若何使用,可使用Jmeter 的函数助手,函数助手图标 > 选择_jexl3 > 在值的输入框输入’北京宏哥’==’北京宏哥’  > 点击‘天生’ > 全选Ctrl+C复制 > Ctrl+V粘贴到表达式处 如下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

3、设置好以后,运行JMeter,选择HTML,然后查看效果树,如下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

4.1.2直接输入条件

1、直接输入只需要去掉 “Interpret Condition as Variable Expression?” 前面复选框,直接输入条件: ‘北京宏哥’==’北京宏哥’ 。接见北京宏哥的博客园的首页的取样器将被执行。如下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

2、设置好以后,运行JMeter,选择HTML,然后查看效果树,如下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

4.13条件中使用变量

我们在一样平常事情中在许多的测试场景下,需要凭据用户变量或者上一个取样器的返回值来举行条件判断,从而决议是否需要执行某一个的取样器。

1、首先我们新增一个用户变量:北京宏哥。条件:北京宏哥 的值为 宏哥 的时刻,才执行接见北京宏哥博客园的首页的取样器。如下图所示:

用户变量及设置,如下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

2、IF Controller及设置,或者可以用表达式:${__jexl3(‘${北京宏哥}’==’宏哥’ ,)}。如下图所示: 

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

4.1.4Evaluate for all children? 的用法

1、宏哥在上面的小节中解说和分享了在条件中若何使用变量,我们假设一种测试场景:若是 if 控制器下的取样器执行后,改变了该变量的值,if 控制器下 厥后的取样器还会被继续执行吗?追随宏哥一起来看看下面的列子:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

2、改变“北京宏哥”变量的值为“北京宏哥”,如下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

3、JMeter执行历程的逻辑剖析:

(1) if 控制器下 有 3 个取样器,变量 北京宏哥 的初始值为 宏哥,if 控制器的条件为:${__jexl3(“${北京宏哥}”==”宏哥”,)}

(2)最先执行的时刻知足条件,那么按理说应该执行 接见博客园首页接见北京宏哥的博客园首页接见宏哥的JMeter系列文章 3个取样器,

(3)然则 接见北京宏哥的博客园首页 执行后,将 北京宏哥 的值变了 北京宏哥,已经不能知足 “${北京宏哥}”==”宏哥” 条件。

(4)以是 接见宏哥的JMeter系列文章 这个取样器不会被执行。

4、运行JMeter,查看效果树,对比运行效果和宏哥剖析的一致,如下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

5、若是这个时刻,去掉  Evaluate for all children? 的勾选,会发生什么呢,人人可以自己着手试试。修改后记得点击“保留”。下边是宏哥的执行效果,如下下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

另外,若是时字符串必须要用引号,变量都认为是字符串的形式,如:${__jexl3(“${北京宏哥}”==”宏哥”,)}。

4.2Transaction Controller

  事务响应时间是我们权衡营业性能的主要指标,事务控制器可以把其他节点下的取样器执行消耗时间累加在一起,便于统计。同时对每一个取样器的执行时间举行统计。
  若是事务控制器下的取样器有多个,只有当所有的取样器都运行乐成,整个事务控制器界说的事物才算乐成。
  用于将Test Plan中的特定部门组织成一个Transaction,JMeter中Transaction的作用在于,可以针对Transaction统计其响应时间、吞吐量等。比如说,一个用户操作可能需要多个Sampler来模拟,此时使用Transaction Controller,可以更准确地获得该用户操作的性能指标,如响应时间等。这个时间包罗该控制器范围内的所有处置时间,而不仅仅是采样器的。

这个就异常有用了。我们前面有提到过事务的观点,有时刻我们不体贴单个请求的响应时间,而是体贴一组相关请求的整体响应时间,怎么来统计呢?就需要借助事务这个观点,把这组请求,放到一个事务控制器下面。

1、我们先来看看这个Transaction Controller长得是啥样子,路径:线程组 > 添加 > 逻辑控制器 > 事务控制器,如下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

2、要害参数说明如下:

Name:名称,可以随意设置,甚至为空;

Comments:注释,可随意设置,可以为空;

generate parent sample:选择是否天生一个父取样器;

include duration of timer and pre-post processors in generated samle:是否包罗定时器,选择将在取样器前与后加上延时。(宏哥建议人人不要勾选,否则统计就对照麻烦了,还需要你扣除延时)

4.2.1generate parent sample用法

1、宏哥枚举一个测试场景:我们需要领会 接见博客园首页  接见北京宏哥的博客园首页这两个请求的单个请求的响应时间,那么就来看看如下实例。

(1)单个请求,那么不勾选generate parent sample,如下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

2、运行JMeter,查看聚合讲述的单个请求的响应时间,如下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

【大厂面试07期】说一说你对synchronized锁的理解?

1、宏哥枚举一个测试场景:我们需要领会 接见博客园首页  接见北京宏哥的博客园首页这两个请求作为一组请求的响应时间,那么就来看看如下实例。

(1)一组请求,那么勾选generate parent sample,如下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

2、运行JMeter,查看聚合讲述的一组请求的响应时间,如下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

4.3Loop Controller

循环控制器可以控制在其节点下的元件的执行次数,可以是详细数字,也可以是变量。

1、我们先来看看这个Loop Controller长得是啥样子,默认循环一次。路径:线程组 > 添加 > 逻辑控制器 > 循环控制器,如下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

2、要害参数说明如下:

Name:名称,可以随意设置,甚至为空;

Comments:注释,可随意设置,可以为空;

Forever:勾选上这一项示意一直循环下去。

注重:敲黑板,敲脑壳!!! 

若是同时设置了线程组的循环次数和循环控制器的循环次数,那循环控制器的子节点运行的次数为两个数值相乘的效果。

4.3.1Thread Group和循环控制器的区别

1、现在宏哥准备两个请求,设置线程组1个线程,5次loop,下边有一个请求:接见北京宏哥的博客园首页  一个Loop Controller(设置2次loop),下边有一个请求:接见博客园首页  

(1)线程组,如下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

(2)循环控制器,如下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

 

2、运行JMeter,查看效果树,为了清晰地看出效果,宏哥将第一个请求有意设置成失败的;如下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

从上边的效果可以看出:

(1)若是同时设置了线程组的循环次数和循环控制器的循环次数,那循环控制器的子节点运行的次数为两个数值相乘的效果。

(2)运行顺序是:先执行线程组里的循环,再执行循环控制器里的循环。

4.4While Controller

While条件控制器,其节点下的元件将一直运行直到While 条件为false。

1、我们先来看看这个While Controller长得是啥样子,默认循环一次。路径:线程组 > 添加 > 逻辑控制器 > While控制器,如下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

2、要害参数说明如下:

Name:名称,可以随意设置,甚至为空;

Comments:注释,可随意设置,可以为空;

Condition:接受变量表达式与变量。条件为 Flase 的时刻,才会跳出 While 循环,否则一直执行 While 控制器下的元件。

3、While控制器提供三个常量

(1)Blank:当循环中最后一个取样器失败后住手

(2)LAST:当循换前有取样器失败,不进入循环

(3)Otherwise:当判断条件为false时,住手循环

4.4.1Blank

1、不填(空):当 While 控制器下最后一个样例执行失败后 跳出循环,如下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

2、运行JMeter,查看效果树,(你可以通过鼠标拖动最后失败的取样器,移动到第一个或者第二个位置的时刻,运行JMeter后,会发现在一直运行);如下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

4.4.2LAST

LAST :当 While 控制器下最后一个样例执行失败后 跳出循环,若是 While 控制器 前一个样例执行失败,则不会进入While循环,也就是不会执行While控制器下的样例。

1、取样器树照样上边的位置和顺序。这次我们在While控制器表达式处填写:LAST,如下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

2、运行JMeter,查看效果树,(你可以通过鼠标拖动最后失败的取样器,移动到第一个或者第二个位置的时刻,运行JMeter后,会发现在一直运行);仔细的你可以发现循环只跑一遍,与不填 的效果是一样的如下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

3、然则输入LAST的时刻,还会泛起一个效果,那就是:若是While 控制器 的前一个样例执行失败,则不会进入While 控制器

在While 控制器 前面 添加两个取样器:取样器1 接见百度,取样器2 接见北京宏哥 使取样器2 接见北京宏哥 执行失败。取样器2必须在While控制器前边且执行失败。如下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

 4、运行JMeter,查看效果树,执行效果发现,取样器1、取样器2 执行了,但没有进入While 控制器,如下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

4.4.3Otherwise

自界说条件:值为True 或 False的函数/变量/属性 表达式;类似前边解说的IF控制器,宏哥这里就照猫画虎的举个例子。

1、用户自界说变量,变量名:北京宏哥,变量值:true,如下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

2、While控制器设置,取到变量的值:${北京宏哥},填写到表达式的地方,如下图所示: 

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

3、JMeter执行历程的逻辑剖析:

(1)北京宏哥用户(线程组)下 有 1 个用户自界说变量,变量 北京宏哥 的值为 true,While控制器的条件为:${北京宏哥} 取到的值始终是 true

(2)以是一旦最先执行始终知足条件,那么按理说就应该一直执行 接见博客园首页 、接见北京宏哥的博客园首页接见宏哥的JMeter系列文章 3个取样器,

4、运行JMeter,查看效果树,(运行JMeter后,会发现在一直运行),对比一下,与宏哥的剖析是不是高度一致哈;如下图所示:

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

5.小结

 好了,今天关于逻辑控制器的上篇就解说到这里,这一篇主要先容了 IF控制器Transaction ControllerLoop ControllerWhile控制器

 

您的一定就是我提高的动力。若是你感受还不错,就请激励一下吧!记得随手点波  推荐  不要遗忘哦!!!

别忘了点 推荐 留下您来过的痕迹

 

Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)

原创文章,作者:28x29新闻网,如若转载,请注明出处:https://www.28x29.com/archives/15291.html