逻辑控制器

JMeter逻辑控制器可以对元件的执行逻辑进行控制,除仅一次控制器外,其他控制器下可以嵌套别的种类的逻辑控制器。

jmeter所有版本下载路劲:https://archive.apache.org/dist/jmeter/binaries/

逻辑控制器

ForEach Controller(循环控制器)

功能描述:定义一个循环的规则


ForEach Controller(循环控制器)

参数说明

名称:控制器名称,可以随意设置,甚至可以为空。

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

输入变量前缀:可以在"用户自定义的变量"中定义一组变量,循环控制器可以从中获取变量对应的值,

然后作为循环控制器的循环条件,还可以输出变量作为取样器的参数。

Start index for loop:循环变量下标起点。

End index for loop:循环变量下标终点。

输出变量名称:循环控制器生成的变量名称。

Add “_” before number?:变量前缀后是否加"_" 作为分隔符。

现在我们来看一个例子。

首先我们访问一个页面,然后用正则表达式提取这个页面所有链接,然后用ForEach Controller(循环控制器)来循环遍历所有的链接。

(1)访问http://jmeter.apache.org/demos/


HTTP请求

(2)正则表达式提取第一步操作返回的所有链接。


正则表达式提取器

(3)添加一个ForEach Controller


ForEach Controller控制器

(4)在ForEach controller中添加一个http请求,访问参数由ForEach controller循环控制传递过来。


http请求2

(5)添加一个监控器——观察结果树,运行完成后我们就可以看到示例脚本都被我们下载下来了。


观察结果树

Simple Controller(简单控制器)

功能描述:是JMeter中最简单的一个Controller。该Controller仅用于对测试计划    中的元件进行分组,不具有任何的逻辑控制或运行时的功能。

Include Controller

功能描述:用来导入其他的测试计划片段,但他有特殊要求,被导入的测试计划不能有线程组。只能包含简单控制器及控制器下的元件。

类似我们程序开发中导入一个封装好的一个函数一样。

参数说明

名称:可以随意设置,最好是有意义。

注释:可以随意设置

文件名:被引入的文件路径,必输字段,如果没有则会报错。


Simple Controller(简单控制器)

Runtime Controller

功能描述:用来控制其子元件的执行时长,时长的单位是秒。

参数说明

名称 :可以随意设置,最好是有意义。

注释:可以随意设置,最好是有意义。

Runtime(seconds):默认为1,去掉1默认为0,此时不执行其节点下的元件。


Runtime Controller

Switch Controller

功能描述:Switch条件控制器,类似于高级语言中的Switch逻辑控制语句。

参数说明

名称:可以随意设置,最好是有意义。

注释:可以随意设置,最好是有意义。

Switch Value:指定运行的取样器编号。匹配值,可以为数字,也可以为字符。为字符时匹配取样器名称,如果匹配不上就会默认

找取取样器名称为default的取样器,如果没有则不允许。

一个简单的例子。


Switch Controller

如图所示,指定运行的的取样器编号为0(JMeter会给节点下的取样器顺序编号,第一个取样器“java请求1”编号为0,第二个“取样器java请求2”的编号寄是1,所以这里指定0就会运行第一个java请求1)。如果指定的编号超出了下面的节点数或者不指定,则运行第0个取样器。另外也可以指定取样器的名称,名称匹配时大小写及空格都敏感。如果匹配不上则不运行取样器。

while Controller

功能描述:while条件控制器,其节点下的元件将一直运行直到while条件为false。

名称:可以随意设置,最好是有意义。

注释:可以随意设置,最好是有意义。

Condition:接受变量表达式与变量, 如:input < 10当条件不满足时一直循环下去,另外提供了三个常量。

    Blank:当循环中有取样器失败后停止。

    LAST:当循环前有取样器失败则不进入循环。

    Otherwise:当判断条件为false时停止循环。


while Controller

Interleave Controller(交替控制器)

功能描述:交替控制器,其节点下的取样器会交替执行,比如,1个线程,循环执行三次,第一次1号取样器执行,第二次2号取样器执行,第三次1号执行。

参数说明

名称:可以随意设置,最好是有意义。

注释:可以随意设置,最好是有意义。

Ignore sub-controller blocks:忽略子控制器,即子控制器失效,由交替控制器接管。

一个简单的例子


Interleave Controller(交替控制器)

如图,假如我们设置线程组执行1个线程,循环3次,那么执行顺序是:java请求1、java请求3、java请求2、java请求3、java请求1、java请求3

交替控制器下只有两个元件,所以交替完一次后从新开始。即第三次执行时顺序是java请求1、java请求3。

现在是勾选忽略子控制器的例子


Interleave Controller(交替控制器)

如图,交替控制器下有一个循环控制器,此时勾选忽略子控制器,设置1个线程执行4次,则执行顺序是:java请求1、java请求2、java请求3、java请求1

下面再来个复杂点的测试计划,我们让交替控制器嵌套一下


观察结果树

Once Only Controller(仅一次控制器)

功能描述:仅一次控制器,也就是此控制器下的子元件只运行一次,即使把仅一次控制器放在循环控制器下面,也只是运行一次

一个简单的例子


Once Only Controller(仅一次控制器)

如图,我们设置1个线程,循环控制器设置3次,可以看出java请求2只执行了一次。

我们在模拟请求时,有时只需要登录一次,就可以把登录的部分放在仅一次控制器下。

Throughput Controller(吞吐量控制器)

功能描述:用来控制其下元件的执行次数,并无控制吞吐量的功能,想要控制吞吐量可以使用Constant Throughput Timer

参数说明

名称:可以随意设置,最好是有意义。

注释:可以随意设置,最好是有意义。

Percent Executions:按执行次数的百分比来计算执行次数,此时Throughput(吞吐量)取值是0-100,Per User是否勾选对Percent Executipns模式无影响。Percent Executions模式的执行次数=线程数*循环次数*吞吐量%。

ps:循环次数=线程组循环次数*循环控制器循环次数。

Total Executions:按Throughput(吞吐量)的值来指定执行次数,可以是任意整数,如果小于等于0则一次也不执行。此时Per User与Total Executions一起来影响执行次数。

    当勾选Per User时:

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

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

    当不勾选Per User时:

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

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


Throughput Controller(吞吐量控制器)

If Controller

功能描述:条件控制器,可以通过某个条件来控制此节点下的元件是否运行。Condition可以使用javaScript与变量表达式。

参数说明

名称:可以随意设置,最好是有意义。

注释:可以随意设置,最好是有意义。

Condition:判断条件,勾选Interpret Condition as VarEvaluate for all childreniable Expression?时Condition使用变量表达式来设置条件。

Evaluate for all children:判断条件是否针对所有的子节点,默认不勾选,只在If Controller的入口处判断一次。

一个简单的例子


If Controller
观察结果树

可以看出这就相当于语言里的if条件判断,当条件满足才会执行if控制器里的元件。

Module Controller(模块控制器)

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

参数说明

名称:可以随意设置,最好是有意义。

注释:可以随意设置,最好是有意义。

Module To Run:列出测试计划及工作台包含的控制器,在此选择引入哪一个脚本片段。

一个简单的示例



引用测试片段的控制器


观察结果树

如图,我们有一个循环控制器放在Test Fragment(测试片段)中。测试片段中的元件是不参与测试计划运行的,但是我们可以把它引入到模块控制器中,如果我们在线程组中循环3次,那么脚本的执行顺序是:线程组、循环控制器、java请求1、java请求1、java请求1

另外,模块控制器也可以引入当前测试计划中的控制器。


引用测试计划内的控制器
观察结构树

如图,我们让模块控制器引入仅一次控制器,如果我们在线程组设置循环3次,那么执行此控制器就会执行2次,为什么不是3次呢?

因为模块控制器调用一次,顺序往下他自己也要执行一次,即在第一轮循环时仅一次控制器执行了2次,第2、3次循环就不再执行了。

因为使用的是仅一次控制器,所以循环多少次都没有作用了。

Random Controller(随机控制器)

功能描述:随机控制器节点下的元件随机运行,与交替控制器不一样的是节点下的元件运行顺序不定。

参数说明

名称:可以随意设置,最好是有意义。

注释:可以随意设置,最好是有意义。

Ignore sub-controller blocks:忽略子控制器,即子控制器失效,由随机控制器接管,类似交替控制器。

Random Controller(随机控制器)

Loop Controller(循环控制器)

功能描述:循环控制器可以控制在其节点下的元件的执行次数,如果在线程组中也设置了执行次数,那么循环控制器下的元件的执行次数是:线程组执行次数*循环控制器执行次数。

参数说明

名称:可以随意设置,最好是有意义。

注释:可以随意设置,最好是有意义。

Loop Count:要么设置Forever(永远),要么填写具体的执行次数,二选一


Loop Controller(循环控制器)

我们设想一个场景:

一个用户登录进入系统,一上午都在忙物流计划,我们模拟此业务过程应该是登录一次,然后无数次地循环做物流计划。


循环控制器

如图,我们利用循环控制器来循环物流计划这个取样器,然后用仅一次控制器让用户登录只会执行一次。

Recording Controller(录制控制器)

功能描述:录制控制器,顾名思义是录制的时候用到的,实际上它是一个位置,当我们用JMeter代理进行录制时录制的脚步默认放在此控制器的节点下面。没有实际的逻辑作用,我们用简单控制器也可以代替它

参数说明

名称:可以随意设置,最好是有意义。

注释:可以随意设置,最好是有意义。

clear all the recorded samples:清除所有记录的样本。

Transaction Controller(事务控制器)

功能描述:事务响应时间是我们衡量业务性能的主要指标,事务控制器可以把其节点下的取样器执行消耗时间累加在一起,便于我们统计。同时我们对每一个取样器的执行时间进行统计。

如果事务控制器下的取样器有多个,那么只有每个取样器都运行成功了,整个事务控制器定义的事务才算成功。

参数说明

名称:可以随意设置,最好是有意义。

注释:可以随意设置,最好是有意义。

Generate Parent sample:选择是否生成一个父取样结果。

不勾上时


不勾选 Generate Parent sample



观察结果树
聚合报告


勾上时


勾选 Generate Parent sample



观察结构树
聚合报告

Include duration of timer and pre-post processors in generated sample:是否包含定时器,选中将在取样器前与后加上延时,建议不勾选。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容