jmeter中逻辑控制器(Logic Controllers)的作用域只对其子节点的sampler有效,作用是控制采样器的执行顺序。
jmeter提供了17种逻辑控制器,它们各个功能都不尽相同,大概可以分为2种使用类型:
- 控制测试计划执行过程中节点的逻辑执行顺序,如:Loop Controller(循环控制器)、If Controller(如果if控制器)等;
-
对测试计划中的脚本进行分组,方便JMeter统计执行结果以及进行脚本的运行时控制等,如:Throughput Controller(吞吐量控制器)、Transaction Controller(事务控制器)等
临界区控制器
作用:临界区控制器确保其子节点下的取样器或控制器将被执行(只有一个线程作为一个锁)
线程组设置并发数100或循环次数100次,临界区控制器下的采样器,是按照顺序执行的,可见此控制器的作用
遍历循环控制器
作用:用来遍历当前元素的所有可执行场景;在用户自定义变量中读取一系列相关的变量,该控制器下的采样器或控制器都会被执行一次或多次,每次读取不同的变量值
- 输入变量前缀:在其中输入需要遍历的用户参数
- 开始循环字段:循环指数开始(唯一)→ 遍历查询的变量范围,开始的值(这里如果不填写,默认从1开始,如果没有1开始的变量,执行时会报错)
- 结束循环字段:循环指数结束(包含)→ 遍历查询的变量范围,结束的值
- 输出变量名称:将遍历查询到的符合条件的用户参数赋值给输入变量(Vname),然后就可以在控制器下的取样器使用,格式为${输出变量名}
- 数字之前加上下划线‘-’?输入变量名称中是否使用“_”进行间隔
包含控制器
作用:用于引用外部的Jmx文件;从而控制多个测试计划组合
- 包含测试计划的文件名,可以点击浏览,从文件夹保存的JMX文件夹目录下选择对应的JMX文件
包括控制器只能引用“测试片段”下的内容
当使用包含控制器中包含相同的JMX文件,则要确保文件名不同,以避免无法读取
生命周期/运行周期控制器
作用:用于控制该控制器下的取样器/控制器的运行时间
- Runtime(seconds):运行时间,单位为:秒
转换控制器
- Switch value:控制器具体赋值的value值字段
有两种赋值方式:
①.第一种是数值,Switch控制器下的子节点从0开始计数,通过指定子节点所在的数值来确定执行哪个元素。
②.第二种是直接指定子元素的名称,比如采样器的Name来进行匹配。当指定的名称不存在时,不执行任何元素。
③当Value为空时,默认执行第1个子节点元素。
当/判断控制器
作用:运行其子节点下的取样器/控制器,直到条件为“假”
Condition(function or variable):条件(函数或变量):里面可填入判断依据的条件,
-
使用方法:可能的条件值有:
①.空白:无限循环
②.指定循环次数
③导入文件指定次数。CSV
添加文件
在while控制器里添加CSV Data Set Config
在While控制器里添加条件
Value的值为False, 就跳出循环
事务控制器
作用:生成一个额外的采样器来测量其下测试元素的总体时间;值得注意的是,这个时间包含该控制器范围内的所有处理时间,而不仅仅是采样器的
性能测试:的结果统计时我们一定会关注TPS,TPS代表的是每秒事务数,每个事务对应的是我们的请求。虽然JMeter能够帮我们把每个请求统计成一个事务,但有时候我们希望把多个操作统计成一个事务,JMeter也考虑到了这种需求,我们可以用个逻辑控制器中的事务控制器来完成
- Generate parent sample:生成父样本(不同的模式选择)
-
include duration of timer and pre-post processors in generated sample:包含时间的计时器和前后处理器生成的示例(不同的模式选择)
聚合报告:显示比较明显
备注:
1,生成的事务采样器的测量的时间包括其下采样器以及其他的一切时间
2,由于时钟频率问题,这个时间可能略大于单个采样器的时间之和(时钟开始时间介于控制器记录开始时间与第一个采样器开始之间,时钟结束时间亦然)
3,事务采样器只有在其子采样器都成功的情况下才显示成功
4,在父模式下,事务控制器下的各个采样器只有在结果树里才能看到;同时,子采样器的数据也不会在CSV文件中显示,但是在XML文件中可以看到
交替控制器
作用: 交替控制,使得该控制器包含的取样器步骤交错执行在每个循环中
忽略子控制器模块(Ignore sub-contorller blocks):如果勾选此项,交错控制器将sub-controllers像单一请求元素一样,一次只允许一个请求/控制器
勾选前:
勾选后:
仅一次控制器
作用:在多线程循环的时候,将使其子节点下的取样器请求只运行一次
例如:
吞吐量控制器
作用:jmeter自带的翻译这里是错误的,因为它并不能控制吞吐量(吞吐量的概念请自行百度);其实质作用是允许用户控制执行的频率
总共有两种执行模式:百分比执行和总执行
- 总执行(Total Executions):使控制器停止执行一定数量的测试计划
- 百分比执行(Percent Executions):使控制器按一定比例执行迭代的测试计划
- 流量(Throughput):对应上面的执行数量或者比例
- 每个用户(Per User):每个用户(如果勾选此项,将导致控制器计算是否应该执行在每个用户(每个线程)的基础上;如果不加以控制,那么将计算全球所有用户)
实际场景:
需求: A,B 两个用户进行系统操作。A用户操作2次。B用户操作5次