Include控制器用来导入外部的测试片段(非完整的测试计划),在执行时会执行导入的测试计划,但是被导入的测试计划有特殊要求,它不能有线程组,只能包含简单的控制器及控制器下的元件。换句话说就是相当于加了一个执行单元,一个封装了的业务操作单元,类似我们程序开发中的函数(方法)一样。例如一个查询学生信息的业务操作我们用取样器来模拟,然后放到简单控制器中作为一个执行单元,别的地方也要用到时,我们可以不用重复造轮子直接引用过来。
一般来说,Include控制器和测试片段(Test Fragment)配合使用的比较常见。
(1)路径:线程组 > 添加 > 逻辑控制器 > Include控制器,如下图所示:
(2)关键参数说明如下:
Name:名称,可以随意设置,甚至为空;
Comments:注释,可随意设置,可以为空;
Filename:文件名,必输字段,如果没有,就会报错。通过Filename的路径和文件名引用外部的jmx文件。
推荐可以将 Include控制器 与 Module控制器一起对比着学习,Include控制器 是从外部文件引用,只能引用整个测试片段的内容,Module控制器 是从内部文件中引用,引用上相对比较灵活,可以只引用部分测试片段或模块内容。这样一内一外不仅容易理解也容易记忆和学习。
(3)实例
创建一个Filename路径为空的测试计划,运行JMeter,查看结果树(程序执行报错,脚本执行中止,不会继续执行下面 csdn首页 的取样器),如下图所示:
创建一个Filename路径中的文件不存在的测试计划,点击“保存”按钮的时候,就会直接弹窗报错。如下图所示:
Test Fragment 相当于一个独立的部分,可以被其他测试计划引用,实现 样例的片段化,模块化,遇到重复需要的,比如登录、注册之类的,就可以用Test Fragment 和 Include Controller 了,这样可以避免重复
交替控制器,顾名思义是:互相交替,其节点下的取样器交替执行。根据被控制器触发执行次数,去依次执行控制器下的子节点。被触发执行可以由线程组的线程数、循环次数、逻辑控制器触发。
(1)路径:线程组 > 添加 > 逻辑控制器 > 交替控制器,如下图所示:
(2)关键参数说明如下:
名称:可以随意设置,甚至为空;
注释:可随意设置,可以为空;
忽略子控制器:即子控制器失效,由交替控制器接管。
勾选后,会无视节点下的所有控制器,将每个取样器作为一个单独字节点执行不勾选忽略子控制器,交替执行时,节点下次一级每个取样器、逻辑控制器都认为是一个单独子节点来交替执行。
Interleave across threads: 勾选此项,则交替控制器下的请求将应用至所有线程和循环中迭代。如有四个请求,三个线程,两轮循环,那么第一轮三个线程分别运行请求1,请求2,请求3,第二轮循环的三个线程运行请求4,请求1,请求2。
允许跨线程交替执行,勾选后,当线程组线程数大于1时,当前线程首次执行会根据线程数顺序进行交替,后续执行按自己所属线程的上一个次的执行的位置交替,如: 交替控制器下由A B C D E 5个接口, 设置线程组 线程数3个,循环4次,则最终执行结果为 线程1执行 A B C D 线程2执行 B C D E 线程3执行 C D E A 。
(3)简单实例
(4)复杂实例
就是将交替控制器嵌套使用,来看看执行结果,从而更进一步的理解和学习交替控制器。
(5)忽略子控制器块
在交替控制器的设置界面,有这样一个选项,是否忽略子控制器,所以这里一般也是交替控制器作为父级控制器时使用的选项,这里的子控制器一般指非交替控制器的其他控制器 (如果子控制器也是交替控制器,该项实际和交替控制器的嵌套效果一样了)
1、下面,我们在交替器下添加一个循环控制器,设置循环次数 3,线程组循环次数设置为 2,设置交替器 勾选 忽略子控制器,如下图所示:
循环控制器:
线程组:
未勾选:
勾选后( 从结果可以看出,循环控制器没有执行3次,只执行了1次),如下图所示:
综上所述:以控制器为1个小单元,交替执行。
我们先来看一下,官方的解释:The Critical Section Controller ensures that its children elements (samplers/controllers, etc.) will be executed by only one thread as a named lock will be taken before executing children of controller.
大致意思是: Critical Section Controller(临界区控制器),确保其子元素(采样器/控制器等)将仅由一个线程执行,因为在执行控制器的子元素之前将获取命名锁。
(1)路径:线程组 > 添加 > 逻辑控制器 > 临界部分控制器,如下图所示:
(2)关键参数说明如下:
Name:名称,可以随意设置,甚至为空;
Comments:注释,可随意设置,可以为空;
Lock name:锁名称,这里可以填入其子节点下执行的线程的名称,这个线程作为一个全局锁存在
(3)实例讲解
这部分主要是通过配合实例我们来理解一下开始那句话到底什么意思。
(4)锁名分类
在每个线程内,该控制器下的内容只会被执行一遍,无论循环多少次,都只执行一遍。。
此控制器通常用于控制需要登录的请求,测试过程中,我们往往都只需要登录一次,获取到对应的登录信息后即可执行后续相关的请求,而不是每执行一个请求都登录一次,如将login请求放入仅一次控制器,则在线程组循环运行期间,不论循环次数设置为多少次,login请求都将仅在第一次执行时运行
(1)路径:线程组 > 添加 > 逻辑控制器 > 仅一次控制器,如下图所示:
(2)关键参数说明如下:
名称:可以随意设置,甚至为空;
注释:可随意设置,可以为空。
(3)实例
。
录制控制器,顾名思义是录制的时候会用到。实际上它是一个位置,当我们用JMeter代理进行录制时,录制的脚本默认放在此控制器的节点下面。没有实际的逻辑作用,我们用简单控制器也可以代替它。
(1)路径:线程组 > 添加 > 逻辑控制器 > 录制控制器,如下图所示:
(2)关键参数说明如下:
名称:可以随意设置,甚至为空;
注释:可随意设置,可以为空;
随机控制器节点下的元件随机运行,与交替控制器不一样的是节点下的元件运行顺序不定。
(1)路径:线程组 > 添加 > 逻辑控制器 > 随机控制器,如下图所示:
(2)关键参数说明如下:
名称:可以随意设置,甚至为空;
注释:可随意设置,可以为空;
忽略子控制器块:即子控制器失效,由随机控制器接管,类似交替控制器。
(3)简单实例
(3)随机嵌套循环-不勾选忽略子控制器
(4)随机嵌套循环-勾选忽略子控制器
配置好以后,点击“保存”,运行JMeter,然后查看结果树( 从结果可以看出,设置了3个线程,循环控制器也失效了,每次都随机选择一个取样器执行),如下图所示:
(5)随机嵌套交替-勾选忽略子控制器
配置好以后,点击“保存”,运行JMeter,然后查看结果树( 从结果可以看出,设置了10次循环,交替控制器也失效了,每次都随机选择一个取样器执行),如下图所示:
随机顺序控制器其节点下的原件随机执行,不过每个元件只执行一次。
当控制器被触发时,将控制器下的所有子节点顺序打乱执行一遍,执行一遍;执行一遍,不是执行一个。
注意:是将子节点的顺序打乱,而非请求的顺序打乱,子节点可以是其他逻辑控制器。
随机控制器与随机顺序控制器名字十分接近,但两者还是有着明显的区别,可参考 上边介绍的随机控制器。
随机控制器为每次只执行节点下的一个子节点,随机顺序控制器是将节点下的所有子节点都正常执行,只是将执行顺序打乱
(1)我们先来看看这个Random Order Controller长得是啥样子,路径:线程组 > 添加 > 逻辑控制器 > 随机顺序控制器
(2)关键参数说明如下:
Name:名称,可以随意设置,甚至为空;
Comments:注释,可随意设置,可以为空。
(3)实例
1、创建测试计划
2、配置好以后,点击“保存”,运行JMeter,然后查看结果树( 从结果可以看出,设置了3次循环,每次循环把所有的子节点都执行了)