Jmeter逻辑控制器
标签(空格分隔): Jmeter
Loop Controller 循环控制器
指定其子节点运行的次数,可以使用具体的数值,也可以使用变量
- Foever选项:勾选表示一直循环,不勾选需要指定循环次数
If Controller if控制器
if控制用来控制器子节点是否运行。 默认情况下,条件仅在初始条目时计算一次,但您可以选择对控制器中包含的每个可运行元素进行评估。
如果使用javascript作为判断条件,将会降低性能
- Condition (default JavaScript): 默认情况下 输入的条件会被解释为返回
true
或flase
的avaScript代码,但是这个条件可以被覆盖。 - Interpret Condition as Variable Expression?:将条件语句解释为表达式
- 勾选:讲条件语句解释为表的式,条件是语句使用__jex3转移,不是必须
- 不勾选:将条件语句解释为javaScript(默认勾选)
- Evaluate for all children :
- 勾选:如果选中这一项,在每个子结点执行前都会计算表达式。
- 不勾选:尽在初始的时候计算该表达式。
实例1:条件语句被解释为javaScript 实例2:条件语句为表达式
实例3:只在初始化判断if条件
实例4:每个子节点运行前都进行判断
While Controller 无限循环控制器
无限循环执行子节点,直到判断条件为False
- Condition
- blank(空):无限循环,直到子节点中的的样本出现失败
- LAST:当循环执行前有样本执行失败不进入循环
- Otherwise:当判断条件为False的时候停止循环
实例1 无限循环,样本出现失败终止执行
** 实例2 循环前样本执行失败** 循环执行前样本没有失败,正确进入循环 循环执行前样本有失败,不进入循环
ForEach Controller ForEach 控制器
循环控制器,循环控制器控制循环,和编码中的for循环类似
- Input variable prefix(非必须) :输入变量前缀,循环控制器可以从中获取到变量对应的值,然后作为循环控制器的循环条件,还可以输出变量作物取样器参数
- Start index for loop(非必须):循环变量的开始下标
- End index for loop(非必须):循环变量的结束下标
- Output variable(非必须):输出的变量,循环控制器生成的的变量名称
- Use Separator(非必须):是否使用分隔符,变量前缀是否加“_“作为分隔符
实例1
- 请求
jmeter.apache.org/demos
网页,通过正则提取器获得例子名称 - for循环中使用正则中提取的变量。进行变量输出
- 执行结果
Once Only Controller 仅一次控制器
仅一次控制器,也就是改控制器下的子原件只运行一次,即使把仅一次控制器放在循环控制器下面,也只是运行一次。线程组循环仅一次控制器也是只执行一次。类似于locust on_start
** 实例1 循环控制器内执行仅一次控制器**
实例2 循环线程内执行仅一次控制器
Interleave Controller 交替控制器
交替执行子节点内的元件。
- ignore sub-controller blocks(非必须):忽略子控制器,即子控制器失效,由交替控制器接管。每次只执行子控制器内的一个请求。
- Interleave across threads(非必须):跨线程进行替换,如果勾选,交替控制器会操作所有线程。
实例1 交替执行请求
- 交替执行控制器下包含请求1,请求2,请求3
实例2 忽略交替控制器下的子控制器逻辑
- 交替执行控制器下包含请求1,请求2,请求3,仅一次控制器
- 仅一次控制器下包含请求4 不勾 ignore sub-controller blocks 忽略子控制逻辑 勾选 ignore sub-controller blocks 执行结果 这里有点看不懂了,只执行了7次,个人理解应该是1-2-3-4 1-2-3-4的执行 在仅一次控制器下面添加了请求5。不勾选ignore sub-controller blocks 执行结果 勾选ignore sub-controller blocks执行结果 感觉这里有bug 添加一个循环控制器,添加子元件请求6 不勾选ignore sub-controller blocks 执行结果 勾选ignore sub-controller blocks 执行结果。循环控制器的执行结果和预期一致
实例3 跨线程进行替换的效果
- 线程数量4
- 循环次数1
- 元件和以上实例一直 不勾选 Interleave across threads 执行效果 勾选 Interleave across threads 执行效果
Random Controller 随机控制器
和交替控制器类似,但是随机控制是随机选取子节点的原件进行执行
- ignore sub-controller blocks(非必须):忽略子控制器,即子控制器失效,由交替控制器接管。每次只执行子控制器内的一个请求。
实例1 ignore sub-controller blocks的作用
- 随机控制器下有请求1,2,3,循环控制器,循环执行3次
- 循环控制器下包含请求4
不勾选 ignore sub-controller blocks 执行结果 勾选 ignore sub-controller blocks 执行结果
Random Order Controller 随机顺序控制器
和随机控制器类似,但是会执行所有子节点,但是顺序随机
实例1
- 一个线程,循环10次
- 随机顺序控制器在下包含请求1,2,3
Throughput Controller 吞吐量控制器
控制其下的子节点的执行次数与负载比例分配,包含一下两种分配方式
- Percent executions : 设置运行比例
- Total executions : 设置运行次数
- Per user :勾选基于线程执行,勾选基于全局执行
实例1 设置执行次数
-
两个吞吐量控制器,每个吞吐量控制器包含一个请求,执行次数为3,5
-
实例2 执行比例
-
两个吞吐量控制器,每个吞吐量控制器包含一个请求,比例6:4
Runtime Controller 运行时控制器
用来控制子元件的执行时长。 ![image_1csdt18e98fe1nbq1lhe7p0mlc47.png-10kB]
- Runtime (seconds) 期望运行的时长,0为不执行
Switch Controller 开关控制器
Switch控制器通过给该控制器中的Value赋值,来指定运行哪个采样器。
- Switch Value 赋值方式
- 序号赋值 Switch控制器下的子节点从0开始计数,通过指定子节点所在的位置来确定执行哪个元素
- 指定子元素的名称,比如采样器的Name来进行匹配。当指定的名称不存在时,不执行任何元素。
Module Controller 控制器
用于跳转到选定的控制器位置并执行对应的控制器,主要用来业务逻辑的跳转
- Module to Run: 需要运行的模块,在下拉列表中选出需要运行的模块。 下拉列表列出了测试计划及工作台包含的控制器。
实例1 在 Module控制器中 Model To Run 选中 Random Order Controller
(该控制器在测试计划汇总处于禁用状态)执行侧计划。
任何一个模块所用的控制器名字必须唯一,因为其名字被用来找到目标控制器时重新加载;出于这个原因,最好保证控制器名字不同,否则执行测试时候可能发生意外
Include Controller 导入控制器
用来导入外部的的测试片段。导入的外部测试片段的是不包含线程组的,如果导入的是一个完整的测试计划该测试无法被执行。
- Filename 要导入的测试计划。
实例1
- 新建一个测试片段
新建文件-右击测试计划-点击测试片段(Test Fragment)
,测试片段下添加循环控制器循环10次,循环控制器下添加http请求,请求百度,保存导入使用 - 将新建的测试片段导入到导入控制器中,执行 执行结果 导入一个包含线程组的元件看看效果,在测试片段的jmx中新建一个线程组 保存后返回到导入控制器的测试计划中执行,看看结果 线程组没有被执行。通常情况下我们可以在测试片段中引入测试计划进行调试。
Transaction Controller 事务控制器
事务控制器生成一个额外的样本,用于测量执行嵌套测试元素所花费的总时间,事务控制器可以把其节点下的取样器执行消耗时间累加在一起,便于我们统计。如果事务控制器下的有多个取样器,那么只有每一个取样器都运行成功了,整个事务控制器的事务才能算是成功。
- Generate Parent Sample 选择是否生成一个父取样结果。不勾选的情况下生成独立样本,勾选的化生成的样本作为其他样本父项。
- Include duration of timer and pre-post processors in generated sample 是否包含定时器设定的延迟时间,选择后测试结果统计的响应时间将包含样本请求前后的的延迟时间。
实例1,Generate Parent Sample
- 样本内容
- 事务控制器下添加请求1 请求2
- 线程循环次数10
- 添加汇总报告
不勾选 Generate Parent Sample 查看执行结果 同时生成了 Transaction Controller(事务),请求1,请求2的结果
勾选 Generate Parent Sample 查看执行结果 只生成 Transaction Controller(事务)结果
实例2 Include duration of timer and pre-post processors in generated
- 样本内容
- 事务控制器下添加请求1 请求2,固定延时器,延时时间为2s.
- 线程循环次数10
- 添加汇总报告
不勾选 Include duration of timer and pre-post processors in generated 查看执行结果 勾选 Include duration of timer and pre-post processors in generated 查看执行结果 对比两个结果 发现勾选后事务的响应时间为`2s+请求1的相应时间+2s+请求2的相应时间。一般情况下我们不勾选
Simple Controller 简单控制器
简单控制器用来指定了一个执行单元(封装的作用?)他不改变元件的执行顺序,在他下面可以嵌套其他控制器。简单控制器只有两个可变属性名称
,注释
。因为不存在什么逻辑的东西,就不举例了。
Critical Section Controller 临界区控制器
确保它的子元素(samplers /控制器等)在执行控制器的子程序之前只执行一个线程作为指定的锁。
-Lock Name 锁的名称,唯一值。
Recording Controller 录制控制器
使用代理服务器是使用 具体看如下链接 https://www.testwo.com/blog/7299