[JM_15]JMeter逻辑控制器-03:用以控制节点执行顺序的余下Logic Controller

JMeter逻辑控制器中,对于用来控制Test Plan执行过程中节点的逻辑执行顺序的Logic Controller,已在前文分析过其中的2个控制器:

  • ForEach Controller
  • If Controller
    ==> [JM_13]JMeter逻辑控制器01篇:ForEach Controller操作解析
    ==> [JM_14]JMeter逻辑控制器02篇:If Controller操作解析

本文则在控制节点执行顺序类型的控制器中,对余下的其他几个控制器作简要分析总结,如下:

  • Interleave Controller(交替控制器)
  • Loop Controller(循环控制器)
  • Once Only Controller(仅一次控制器)
  • Random Controller(随机控制器)
  • Random Order Controller(随机顺序控制器)
  • Switch Controller
  • While Controller
[JM_15]JMeter逻辑控制器-03:用以控制节点执行顺序的余下Logic Controller_第1张图片


3.Interleave Controller(交替控制器)

Thread Group中,thread=1个,loop=4次,分配给3个取样器每个交替执行,执行顺序:A-->B-->C-->A

[JM_15]JMeter逻辑控制器-03:用以控制节点执行顺序的余下Logic Controller_第2张图片
[JM_15]JMeter逻辑控制器-03:用以控制节点执行顺序的余下Logic Controller_第3张图片
[JM_15]JMeter逻辑控制器-03:用以控制节点执行顺序的余下Logic Controller_第4张图片

参数配置:默认不勾选以下2项

参数名称 含义
Ignore sub-controller blocks 忽略子控制器。选中此项,则Interleave Controller将其下的子Controller当成单一元素处理,仅允许每个子Controller一次发出一个请求
Interleave across threads 跨线程交替。选中此项,则交替控制器下的请求将应用至所有线程和循环中迭代


4.Loop Controller(循环控制器)

为其下的子节点运行指定循环次数,达到次数则运行完成

案例:线程组中有2个线程,Loop Controller控制循环次数为2,则预期每次循环2个线程,一共执行4个请求

[JM_15]JMeter逻辑控制器-03:用以控制节点执行顺序的余下Logic Controller_第5张图片
[JM_15]JMeter逻辑控制器-03:用以控制节点执行顺序的余下Logic Controller_第6张图片
[JM_15]JMeter逻辑控制器-03:用以控制节点执行顺序的余下Logic Controller_第7张图片
执行4个请求,符合预期


5.Once Only Controller(仅一次控制器)

适用场景:不管线程组中设置循环多少次,让Test Plan中的某些功能对每个线程仅执行一次(如:每个线程仅需要执行一次“登录”操作)

线程1,第1次循环,执行1次登录
线程1,第2次循环,不重复执行登录
线程2,第1次循环,执行1次登录
线程1,第3次循环,不重复执行登录
线程2,第2次循环,不重复执行登录
......
[JM_15]JMeter逻辑控制器-03:用以控制节点执行顺序的余下Logic Controller_第8张图片
2个线程,循环3次
[JM_15]JMeter逻辑控制器-03:用以控制节点执行顺序的余下Logic Controller_第9张图片
每个线程每次只执行1个请求,2个线程执行2个请求


6.Random Controller(随机控制器)

每次执行时,从其子节点中随机选取一个来执行

[JM_15]JMeter逻辑控制器-03:用以控制节点执行顺序的余下Logic Controller_第10张图片
[JM_15]JMeter逻辑控制器-03:用以控制节点执行顺序的余下Logic Controller_第11张图片


7.Random Order Controller(随机顺序控制器)

每次执行时,按照随机产生的顺序执行其下的所有子节点

Random Controller Random Order Controller
随机一个:只选择执行其所有子节点中的一个 随机全部:按照随机顺序全部执行其下的所有子节点
[JM_15]JMeter逻辑控制器-03:用以控制节点执行顺序的余下Logic Controller_第12张图片


8.Switch Controller

类似程序语言中的switch函数,Switch Controller根据给定的值n(可使用参数)选择执行其下的第n+1个子节点
Switch Controller只接受整数值,并且给定的值n是以0为基础的,因此当给定的值为2时,意味着Switch Controller下的第3个子节点会被执行;同时,Switch Controller接受参数作为其值

[JM_15]JMeter逻辑控制器-03:用以控制节点执行顺序的余下Logic Controller_第13张图片
Switch Value取值:n=0,1,2,...

案例:在Switch Controller下只有3个子节点

Switch Value取值 执行的节点
n=-1 NULL(不执行任何节点)
n=0 节点1
n=1 节点2
n=2 节点3
n=3 节点1(n+1=4>节点总数3,默认执行节点1)
n=4 节点1
n=1.6 NULL(不执行任何节点)


9.While Controller

While Controller是另一个用于控制循环的Controller,可设置一个Condition,其中Condition的取值可从以下三者之一取得:

[JM_15]JMeter逻辑控制器-03:用以控制节点执行顺序的余下Logic Controller_第14张图片

1. 空
如果Condition取值为空,则该Condition迭代执行While Controller下的所有子节点,直到最后一个子节点失败为止;如果不是最后一个子节点失败,而是While Controller中的其他子节点失败,则While Controller不会停止,而会继续循环执行过程

[JM_15]JMeter逻辑控制器-03:用以控制节点执行顺序的余下Logic Controller_第15张图片
构造使得非最后一个子节点的其他子节点失败,While Controller确实没有停止
[JM_15]JMeter逻辑控制器-03:用以控制节点执行顺序的余下Logic Controller_第16张图片
没有遇到最后一个子节点失败,While Controller也不会停止
[JM_15]JMeter逻辑控制器-03:用以控制节点执行顺序的余下Logic Controller_第17张图片
遇到最后一个子节点失败,While Controller就会停止执行

2. LAST
如果While Condition取值为字符串LAST,则迭代执行其下的所有子节点,直到最后一个子节点返回失败为止(与While Controller为空时的行为相同);同时,若While Controller的上一个节点失败,则Test Plan在执行时不会进入While Controller

[JM_15]JMeter逻辑控制器-03:用以控制节点执行顺序的余下Logic Controller_第18张图片
[JM_15]JMeter逻辑控制器-03:用以控制节点执行顺序的余下Logic Controller_第19张图片
上一个节点失败,不会进入执行While Controller

3. 表达式
除了为空、LAST之外,While Controller还可以取一个表达式。当While Controller取值为表达式时,若表达式的取值为字符串FALSE,While Controller就退出循环。

以下列出几个可用的表达式:
${VAR}:当参数VAR的值被设置成false时则退出循环
${__javascript("${VAR}" == "test001")}:当参数VAR的值不等于test001时会退出循环

你可能感兴趣的:([JM_15]JMeter逻辑控制器-03:用以控制节点执行顺序的余下Logic Controller)