【Jmeter】Jmeter:逻辑控制器

版权声明:本文为博主原创文章,欢迎转载,转载须注明出处:By 故三殇 https://blog.csdn.net/qq_39720249/article/details/88633325

目录

一、Logic Controller(逻辑控制器)

二、If Controller【如果(If)控制器】                               三、Transaction Controller【事务控制器】

四、Loop Controller【循环控制器】                                  五、While Controller【While 控制器】

六、Critical Section Controller【临界部分控制器】           七、ForEach Controller 【ForEach 控制器】

八、Include Controller【Include 控制器】                        九、Interleave Controller【交替控制器】

十、Once Only Controller【仅一次控制器】                      十一、Random Controller【随机控制器】

十二、Random Order Controller【随机顺序控制器】        十三、Recording Controller【录制控制器】

十四、Runtime Controller【Runtime 控制器】                  十五、Simple Controller【简单控制器】

十六、jp@gc - Parameterized Controller                          十七、Throughput Controller【吞吐量控制器】

十八、Module Controller【模块控制器】                           十九、Switch Controller【Switch 控制器】



一、Logic Controller(逻辑控制器)

Jmeter 逻辑控制器:
1、可以对元件的执行逻辑进行控制,除仅一次控制器外,其他控制器下可以嵌套别的种类的逻辑控制器。
2、以下详解均以简体中文版为例。
脚本和视频请到 ROAD TESTING 官方网站性能测试书籍脚本专栏 http://pbook.testroad.org/或者 QQ 群 (257887726) 下载。
逻辑控制器共有 18 个,分别是:

1、If Controller【如果(If)控制器】                               
2、Transaction Controller【事务控制器】
3、Loop Controller【循环控制器】                                  
4、While Controller【While 控制器】
5、Critical Section Controller【临界部分控制器】           
6、ForEach Controller 【ForEach 控制器】
7、Include Controller【Include 控制器】                          
8、Interleave Controller【交替控制器】
9、Once Only Controller【仅一次控制器】                      
10、Random Controller【随机控制器】
11、Random Order Controller【随机顺序控制器】        
12、Recording Controller【录制控制器】
13、Runtime Controller【Runtime 控制器】                   
14、Simple Controller【简单控制器】
15、jp@gc - Parameterized Controller                            
16、Throughput Controller【吞吐量控制器】
17、Module Controller【模块控制器】                            
18、Switch Controller【Switch 控制器】

 




二、If Controller【如果(If)控制器】

如果(If)控制器:
1、条件控制器,可以通过某个条件来控制此节点下的元件是否运行;条件可以使用 JavaScript 与变量表达式。
2、允许用户控制该控制器下面的取样器/控制器是否执行该节点下的子节点。

// ************************* 【如果(If)控制器】 参数说明 ************************* //
1、名称:如果(If)控制器名称,可以随意设置,甚至可以为空。 

2、注释:可以随意设置,可以为空。 

3、Expression(must evaluate to true or false):
表达式(必须计算为true或false)
(1)Interpret Condition as Variable Expression?:
条件是否解释为变量表达式?
[默认勾选:是,那么变量表达式会进行求值,并与“ture”或“false”进行比较,而无需使用JavaScript;
不勾选:否]
(2)Evaluate for all children?:
判断条件是否对所有的子节点执行?
[勾选:是,则该条件在每一个子节点执行时执行一次;
默认不勾边:否,该控制器可以对包含在其下面的所有可运行的元素进行执行,但只在如果(If)控制器的入口处判断一次。]

4、说明翻译:
For performance it is advised to check "Interpret Condition as Variable Expression" and 
use __jecl3 or __groovy evaluating to true or false or a variable that contains true or false.
对于性能,建议检查“将条件解释为变量表达式”,并使用“jecl3”或“groovy”计算为“真”或“假”或包含“真”或“假”的变量。

${JmeterThread.last_sample_ok} can be used to test if last sample was successful
${JmeterThread.last_sample_ok}:可用于测试最后一个样本是否成功


三、Transaction Controller【事务控制器】

事务控制器:
1、生成一个额外的采样器来测量其下测试元素的总体时间;
值得注意的是,这个时间包含该控制器范围内的所有处理时间,而不仅仅是采样器的.
2、事务响应时间是我们衡量业务性能的主要指标,事务控制器可以把其节点下的取样器执行消耗时间累加在一起,便于我们统计。
3、同时我们对每一个取样器的执行时间进行统计。
4、如果事务控制器下的取样器有多个,那么只有每一个取样器都运行成功了,整个事务控制器定义的事务才算成功,这是充分必要条件。

// ************************* 【事务控制器】 参数说明 ************************* //
1、名称:事务控制器名称,可以随意设置,甚至可以为空。 

2、注释:可以随意设置,可以为空。 

3、Generate Parent sample:
是否生成父样本
[勾选:是;默认不勾选:否]

4、Include duration oftimer and pre-post processors in generated sample: 
是否在生成的样本中,包括计时器和前后处理程序的持续时间,即是否在取样器前与后加上延时
[勾选:是;默认不勾选:否]
// 建议大家不用勾选这个选项,不然统计就比较麻烦了,还需要扣除延时。 


四、Loop Controller【循环控制器】

循环控制器:循环控制器可以控制在其节点下的元件的执行次数,该控制器下的取样器请求可以循环运行。

// ********************* 【循环控制器】 执行次数计算规则 ******************** //
如果在线程组中也设置了执行次数,那么循环控制器下的元件的执行次数是:
循环控制器下的元件的执行次数 = 线程组执行次数 * 循环控制器执行次数

例如:线程组设置执行 3 次,循环控制器设置执行 6 次,那么其下的元件执行次数为 18 次。


// ************************* 【循环控制器】 参数说明 ************************* //
1、名称:循环控制器名称,可以随意设置,甚至可以为空。 

2、注释:可以随意设置,可以为空。 

3、循环次数:
永远:是否设置为永久循环
[勾选:是,那么控制器下的请求可一直运行;
默认不勾选且循环次数为1:否,填写具体的执行次数,在输入框中输入需要循环的次数,控制器下的请求即可循环运行]


五、While Controller【While 控制器】

While 控制器:While 条件控制器,当/判断控制器,其节点下的元件将一直运行直到 While 条件为 false 。

// ************************* 【While 控制器】 参数说明 ************************* //
1、名称:While 控制器名称,可以随意设置,甚至可以为空。 

2、注释:可以随意设置,可以为空。 

3、Condition(function or variable):
条件(函数或变量)
[填写:里面可填入判断依据的条件,接受变量表达式与变量]


// **************** 【Condition(function or variable)】 三个常量 **************** //
1、Blank:空白,当循环中有取样器失败后停止。
2、LAST: 最后一个值,当循环前有取样器失败则不进入循环。
3、Otherwise: 否则,当判断条件为 false 时停止循环。
// 条件可以是任何变量或函数,最终等于字符串” 假 ”。
// 需要注意的是:条件是评估两次,一次取样前,一次随机取样


六、Critical Section Controller【临界部分控制器】

临界部分控制器:
1、确保它的子元素(取样器/控制器等)在执行控制器的子程序之前,只执行一个线程作为指定的锁。
2、确保其子节点下的取样器或控制器将被执行(只有一个线程作为一个锁)。

// ************************* 【临界部分控制器】 参数说明 ************************* //
1、名称:临界部分控制器名称,可以随意设置,甚至可以为空。 

2、注释:可以随意设置,可以为空。 

3、Lock name:锁名
最好作为唯一值,这里可以填入其子节点下执行的线程的名称,这个线程作为一个全局锁存在
[默认填写:global_lock(全局锁)]


七、ForEach Controller 【ForEach 控制器】

ForEach 控制器:
1、即遍历循环控制器,顾名思义是定义一个循环规则。
2、用来遍历当前元素的所有可执行场景。
3、在用户自定义变量中读取一系列相关的变量,该控制器下的采样器或控制器都会被执行一次或多次,每次读取不同的变量值。
4、这个控制器一般配合配置元件 → 正则表达式提取器来一起使用,可对页面上的某些元素进行重复处理。

// ************************* 【ForEach 控制器】 参数说明 ************************* //
1、名称:While 控制器名称,可以随意设置,甚至可以为空。 

2、注释:可以随意设置,可以为空。 

3、输入变量前缀:
(1)在其中输入需要遍历的用户参数
(2)可以在"用户自定义的变量"中定义一组变量,ForEach 控制器可以从中获取到变量对应的值,
然后作为 ForEach 控制器的循环条件,还可以输出变量作为取样器的参数。

4、开始循环字段(不包含): 循环变量下标起点。
循环指数开始(唯一)→ 遍历查询的变量范围,开始的值
(这里如果不填写,默认从 1 开始,如果没有 1 开始的变量,执行时会报错)

5、结束循环字段(包含): 循环变量下标终点。 
循环指数结束(包含)→ 遍历查询的变量范围,结束的值

6、输出变量名称:ForEach 控制器生成的变量名称。
将遍历查询到的符合条件的用户参数赋值给输入变量(Vname),然后就可以在控制器下的取样器使用,
格式为:${输出变量名}

7、Add "_" before number?: 
输入变量名称中,变量前缀后是否加 "_" 作为分隔符?
[默认勾选:是;不勾选:否]


八、Include Controller【Include 控制器】

Include 控制器:
1、包含控制器,用于引用外部的Jmx文件、导入外部的测试片段(非完整的测试计划);
从而控制多个测试计划组合,在执行时会执行导入的测试计划。
2、但是被导入的测试计划有特殊要求,它不能有线程组,只能包含简单控制器及控制器下的元件。
3、简单点说就是相当于加了一个执行单元,一个封装了的业务操作单元,类似我们程序开发中的函数一样。
4、比如一个查询订单的业务操作我们用取样器来模拟,然后放到简单控制器中作为一个执行单元,
别的地方也要用到时,我们可以不重写直接引用过来,这就类似我们 Java 开发中的方法封装。

// ************************* 【Include 控制器】 参数说明 ************************* //
1、名称:Include 控制器名称,可以随意设置,甚至可以为空。 

2、注释:可以随意设置,可以为空。 

3、文件名:必输字段,如果没有则会报错。
包含测试计划的文件名,可以点击浏览,从文件夹保存的 JMX 文件夹目录下选择对应的 JMX 文件。


// ************************* 【Include 控制器】 使用方法 ************************* //
1、创建一个测试计划,下面可添加取样器/控制器等,然后保存测试计划,为了方便起见, 
线程组也可以添加外部JMX文件中用于调试;

2、如果测试使用Cookie或用户定义的变量,这些应放置在顶层(包括文件),否则无法正常工作;
此元素不支持变量/函数在文件名字段中;但是,如果属于包含控制器定义的内容,则使用前缀路径名。

3、当使用包含控制器中包含相同的JMX文件,则要确保文件名不同,以避免无法读取;
如果文件不能被发现,那么控制器会尝试打开文件名相对于JMX启动目录。


九、Interleave Controller【交替控制器】

交替控制器:交替控制器,其节点下的取样器会交替执行,使得该控制器包含的取样器步骤交错执行在每个循环中

// ************************* 【交替控制器】 参数说明 ************************* //
1、名称:交替控制器名称,可以随意设置,甚至可以为空。 

2、注释:可以随意设置,可以为空。 

3、忽略资控制器块:jmeter 汉化错别字,应为——忽略子控制器模块
忽略子控制器,即子控制器失效,由交替控制器接管。
[勾选:如果勾选此项,交替控制器将子控制器像单一请求元素一样,一次只允许一个请求/控制器;
默认不勾选:否]

4、Interleave across threads:是否跨线程交错
[勾选:是;默认不勾选:否]

// ************************* 【交替控制器】 使用方法 ************************* //
假使该控制器下有2个取样器 A 和 B ,交替执行 A 和 B 2个请求,即每次传递一个子请求到这个测试,按子元件的排列顺序。


十、Once Only Controller【仅一次控制器】

仅一次控制器:
1、在多线程循环的时候,将使其子节点下的取样器请求只运行一次。
2、也就是此控制器下的子元件只运行一次,即使把仅一次控制器放在循环控制器下面,也只是运行一次。
3、我们在模拟请求时有时只需要登录一次,就可以把登录的部分放在仅一次控制器下。

// ************************* 【仅一次控制器】 参数说明 ************************* //
1、名称:仅一次控制器名称,可以随意设置,甚至可以为空。 

2、注释:可以随意设置,可以为空。 


十一、Random Controller【随机控制器】

随机控制器:
1、类似交替控制器,但该控制器随机选取某一个取样器请求并执行。
2、随机控制器节点下的元件随机运行,与交替控制器不一样的是节点下的元件运行顺序不定。

// ************************* 【随机控制器】 参数说明 ************************* //
1、名称:随机控制器名称,可以随意设置,甚至可以为空。 

2、注释:可以随意设置,可以为空。 

3、忽略资控制器块:jmeter 汉化错别字,应为——忽略子控制器模块
忽略子控制器,即子控制器失效,由随机控制器接管。
[勾选:如果勾选此项,随机控制器将子控制器像单一请求元素一样,一次只允许一个请求/控制器;
默认不勾选:否]


十二、Random Order Controller【随机顺序控制器】

随机顺序控制器:
1、类似于简单控制器,将执行每个子节点下的取样器请求一次,但是执行是随机的。
2、其节点下的元件随机执行,不过每个元件只执行一次。

// ************************* 【随机顺序控制器】 参数说明 ************************* //
1、名称:随机顺序控制器名称,可以随意设置,甚至可以为空。 

2、注释:可以随意设置,可以为空。 


十三、Recording Controller【录制控制器】

录制控制器:
1、顾名思义是录制的时候用到的,类似代理服务器的作用,在测试执行期间记录测试样本。
2、实际上它是一个位置,当我们用 JMeter 代理进行录制时,录制的脚本默认放在此控制器的节点下面。
3、没有实际的逻辑作用,我们用简单控制器也可以代替它。

// ************************* 【录制控制器】 参数说明 ************************* //
1、名称:录制控制器名称,可以随意设置,甚至可以为空。 

2、注释:可以随意设置,可以为空。 

3、Clear all the recorded samples:清除所有记录的样本
[点击可以清除所有已经记录的测试样本]


十四、Runtime Controller【Runtime 控制器】

Runtime 控制器:生命周期/运行周期控制器,用来控制其子元件的执行时长,时长的单位是秒。

// ************************* 【Runtime 控制器】 参数说明 ************************* //
1、名称:Runtime 控制器名称,可以随意设置,甚至可以为空。 

2、注释:可以随意设置,可以为空。 

3、Runtime (seconds): 执行时长(运行时间)
[默认为 1 ;去掉 1 则默认为 0 ,此时不执行其节点下的元件;其他自定义修改数字。]


十五、Simple Controller【简单控制器】

简单控制器:
1、用来指定了一个执行单元,它不改变元件的执行顺序。
2、在简单控制器下面还可以嵌套其他控制器。
3、简单控制器是最基本的控制器,对jmeter测试运行没有任何影响,可用来命名某些操作。

// ************************* 【简单控制器】 参数说明 ************************* //
1、名称:简单控制器名称,可以随意设置,甚至可以为空。 

2、注释:可以随意设置,可以为空。 


十六、jp@gc - Parameterized Controller

jp@gc - Parameterized Controller:
1、jp@gc - 参数化控制器,可以通过JMeter插件来监控服务器CPU、内存、磁盘、网络等相关资源。
2、安装服务器监控插件后,此控制器才会出现:
其中 JMeterPlugins-Standard 和 JMeterPlugins-Extras 是客户端的,ServerAgent 是服务端的。

// ****************** 【jp@gc - Parameterized Controller】 参数说明 ****************** //
1、名称:jp@gc - Parameterized Controller名称,可以随意设置,甚至可以为空。 

2、注释:可以随意设置,可以为空。 

3、Help on this plugin :关于此插件的帮助
[点击查看官方说明文档]

4、用户定义的变量
(1)名称:用户定义的所有变量的总名称,可以随意设置,甚至可以为空。 
(2)注释:可以随意设置,可以为空。 
(3)列表:
● 名称:用户定义的变量名
● 值:用户定义的变量值
● Description:描述
[按钮:详细、添加、从剪切板添加、删除、向下、向上]


十七、Throughput Controller【吞吐量控制器】

吞吐量控制器:
1、应该译为:流量控制器,jmeter自带的翻译这里是错误的,因为它并不能控制吞吐量。
2、吞吐量控制器,用来控制其下元件的执行次数,并无控制吞吐量的功能,
其实质作用是允许用户控制执行的频率。
3、想要控制吞吐量可以使用定时器: Constant Throughput Timer 。
4、吞吐量控制器有两种模式: Total Executions 与 Percent Executions 。

// ************************* 【吞吐量控制器】 参数说明 ************************* //
1、名称:吞吐量控制器名称,可以随意设置,甚至可以为空。 

2、注释:可以随意设置,可以为空。

3、下拉框:吞吐量控制器模式二选一
(1)Percent Executions [默认]:执行百分比
● 使控制器按一定比例执行迭代的测试计划
● 按执行次数的百分比来计算执行次数,此时“吞吐量”取值是 0~100 。
(2)Total Executions:总执行次数
● 使控制器停止执行一定数量的测试计划
● 按 Throughput 的值来指定执行次数,此时“吞吐量”可以是任意整数,如果小于等于零则一次也不执行。

4、吞吐量:流量
(1)Percent Executions 模式下:执行百分比,取值是 0~100
(2)Total Executions 模式下:总执行次数,任意整数

5、Per User:是否所有虚拟用户
(1)Percent Executions 模式下:Per User 是否勾选对此模式无影响。
(2)Total Executions 模式下:此时 Per User 与 Total Executions一起来影响执行次数。
[勾选:是,按虚拟用户数来计算执行次数;默认不勾选:否,按所有虚拟用户来计算执行次数]


十八、Module Controller【模块控制器】

模块控制器:可以通过模块控制器在当前测试计划中引入新的测试片段(也可以叫脚本片段,由控制器、
取样器及辅助元件构成,能够完成负载的模拟)。

// ************************* 【模块控制器】 参数说明 ************************* //
1、名称:模块控制器名称,可以随意设置,甚至可以为空。 

2、注释:可以随意设置,可以为空。

3、Find target element:查找目标元素
寻找测试计划中需要特定测试的元素、模块,也可理解为该控制器可以控制已经封装好的模块元素
[点击此按钮,再点击 “Module To Run” 下的原件,模块控制器会直接切换跳转到该元件。
不点击此按钮,点击 “Module To Run” 下的原件,依旧停留在模块控制器。]

4、Module To Run: 模块运行下拉列表
列出了测试计划及工作台包含的控制器,在此选择需要引入其中的一个脚本片段。


// *************************** 【模块控制器】 作用 *************************** //
● 一个测试计划由一个控制器和所有的测试元素(取样器等)组成,测试计划可以位于任何线程组或工作台;
如果计划位于线程组,则可以禁用其他控制器,防止正在运行的测试计划被影响(除了模块控制器)

● 模块控制器的优势在于:当存在多个线程组时,该控制器可以轻松切换,只需要选择对应的取样器,
方便快捷,替代了创建很多测试计划的繁琐操作

● 任何一个模块所用的控制器名字必须唯一,因为其名字被用来找到目标控制器时重新加载;
出于这个原因,最好保证控制器名字不同,否则执行测试时候可能发生意外

● 模块控制器与远程测试不应使用或非gui测试与工作台部件,因为工作台测试元素并没有测试计划的
一部分 jmx 文件,任何这样的测试就会失败。


十九、Switch Controller【Switch 控制器】

Switch 控制器:
1、Switch 条件控制器,转换控制器,类似于高级语言中的 Switch 逻辑控制语句,
通过给该控制器中的 value 赋值,来指定运行哪个取样器(也可以理解为开关控制器)。
2、例如指定运行的取样器编号为 0 (JMeter 会给节点下的取样器顺序编号,第一个取样器 "Java 请求"编号为 0 ,
第二个取样器"Java 请求 2" 的编号就是 1 ,所以这里指定 0 就会运行第一个 Java 请求)。
3、如果指定的编号超出了下面的节点数或者不指定,则运行第 0 个取样器。
4、也可以指定取样器的名称,名称匹配时大小写及空格都敏感,如果匹配不上则不运行取样器。

// ************************* 【Switch 控制器】 参数说明 ************************* //
1、名称:Switch 控制器名称,可以随意设置,甚至可以为空。 

2、注释:可以随意设置,可以为空。

3、Switch Value:控制器具体赋值的 value 值字段
(1)第一种是数值:Switch控制器下的子节点从0开始计数,通过指定子节点所在的数值来确定执行哪个元素。
(2)第二种是字符:直接指定子元素的名称,比如取样器名称来进行匹配。
● 当指定的名称不存在时,不执行任何元素。
● 当 Value 为空时,默认执行第 1 个子节点元素。

猜你喜欢

转载自blog.csdn.net/qq_39720249/article/details/88633325