一,组件简介
1、Loop Controller
循环控制器,控制在其下面的子元素循环执行。
1,设置循环次数,其下的所有请求会循环执行设置好的次数
2,如果在线程组里也有循环数字,执行他们两个相乘的次数
2、ForEach Controller
遍历一组相关变量的值。
需求:有一组关键字(N1,N2,N3)要依次取出,并在百度搜索
用户定义的变量必须是N_数字的格式
配置控制器(红色箭头由上往下数做注释)
1)自己(。・∀・)ノ゙嗨的上面的名字,不要_和数字
2)左闭右开(在用户定义的变量中,我们是按照1,2,3这样的顺序下去的,但是计算机解析是从0开始的,
然后我们在逻辑控制器中这个左闭右开,右边那个4是取不到的,输出值是有name_4的原因是因为计算机从0对应name_1开始算)
这样我们左取0对应上面的name_1,1对应name_2这样下去
3)提取完上面这两数字区间内的数据后再自(。・∀・)ノ゙嗨一个名字
请求的执行格式
1)前面(。・∀・)ノ゙嗨
2)调用定义后的名字方法
3)这两个调用都可以
参数解释:
1.输入变量前缀:就是“用户定义的变量”中的一系列变量的前缀。
2.Start index for loop:“用户定义的变量”中变量的下划线之后的数字,此处设置为0,意思是,数字必须大于等于0。
3.End index for loop:“用户定义的变量”中变量的下划线之后的数字,此处设置为4,意思是,数字必须小于4。
4.Output variable:被这个控制器下面的Samplers使用。
5.Use Separator:勾选后,会根据“_”来匹配,就如同上面示例。如果不勾选,则直接是变量前缀和数字拼接。
3、While Controller
循环执行其下面的测试元件,直到写入的条件为False。
和开发语言中的While作用是一样的,当条件(Condition中写的)为false的时候,就停止执行,退出循环。
Condition写入条件:
- 为空(什么的都不写的时候):循环中的最后一个请求执行失败才退出循环
- LAST:直到最后一个请求请求失败才退出循环。(和为空的区别是:如果在循环开始之前的最后一个请求失败了,就不会开始循环)
- 其他内容:条件值等于“false”时,退出循环。也就是只要满足条件,就一直循环执行
- Contion可以输入计算结果等于“false”的变量或者函数
案例:
1、 LAST
- 直到最后一个请求请求失败才退出循环
- 当里面的请求断言失败后就会跳出循环
- 如果该控制器前面的最后一个请求是失败的则不进入循环
1.1)直到最后一个请求请求失败才退出循环
当最后一个请求是正确的时候,就进入无限循环模式了:
执行:
1.2)如果该控制器前面的最后一个请求是失败的则不进入循环
注:这个请求失败,是包括请求失败了和断言失败了
eg:
新建一个脚本:
执行结果:While控制器里的请求都不执行
再加一个请求成功但是断言失败的请求:
执行结果:While控制器里的请求都不执行
把断言修改成正确的:While控制器里的请求都执行
2、其他内容
${__javaScript()} 在()中写入判断条件就可以了
例如:
1, ${__javaScript("${num}"<"8")} :变量num小于8执行,一旦等于大于8就退出循环
2, ${__javaScript("${num}"=="8")} :变量num等于8执行,其他都不执行
3, ${__javaScript("${num}"!="8")} :变量num不等于8执行,一旦等于8就退出循环
4, ${__javaScript("${num}"!=4&&"${num}"<"8",)} :变量num小于8且不等于4执行,一旦大于等于8或者等于4,满足一样就退出循环
举个栗子:
设置一个脚本,添加一个计数器和请求都在While控制器下面
组件配置为:
计数器配置从1开始,最大到10,引用变量名num:
1)While控制器写:
执行得:
后面的请求9和请求10不会执行,到8结束
2)While控制器写:
执行得:
什么都没运行,因为我们是从1开始的,打从第一个请求就不满足
3)While控制器写:
执行得:
4)While控制器写:
执行得:
4、Alternate controller
交替控制器,交替执行其下面的测试元件。
每次循环执行该控制器下的一个采集器,下次循环,按顺序执行下一个采集器
此处举例说明。如下图:
某线程,第1次循环,只执行该控制器下的“交替1”;
第2次循环,只执行该控制器下的“交替2”;
第3次循环,只执行该控制器下的“交替3”;
第4次循环,只执行该控制器下的“交替1”;
……
忽略子控制器块(此处应该是汉化错误_)
1.交替控制器下有一个简单控制器,且勾选该选项
当执行轮到这个简单控制器的时候,会执行这个控制器下面所有的采集器。而这个执行过程,交替控制器会当作它下面的控制器是一个整体。
2.交替控制器下有一个简单控制器,不勾选该选项
当执行轮到这个简单控制器的时候,会执行这个简单控制器下面第1个采集器,以此类推。而这个执行过程,这个简单控制器对于交替控制器来说,是透明的。
5、Random Controller
随机控制器,每次循环随机执行一个。
在线程数和循环数都是1次的情况下,该控制器下面无论几个请求,都是只随机请求一个
栗子:
第一次执行:
第二次执行:
6、Random Order Controller
随机顺序控制器,其下面的测试元件全部执行,但是顺序是随机的
该控制器下面的所有请求都会执行,但是是随机执行
- 和简单控制器的区别是,一个顺序执行全部请求,一个随机执行全部请求
- 和随机控制器的区别是,一个随机执行一个请求,一个随机执行全部请求
栗子:
第一次执行:
第二次执行:
7、如果(if)控制器
If控制器允许用户控制其下方的测试元件(其子元件)是否运行。
If控制器将在内部使用javascript来计算条件,但这会导致性能下降。
根据控制器设置的条件,进行判断,如果符合条件,则执行该控制器下面所有的子节点,否则不执行。如果什么条件都不设置,则不会执行它下面的节点。
- Interpret Condition as Variable Expression?:如果选中,则条件必须是计算结果为“
true
”的表达式(忽略大小写)。例如,${FOUND}
或${__jexl3(${VAR} > 100)}
。与JavaScript情况不同,仅检查条件是否匹配“true
”(忽略大小写)。
对于性能测试,建议在条件中使用__jexl3
或__groovy
函数 - Evaluate for all children:是否应对所有子元件进行评估?如果未选中,则仅在输入时评估条件。就是假如这个控制器下面,有3个HTTP请求。如果需要在执行每个HTTP请求前,进行判断是否满足控制器中的条件,则需要勾选该复选框。
8、Switch Controller
Switch控制器的作用类似于交替控制器,它在每次迭代时运行一个子元件,但控制器运行顺序不是按排列顺序,而是按switch value定义
填的内容:
- 0:执行第一个请求,1:执行第二个请求,依次类推
- -1:无效,不会执行任何请求
- 要是填的数字超过取值范围了,就默认是0
- 不填:默认执行数字0的请求,即顺位第一个请求
- 非数字:可以填请求的名字来匹配,但是必须是完整的名字
举个栗子
创建一个脚本:
依次填入下列的值,并执行
不填:
-1:
0:
2:
2号:
请求2号:
9、Throughput Controller
吞吐量控制器,控制该控制器下采集器执行的频率
10、Runtime Controller
运行时长控制器,控制其下面的测试元件运行执行的时间