JMeter逻辑控制器可以对元件的执行逻辑进行控制,除仅一次控制器外,其他控制器下可以嵌套别的种类的逻辑控制器。
jmeter所有版本下载路劲:https://archive.apache.org/dist/jmeter/binaries/
ForEach Controller(循环控制器)
功能描述:定义一个循环的规则
参数说明
名称:控制器名称,可以随意设置,甚至可以为空。
注释:可以随意设置,可以为空。
输入变量前缀:可以在"用户自定义的变量"中定义一组变量,循环控制器可以从中获取变量对应的值,
然后作为循环控制器的循环条件,还可以输出变量作为取样器的参数。
Start index for loop:循环变量下标起点。
End index for loop:循环变量下标终点。
输出变量名称:循环控制器生成的变量名称。
Add “_” before number?:变量前缀后是否加"_" 作为分隔符。
现在我们来看一个例子。
首先我们访问一个页面,然后用正则表达式提取这个页面所有链接,然后用ForEach Controller(循环控制器)来循环遍历所有的链接。
(1)访问http://jmeter.apache.org/demos/
(2)正则表达式提取第一步操作返回的所有链接。
(3)添加一个ForEach Controller
(4)在ForEach controller中添加一个http请求,访问参数由ForEach controller循环控制传递过来。
(5)添加一个监控器——观察结果树,运行完成后我们就可以看到示例脚本都被我们下载下来了。
Simple Controller(简单控制器)
功能描述:是JMeter中最简单的一个Controller。该Controller仅用于对测试计划 中的元件进行分组,不具有任何的逻辑控制或运行时的功能。
Include Controller
功能描述:用来导入其他的测试计划片段,但他有特殊要求,被导入的测试计划不能有线程组。只能包含简单控制器及控制器下的元件。
类似我们程序开发中导入一个封装好的一个函数一样。
参数说明
名称:可以随意设置,最好是有意义。
注释:可以随意设置
文件名:被引入的文件路径,必输字段,如果没有则会报错。
Runtime Controller
功能描述:用来控制其子元件的执行时长,时长的单位是秒。
参数说明
名称 :可以随意设置,最好是有意义。
注释:可以随意设置,最好是有意义。
Runtime(seconds):默认为1,去掉1默认为0,此时不执行其节点下的元件。
Switch Controller
功能描述:Switch条件控制器,类似于高级语言中的Switch逻辑控制语句。
参数说明
名称:可以随意设置,最好是有意义。
注释:可以随意设置,最好是有意义。
Switch Value:指定运行的取样器编号。匹配值,可以为数字,也可以为字符。为字符时匹配取样器名称,如果匹配不上就会默认
找取取样器名称为default的取样器,如果没有则不允许。
一个简单的例子。
如图所示,指定运行的的取样器编号为0(JMeter会给节点下的取样器顺序编号,第一个取样器“java请求1”编号为0,第二个“取样器java请求2”的编号寄是1,所以这里指定0就会运行第一个java请求1)。如果指定的编号超出了下面的节点数或者不指定,则运行第0个取样器。另外也可以指定取样器的名称,名称匹配时大小写及空格都敏感。如果匹配不上则不运行取样器。
while Controller
功能描述:while条件控制器,其节点下的元件将一直运行直到while条件为false。
名称:可以随意设置,最好是有意义。
注释:可以随意设置,最好是有意义。
Condition:接受变量表达式与变量, 如:input < 10当条件不满足时一直循环下去,另外提供了三个常量。
Blank:当循环中有取样器失败后停止。
LAST:当循环前有取样器失败则不进入循环。
Otherwise:当判断条件为false时停止循环。
Interleave Controller(交替控制器)
功能描述:交替控制器,其节点下的取样器会交替执行,比如,1个线程,循环执行三次,第一次1号取样器执行,第二次2号取样器执行,第三次1号执行。
参数说明
名称:可以随意设置,最好是有意义。
注释:可以随意设置,最好是有意义。
Ignore sub-controller blocks:忽略子控制器,即子控制器失效,由交替控制器接管。
一个简单的例子
如图,假如我们设置线程组执行1个线程,循环3次,那么执行顺序是:java请求1、java请求3、java请求2、java请求3、java请求1、java请求3
交替控制器下只有两个元件,所以交替完一次后从新开始。即第三次执行时顺序是java请求1、java请求3。
现在是勾选忽略子控制器的例子
如图,交替控制器下有一个循环控制器,此时勾选忽略子控制器,设置1个线程执行4次,则执行顺序是:java请求1、java请求2、java请求3、java请求1
下面再来个复杂点的测试计划,我们让交替控制器嵌套一下
Once Only Controller(仅一次控制器)
功能描述:仅一次控制器,也就是此控制器下的子元件只运行一次,即使把仅一次控制器放在循环控制器下面,也只是运行一次
一个简单的例子
如图,我们设置1个线程,循环控制器设置3次,可以看出java请求2只执行了一次。
我们在模拟请求时,有时只需要登录一次,就可以把登录的部分放在仅一次控制器下。
Throughput Controller(吞吐量控制器)
功能描述:用来控制其下元件的执行次数,并无控制吞吐量的功能,想要控制吞吐量可以使用Constant Throughput Timer
参数说明
名称:可以随意设置,最好是有意义。
注释:可以随意设置,最好是有意义。
Percent Executions:按执行次数的百分比来计算执行次数,此时Throughput(吞吐量)取值是0-100,Per User是否勾选对Percent Executipns模式无影响。Percent Executions模式的执行次数=线程数*循环次数*吞吐量%。
ps:循环次数=线程组循环次数*循环控制器循环次数。
Total Executions:按Throughput(吞吐量)的值来指定执行次数,可以是任意整数,如果小于等于0则一次也不执行。此时Per User与Total Executions一起来影响执行次数。
当勾选Per User时:
1.线程数*循环次数>=线程数*吞吐量时,Total Executions模式的执行次数=线程数*吞吐量。
2.当线程数*循环次数<线程数*吞吐量时,Total Executions模式的执行次数=线程数*循环次数。
当不勾选Per User时:
1.线程数*循环次数<=吞吐量时,Total Executions模式的执行次数=线程数*循环次数。
2.当线程数*循环次数>吞吐量时,Total Executions模式的执行次数=吞吐量。
If Controller
功能描述:条件控制器,可以通过某个条件来控制此节点下的元件是否运行。Condition可以使用javaScript与变量表达式。
参数说明
名称:可以随意设置,最好是有意义。
注释:可以随意设置,最好是有意义。
Condition:判断条件,勾选Interpret Condition as VarEvaluate for all childreniable Expression?时Condition使用变量表达式来设置条件。
Evaluate for all children:判断条件是否针对所有的子节点,默认不勾选,只在If Controller的入口处判断一次。
一个简单的例子
可以看出这就相当于语言里的if条件判断,当条件满足才会执行if控制器里的元件。
Module Controller(模块控制器)
功能描述:可以通过模块控制器在当前测试计划中引入新的测试片段(也可以叫脚本片段,由控制器、取样器及辅助元件构成能够完成负载的模拟)
参数说明
名称:可以随意设置,最好是有意义。
注释:可以随意设置,最好是有意义。
Module To Run:列出测试计划及工作台包含的控制器,在此选择引入哪一个脚本片段。
一个简单的示例
如图,我们有一个循环控制器放在Test Fragment(测试片段)中。测试片段中的元件是不参与测试计划运行的,但是我们可以把它引入到模块控制器中,如果我们在线程组中循环3次,那么脚本的执行顺序是:线程组、循环控制器、java请求1、java请求1、java请求1
另外,模块控制器也可以引入当前测试计划中的控制器。
如图,我们让模块控制器引入仅一次控制器,如果我们在线程组设置循环3次,那么执行此控制器就会执行2次,为什么不是3次呢?
因为模块控制器调用一次,顺序往下他自己也要执行一次,即在第一轮循环时仅一次控制器执行了2次,第2、3次循环就不再执行了。
因为使用的是仅一次控制器,所以循环多少次都没有作用了。
Random Controller(随机控制器)
功能描述:随机控制器节点下的元件随机运行,与交替控制器不一样的是节点下的元件运行顺序不定。
参数说明
名称:可以随意设置,最好是有意义。
注释:可以随意设置,最好是有意义。
Ignore sub-controller blocks:忽略子控制器,即子控制器失效,由随机控制器接管,类似交替控制器。
Loop Controller(循环控制器)
功能描述:循环控制器可以控制在其节点下的元件的执行次数,如果在线程组中也设置了执行次数,那么循环控制器下的元件的执行次数是:线程组执行次数*循环控制器执行次数。
参数说明
名称:可以随意设置,最好是有意义。
注释:可以随意设置,最好是有意义。
Loop Count:要么设置Forever(永远),要么填写具体的执行次数,二选一
我们设想一个场景:
一个用户登录进入系统,一上午都在忙物流计划,我们模拟此业务过程应该是登录一次,然后无数次地循环做物流计划。
如图,我们利用循环控制器来循环物流计划这个取样器,然后用仅一次控制器让用户登录只会执行一次。
Recording Controller(录制控制器)
功能描述:录制控制器,顾名思义是录制的时候用到的,实际上它是一个位置,当我们用JMeter代理进行录制时录制的脚步默认放在此控制器的节点下面。没有实际的逻辑作用,我们用简单控制器也可以代替它
参数说明
名称:可以随意设置,最好是有意义。
注释:可以随意设置,最好是有意义。
clear all the recorded samples:清除所有记录的样本。
Transaction Controller(事务控制器)
功能描述:事务响应时间是我们衡量业务性能的主要指标,事务控制器可以把其节点下的取样器执行消耗时间累加在一起,便于我们统计。同时我们对每一个取样器的执行时间进行统计。
如果事务控制器下的取样器有多个,那么只有每个取样器都运行成功了,整个事务控制器定义的事务才算成功。
参数说明
名称:可以随意设置,最好是有意义。
注释:可以随意设置,最好是有意义。
Generate Parent sample:选择是否生成一个父取样结果。
不勾上时
勾上时
Include duration of timer and pre-post processors in generated sample:是否包含定时器,选中将在取样器前与后加上延时,建议不勾选。