jmeter使用if控制器_性能工具之Jmeter小白入门系列之三

本文详细介绍了JMeter的各种逻辑控制器,包括If Controller的使用,Transaction Controller如何组织性能指标,Loop Controller的循环逻辑,还包括了Include Controller、Module Controller、Throughput Controller等的操作步骤和应用场景,帮助读者深入理解JMeter的性能测试控制。
摘要由CSDN通过智能技术生成

e02494bf7519f32110f213fba0bd686b.png

          冬去春来盼岁月,万物本来无一影;

     在上一讲中简单展示了常用组件,大家也只是有一个大概的概念,但是没有详细讲解怎么使用,这一讲中咱们聊一聊几个组件的常用规则。也许不是完全正确,可以参考下;

一、Logic Controller:逻辑控制器

      先介绍下逻辑控制器,如图:

2f51e605545dbac2aafdc63b6695918d.png

Logic Controller大概可分为两类: l  控制测试计划执行过程中节点的执行顺序,如:Loop Controller、If Controller等; l  对测试计划中的脚本进行分组、方便JMeter统计执行结果以及进行脚本的运行时控制等,如:Throughput Controller、Transaction Controller

1、If Controler:If控制器

e785bce78753d5c59923e3af3cfd9859.png

说明:

作用 :根据给定表达式的值决定是否执行该节点下的子节点。 参数Condition(evaluated with javascript) :用javascript的解释器执行代码,返回  " true " 或者  "false" 。 Expression (must evaluate to true of false): 表示判断变量值是否等于字符串true或者false(不区分大小写)。比如: ${JMeterThread.last_sample_ok} 用来判断上个线程是否执行成功 Evaluate for all children :选中此项表示在每个子结点执行前都会计算表达式  Interpret Condition as Variable Expression? :选中此项表达式的条件为: Expression (must evaluate to true of false),不勾选为:Condition(evaluated with javascript)如:1、添加线程组

58f24d5a974030655da55caefc96d277.png

2、添加if逻辑控制器

4d8c3effcf294c4556df7298746b382a.png

注:

      1、文本框上的黄色感叹号,就是提示你,建议采用__jexl3 or __groovy 表达式,以提高性能,也就是默认的方式。

      2、if 控制器 只能作用于其下的子项

3、添加结果查看树

40946d247bbbc0666e177d56bb8821ee.png

说明:

咱们再设置num初始值为7,但是条件判断中显示的是8;通过验证该if控制器生效。

假如把if控制器设置为8,查看结果为:

de3056e5564117908345b8052a909ac3.png

显示:

90472fa88191fb84aeff2c0bd0a7a41f.png

2、Transaction Controller:事务控制器

b4135b97b9edb1b8ba3974b2e1de3acf.png

作用

     用于将Test Plan中的特定部分组织成一个Transaction,JMeter中Transaction的作用在于,可以针对Transaction统计其响应时间、吞吐量等。比如说,一个用户操作可能需要多个Sampler来模拟,此时使用Transaction Controller,可以更准确地得到该用户操作的性能指标,如响应时间等。这个时间包含该控制器范围内的所有处理时间,而不仅仅是采样器的。

参数:

      Generate parent sample:勾选后,所有的结果将在父结点中展示(一般要勾选)

      include duration of timer and pre-post processors in generated sample:勾选后会统计定时器(timer)的时间,否则只统计采样器(sample)的时间

演示:1、增加线程组2、增加事务控制器     增加两个请求3、添加聚合报告如图:

5f886a375c909577e4bee0bb614e7df2.png

第一个请求:

111ac3cb1a1324c385664d61a9acb48e.png

第二个请求:

c9c8c2498c8e82bd565c2761b3f984fe.png

添加聚合报告

6d095e7c5b8642dbca9edde981af7ef9.png

运行结果: 把请求全部统计到一个事务中去,并且显示每请求信息;

8efb2f72cbf663fc66b821cb2b15f6b0.png

修改事务控制:

e1d8a5f075b8349b1d8b4dd5c34a6e46.png

运行查看结果显示,勾选后把所有请求合并到一个事务中:

7b862db4944a1ac71576bdce3283ab32.png

 3、Loop Controller:循环控制器

f42c92998799930239a9f4c240e231dc.png

作用 :指定 子节点 运行的次数,可以使用具体的数值,也可以使用变量 参数: l  Forever选项:勾选上这一项表示一直循环下去 l  如果同时设置了线程组的循环次数和循环控制器的循环次数,那循环控制器的子节点运行的次数为两个数值相乘的结果。操作步骤:1、添加线程组

b57b2a729b5746f862b724faf79c2c3c.png

2、添加Loop Controller控制器 25e478c8ddd7f645353a24cae33abdb7.png3、添加简单java请求【目的为了学习所以才有java 请求】

dcb0489460f85ac6231dc0caa51190c7.png

4、添加结果查看树

df08613d9e58109ff1c83da67ed78655.png

点击请求查看结果树:

8ded28d1ccbf9502babde2a0fa229288.png

如果勾选如图,表示永远执行

611c5ac34455aa833fe365135cd6dd9e.png

如图:

ddb42c6705e397c54b316258f39344ca.png

4、Once Only Controller:仅一次控制器

2f1cbbe91c59daa4aa15df35149f194b.png

作用:在测试计划执行期间,每个线程内,该控制器下的子内容只执行一次,无论循环多少次都只执行一遍。登录场景经常会使用到这个控制器。

注意:将Once Only Controller作为Loop Controller的子节点,Once Only Controller在每次循环的第一次迭代时均会被执行。

1、添加线程组

b15b2bcb5c3c8031fa68c3f4cacf0362.png

2、添加

4d90172e6a8e979b51ff7e659d84da4f.png

3、添加java请求

696e730cefea0edb5d5cad26aa9ccff1.png

4、添加结果查看树

bc0171d923754c3e8ce4f70797cb9885.png

5、效果

20a46ba143557dc69b23e3c863b89a90.png

5、 Include Controller:包含控制器

b8b39af2e30883fe2156b66aa826895c.png

作用:引用外部的脚本,用来导入外部测试片段(),在执行时会导入。但是导入的测试片段不能包含线程组,只能包含简单的控制元件及控制元件下的子元件(controller和sampler)

操作步骤

1、添加线程组

2、添加Include Controller插件

fd985bc66e7ad00ca724d8cda8f7bad4.png

选择脚本:

添加:{Test Fragment}片段脚本

3f2d3ff240652226edc6af47c3901cb3.png

添加到Include 中

de06a2212cf4b1ba4858759973e0f929.png

3、添加结果查看树

0e9eb33e7a81e4db668de7b51fec9143.png

6、 Module Controller:模块控制器

作用:可以快速的切换脚本,不用来回的新建,方便脚本调试

1、添加两个【Test Fragment】并且在两个模块下新建两个测试【Test Fragment  -1】

如上图、添加模块控制器;

操作步骤

1、添加线程组

225834d6a0e83b20a531f1b44798ae92.png

2、添加 module controller

选择第一个模块点运行:

68688fff78b92c3b144f61e08299dd24.png

结果:

9bb2d9f008dc8f25e83ad1dcbcf5db87.png

3、选择第二模块

6a4dbefdbb7769d1a196e7193cbe7884.png

4、添加结果查看树

feeade422088fe816c0269fd7699c93a.png

说明:

通过这个模块可以轻松控制两个模块切换

7、 Throughput Controller:吞吐量控制器

e6d2d1aa33d8ca33e03b176907d3b7ad.png

9ef65d82d1f96d19a6efee5ab5a97994.png

作用:控制其下的子节点的执行次数与负载比例分配,也有两种方式:

l Total Executions:设置运行次数,单位为次

勾选Per User:

1.线程数*循环次数>=线程数*吞吐量时,Total Executions模式的执行次数=线程数*吞吐量。

2.线程数*循环次数

不勾选Per User:

1.线程数*循环次数<=吞吐量时,Total Executions模式的执行次数=线程数*循环次数。

2.线程数*循环次数>吞吐量时,Total Executions模式的执行次数=吞吐量。

l Percent Executions:设置运行比例(1~100之间),单位为%

不管Per User是否勾选,按Percent Executions模式的执行次数都不受Per User影响,Percent Executions模式的执行次数=线程数*循环次数*吞吐量%。(循环次数=线程组循环次数*循环控制器循环次数)

l Per User:勾选该项的话则按虚拟用户数(线程数)来计算执行次数,不勾选则按所有虚拟用户数来计算执行次数

操作步骤

1、添加线程组

79e8ec5802b440af318b306326d089a5.png

2、添加  7DGroup - Throughput Controller

cbb23e9b21462c348f24749a4a7b74f9.png

3、添加java请求

0340b81fd15e77df92f4a1af9da568c2.png

4、添加结果查看树

ea672b11c476d8801faefa36cb7370a5.png

5、效果

d7dcb0e46234cd2fff6efa235bac04ad.png

8、 Runtime Controller:时间控制器

68533da7853d8fa3837cd83176c162fb.png

作用 :用来控制其子元件的执行时长 参数 : Name:名称,可以随便填写 Comments:注释,可以随便填写,可以为空 Runtime(seconds):其下组件执行时长,默认为1秒,为0表示其下的组件不执行。 注意:如果此控制器设置的时间指的是该控制器下子节点的执行时间,Thread Group中设定的时间是整个线程组的整体执行时间。一般线程组中的时间要比Runtime Controller设定的时间要大,Runtime Controller设定的时间到了之后,执行Thread Group中其他组件,如果没有其它组件的话会继续执行Runtime Controller中的内容。如果Thread Group中设定的时间比Runtime Controller中设定时间小的话就会按线程组中顺序执行,执行时间到了的话就不会执行Thread Group后面的请求。

操作步骤

1、添加线程组

5760ee1096743ae1d49ff28ffa3c46df.png

2、添加Runtime Controllerr如图

b72ed4724ec48ac20f3e69115e72d345.png

3、添加http请求

添加第一请求

f9d56d1020b7a0a735103d5968284b9b.png

添加第二个请求

8ba13ce4421bbfb339ced03e20c4d04f.png

4、添加View Results in Table

c120b3d9b72e818cf77ffc2ef1309dba.png

9、 Interleave Controller:交替控制器

9db978953d996dc74f0602d646a8dc36.png

作用:每次循环中交替执行不同的controller中请求

参数:

ignore sub-controller blocks:勾选后,子控制器每次只能发起一个请求

Interleave accross threads:勾选之后,第1次循环执行第一个子元素、第2次循环2执行第二个子元素、第3次循环执行第三个子元素。。。

操作步骤

1、添加线程组

46f74d3f0fb1edacaf67f2dc77841a65.png

2、添加Interleave Controller

6d4bed292e349d2164cd7c0782e1034a.png

3、添加http请求

06b6eeb29e1bb8c8b0457e0d994489f3.png

4、添加结果查看树

0074357dcac6b75aa462f0d03a98abf6.png

10、Random Controller:随机控制器

3b77d052dca42abcbc1c688ecf626310.png

作用:随机执行其下的子节点

操作步骤

1、添加线程组

0eacdcfbd622b2dc5cc7fa5c5cf1e308.png

2、添加Random Controller

5f91a7ceb8232205d5fae54eb1626f5a.png

3、添加http请求

2ee0b5ccb27f87fd54210320ba7b55d4.png

4、添加结果查看树

dccb5a5d3d015beaed53adeb26386c34.png

11、 ForEach Controller

21a06d4fb6e7fb1a8716c74505a8fc74.png

作用 :依次调用用户定义的变量,直到最后一个,结束循环。为了满足ForEach Controller提取数据,变量命名的格式一般为“变量名_数字 ” ,其中数字从1开始。 参数说明Input variable prefix :输入变量的前缀,也就是自定义变量的前缀; Start index for loop(exclusive) :循环的起始索引index,但是不包含当前值。也就是从index+1开始。 End index for loop(inclusive) :循环结束的索引,包含这个值。 Output variable name :输出的变量名,后续可通过${}引用 Add "_" before number? :如果定义的变量名中有下划线的话就要勾选此项,否则找不到;反之,没有的话不要勾选,否则同样找不到变量

操作步骤

1、添加线程组

8b673ed0cf5ccebdea64bdf3244c66a6.png

2、添加ForEach Controller

fccd863c421d6e72b09bc71a21a84ad4.png

3、添加http请求

fd2e51802eb81ee7cc8dfae52fa1846d.png

4、添加结果查看树

d6fec9e521bbafdedb1e4ce33cdfb212.png

5、效果

9f07016889b7fe661edfdcd7e0bb74ef.png

eced1bd8f4e9998222e1f458dfa616d0.png

12、 Switch Controller

140af820c61d79e73eda289b02ba32ba.png

作用:和编程语言中的switch语句类似,执行Switch Value中指定的请求

参数说明:

Switch Value:指定请求的索引或者名称,索引从0开始,如果没有赋值,或者索引超过请求个数的话就执行第0个请求。

操作步骤

1、添加线程组

70820eb2d21af19fe4fea5e88095a96f.png

2、添加Switch Controller

3ae4ecd37fcf1b881f704a94fa7546ed.png

设置条件为2:

1645f0978b51c3979bf616017ee2e6db.png

3、添加http请求

b2611ddf5ff5262e117730a0ddd76b58.png

4、添加结果查看树

b00b9472b25d68d8dd8fb70ccbce9bba.png

运行结果从索引0开始;

f3d14b164b9c014cc2cacb71559783c7.png

   

在这里引用一句诗送给在阅读的自己

尘劳迥脱〔唐〕希运

尘劳迥脱事非常,紧把绳头做一场。

不是一番寒彻骨,争得梅花扑鼻香。

24da9017cc63e5ee868b06939a274cef.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值