jmeter(8)-从精通到入门-逻辑控制器(上)
简介:
Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in which Samplers are processed.”。
意思是说,逻辑控制器可以控制采样器(samplers)的执行顺序。由此可知,控制器需要和采样器一起使用,否则控制器就没有什么意义了。放在控制器下面的所有的采样器都会当做一个整体,执行时也会一起被执行。
JMeter逻辑控制器可以对元件的执行逻辑进行控制,除仅一次控制器外,其他可以嵌套别的种类的逻辑控制器。
分两类,总共17个
JMeter中的Logic Controller分为两类:
(1)控制测试计划执行过程中节点的逻辑执行顺序,如:Loop Controller、If Controller等;
(2)对测试计划中的脚本进行分组、方便JMeter统计执行结果以及进行脚本的运行时控制等,如:Throughput Controller、Transaction Controller。
博主分析的例子很详细,可以执行试试每项功能的用途。
https://www.cnblogs.com/du-hong/p/13070573.html
我总结了一下我的理解:
4.1if controller
'北京宏哥'=='北京宏哥'
"${北京宏哥}"=="宏哥"
${__jexl3('北京宏哥'=='宏哥' ,)}
${__jexl3('${北京宏哥}'=='宏哥' ,)}
这里涉及表达式中引用用户变量的手法,前置处理器
4.2Transaction Controller
事务响应时间是我们衡量业务性能的主要指标,事务控制器可以把其他节点下的取样器执行消耗时间累加在一起,便于统计。同时对每一个取样器的执行时间进行统计。
如果事务控制器下的取样器有多个,只有当所有的取样器都运行成功,整个事务控制器定义的事物才算成功。
用于将Test Plan中的特定部分组织成一个Transaction,JMeter中Transaction的作用在于,可以针对Transaction统计其响应时间、吞吐量等。比如说,一个用户操作可能需要多个Sampler来模拟,此时使用Transaction Controller,可以更准确地得到该用户操作的性能指标,如响应时间等。这个时间包含该控制器范围内的所有处理时间,而不仅仅是采样器的。
generate parent sample:选择是否生成一个父取样器;
include duration of timer and pre-post processors in generated samle:是否包含定时器,选择将在取样器前与后加上延时。(宏哥建议大家不要勾选,否则统计就比较麻烦了,还需要你扣除延时)
没有勾选时候的聚合报告:
4.3loop controller
循环控制器可以控制在其节点下的元件的执行次数,可以是具体数字,也可以是变量。
注意:敲黑板,敲脑壳!!!
如果同时设置了线程组的循环次数和循环控制器的循环次数,那循环控制器的子节点运行的次数为两个数值相乘的结果。
4.4while contraller
While条件控制器,其节点下的元件将一直运行直到While 条件为false。
2、关键参数说明如下:
Name:名称,可以随意设置,甚至为空;
Comments:注释,可随意设置,可以为空;
Condition:接受变量表达式与变量。条件为 Flase 的时候,才会跳出 While 循环,否则一直执行 While 控制器下的元件。
3、While控制器提供三个常量(条件常量用法见下面的例子)
(1)Blank:当循环中最后一个取样器失败后停止
(2)LAST:当循换前有取样器失败,不进入循环
(3)Otherwise:当判断条件为false时,停止循环
4.4.1Blank
1、不填(空):当 While 控制器下最后一个样例执行失败后 跳出循环,如下图所示:
2、运行JMeter,查看结果树,(你可以通过鼠标拖动最后失败的取样器,移动到第一个或者第二个位置的时候,运行JMeter后,会发现在一直运行);如下图所示:
4.4.2LAST
LAST :当 While 控制器下最后一个样例执行失败后 跳出循环,如果 While 控制器 前一个样例执行失败,则不会进入While循环,也就是不会执行While控制器下的样例。
1、取样器树还是上边的位置和顺序。这次我们在While控制器表达式处填写:LAST,如下图所示:
2、运行JMeter,查看结果树,(你可以通过鼠标拖动最后失败的取样器,移动到第一个或者第二个位置的时候,运行JMeter后,会发现在一直运行);细心的你可以发现循环只跑一遍,与不填 的结果是一样的如下图所示:
3、但是输入LAST的时候,还会出现一个结果,那就是:如果While 控制器 的前一个样例执行失败,则不会进入While 控制器
在While 控制器 前面 添加两个取样器:取样器1 访问百度,取样器2 访问北京宏哥 使取样器2 访问北京宏哥 执行失败。取样器2必须在While控制器前边且执行失败。如下图所示:
4、运行JMeter,查看结果树,执行结果发现,取样器1、取样器2 执行了,但没有进入While 控制器,如下图所示:
4.4.3Otherwise
自定义条件:值为True 或 False的函数/变量/属性 表达式;类似前边讲解的IF控制器,宏哥这里就照猫画虎的举个例子。
1、用户自定义变量,变量名:北京宏哥,变量值:true,如下图所示:
2、While控制器配置,取到变量的值:${北京宏哥},填写到表达式的地方,如下图所示:
3、JMeter执行过程的逻辑分析:
(1)北京宏哥用户(线程组)下 有 1 个用户自定义变量,变量 北京宏哥 的值为 true,While控制器的条件为:${北京宏哥} 取到的值始终是 true。
(2)所以一旦开始执行始终满足条件,那么按理说就应该一直执行 访问博客园首页 、访问北京宏哥的博客园首页、访问宏哥的JMeter系列文章 3个取样器,
4、运行JMeter,查看结果树,(运行JMeter后,会发现在一直运行),对比一下,与宏哥的分析是不是高度一致哈;如下图所示: