jmeter(十七)逻辑控制器
JMeter中的Logic Controller用于为Test Plan中的节点添加逻辑控制器。
JMeter中的Logic Controller分为两类:一类用来控制Test Plan执行过程中节点的逻辑执行顺序,如:Loop Controller、If Controller等;另一类则与节点逻辑执行顺序无关,用于对Test Plan中的脚本进行分组、方便JMeter统计执行结果以及进行脚本的运行时控制等,如:Throughput Controller、Transaction Controller。
一、控制Test Plan中的节点执行顺序的Logic Controller
1、ForEach Controller:类似于编程语言中的for each语句。如下图:

通常情况下,ForEach Controller常与Regular Expression Extractor配合使用。
2、If Controller:类似于编程语言中的if语句,根据给定表达式的值决定是否执行该节点下的子节点。如下图:

注意:条件判断语句如果是字符串一点要在参数前加引号,如:a."${foreach_city}"=="beijing" b."${foreach_city}"!="beijing"
如果选中“Evaluate for all Children”选项,则该Controller在每个子节点执行时执行一次,否则,该Controller仅在入口执行一次。
3、Interleave Controller:在每次迭代时,顺序选取该节点下的一个子节点执行。如下图:

如果选中“Ignore sub-controller blocks”选项,则该Controller将其下的子Controller当成单一元素处理,并仅允许每个子Controller一次发出一个请求。
在该示例中,设置迭代次数为4次,节点的执行顺序是:Req1-HTTP Request –Req2—HTTP Request—Req3—HTTP Request.
4、Loop Controller:简单地为其下的子节点运行指定次数。如下图:

5、Once Only Controller:是为了让Test Plan中的某些内容在整个Test Plan的执行期间对每个线程仅执行一次(例如,每个线程仅需要执行一次“登录”操作)。如:将Once Only Controller作为Loop Controller的子节点,Once Only Controller在每次循环的第一次迭代时均会被执行。如下图:

6、Random Controller:每次执行时,从其子节点中随机选取一个来执行。如下图:

7、Random Order Controller:每次执行时,按照随机产生的顺序执行其下的所有子节点。注意,该Controller与Random Controller的不同之处在于,Random Controller只选择执行其所有子节点中的一个,而Random Order Controller则按照随机顺序全部执行该Controller下的所有子节点。

8、Switch Controller:类似程序语言中的switch函数,该Controller根据给定的值n(可以使用参数)选择执行其下的第n+1个子节点。如下图:


需要注意的是,Switch Controller只接受整数值,并且给定的值n是以0为基础的,因此当给定的值“2”时,意味着该Controller下的第3个子节点会被执行。同时,Switch Controller接受参数作为其值。
9、While Controller:是另一个用于控制循环的Controller。可以为该Controller设置一个Condition.Condition的取值可以为以下三者之一:
空:如果Condition取值为空,则该Condition迭代执行Controller下的所有子节点,直到最后一个子节点返回失败为止。需要注意的是,如果不是最后一个子节点失败,而是该Controller中的其他子节点失败,该Controller不会停止,而会继续循环执行过程。
LAST:如果Condition取值为字符串LAST,则该Controller迭代执行Controller下的所有子节点,直到最后一个子节点返回失败为止(与Controller为空时的行为相同)。同时,如果该Controller的上一个节点失败,则Test Plan在执行时不会进入该Controlller。
表达式:除了为空和LAST外,Controller还可以取一个表达式。当Controller取值为表达式时,如果表达式的取值是字符串false,While Controller就退出循环。以下列出了几个可用的表达式:
${VAR}:当参数VAR的值被设置成false时退出循环。
${__javascript(“${VAR}”==”dennis”)}:当参数VAR的值不为dennis时退出循环。
${_P(myproperty)}:当属性myproperty的取值为false时退出循环。
二、其它Logic Controller
除了以上的9种Logic Controller外,JMeter还支持其他7种Logic Controller.
1、Include Controller:用于在Test Plan中包含一个外部的jmx文件。
在Test Plan运行时,被包含的jmx文件中测试计划中不能有线程组,只允许有一个Simple Controller和该Simple Controller下的子节点(可添加任何采样器,控制器),不允许有Cookie Manager、User Defined Variable等。
如果用户需要使用Cookie Manager或者 用户自定义变量,都应该在顶层的测试计划中设置,不应该包含在外部文件中,否则不会它们不会起作用。
注意:被包含文件中的Simple Controller及其子节点将会替换Test Plan中的Include Controller.
外部jmx文件结构图:

主测试计划图:

2、Simple Controller:如同该Controller的名称,是JMeter中最简单的一个Controller。该Controller仅用于对Test Plan中的元件进行分组,不具有任何的逻辑控制或运行时的功能。

3、Module Controller:为Test Plan提供了在运行时动态执行给定的Test Plan片段的能力。如下图:

从图中可以看出,无论是放在本Thread Group、其他的Thread Group,或是WorkBench下的Test Plan片段,都可以在Module Controller中被调用。
4、Runtime Controller:用于指定其子节点的运行时长。该Controller中指定的时间以秒为单位,仅对该Controller的子节点有效。

5、Throughput Controller:用于控制其下的子节点的执行次数与负载比例分配的。
Throughput Controller允许用户使用两种模式控制其下子节点的执行顺序:比例模式和总数模式。总数模式指定该Controller下所有子节点的准确迭代次数,而比例模式允许负载在Controller下的子节点以某种比例进行分配。在比例模式下,设定的Throughput值为一个0-100之间的整数,表示该Controller迭代次数占总迭代次数的百分比。
可能你已经意识到,如果要在一个Test Plan中体现用户场景,Throughput Controller应该是最合适的选择。
图A给出了总数模式下的Throughput Controller,在这种模式下,每个线程最多运行Java Request10次(具体的运行次数还取决于线程组中线程数和迭代次数的设置,如果设定的Total Execution的次数大于线程组中设置的迭代次数,每个线程最多运行线程组中设定的迭代次数)。

图B给出了比例模式下的Throughput Controller,从图中可以看出,该Test Plan包含了两个Throughput Controller,第一个设定的Percentage为70,也就是70%,第二个设定的Percentage为30,也就是30%。线程组的线程数设置为10,迭代次数也设置为10.在这种模式下,req1被运行70次,req2被运行30次。如下图:



6、Transaction Controller:用于将Test Plan中的特定部分组织成一个Transaction,JMeter中Transaction的作用在于,可以针对Transaction统计其响应时间、吞吐量等。
在有些情况下,一个用户操作可能需要多个Sampler来模拟,此时,使用Transaction Controller,可以更准确地得到该用户操作的性能指标,如响应时间等。

7、Recording Controller:唯一的用途是用于存放JMeter录制得到的脚本。

jmeter(十七)逻辑控制器的更多相关文章
- Jmeter之逻辑控制器(Logic Controller)
Jmeter之逻辑控制器(Logic Controller) 前言: 1. Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in w ...
- Jmeter之逻辑控制器(Logic Controller)【转】
Jmeter之逻辑控制器(Logic Controller) 前言: 1. Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in w ...
- (四)Jmeter之逻辑控制器(Logic Controller)
Jmeter之逻辑控制器(Logic Controller) 前言: 1. Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in w ...
- jmeter的逻辑控制器
这篇是在网上找的,写的实在是比我写的具体得多,也没什么好补充的,拿来记录一下,方便以后查询,感激原作者!! JMeter中的Logic Controller分为两类:一类用来控制Test Plan执行 ...
- 【jmeter】逻辑控制器
JMeter中的Logic Controller用于为Test Plan中的节点添加逻辑控制器. JMeter中的Logic Controller分为两类:一类用来控制Test Plan执行过程中节点 ...
- 转:JMeter基础--逻辑控制器Logic Controller
1.ForEach控制器 ForEach控制器在用户自定义变量中读取一系列相关的变量.该控制器下的采样器或控制器都会被执行一次或多次,每次读取不同的变量值.所以ForEach总是和User Defin ...
- (转)JMeter学习逻辑控制器
JMeter中的Logic Controller用于为Test Plan中的节点添加逻辑控制器. JMeter中的Logic Controller分为两类:一类用来控制Test Plan执行过程中节点 ...
- Jmeter 之 逻辑控制器 if 控制器
最近工作不忙,利用空闲时间整理了下Jmeter的相关知识,下面给大家分享下Jmeter中 如果(if)控制的使用和应用. 如下图:线程组 > 添加 > 逻辑控制器 > 如果 (if) ...
- Jmeter之逻辑控制器/定时器
Jmeter逻辑控制器 更新中 线程组->添加->逻辑控制器->XX控制器 1.仅一次控制器 使用场景:线程数为1,登录1次,循环浏览N次. 如果,登录账号参数化,线程数为M时,登录 ...
- Jmeter 常见逻辑控制器详解
简介 Jmeter有很多逻辑控制器,可以控制请求的执行顺序和执行逻辑,本文就Jmeter常见的逻辑控制器做一个详细的描述,并通过示例让大家了解逻辑控制器的作用. 代码的逻辑分支通常有: 条件判断I ...
随机推荐
- MySQL5.6 怎样优化慢查询的SQL语句 -- 慢日志介绍
近期有个开发团队抱怨我们平台包括的mysql cluster不行,总是报mysql的"heartbeat Error".分析了他们收集的日志.没有发现mysql cluster节点 ...
- Visual Studio VS如何修改代码字体
工具-选项-环境-字体和颜色
- windows下 sqlplus / as sysdba 报ora-12560的终极解决方法
windows下 sqlplus / as sysdba 报ora-12560的终极解决方法 本文是原创文章.转载请注明出处:http://blog.csdn.net/msdnchina/articl ...
- C++中防止STL中迭代器失效——map/set等关联容器——vector/list/deque等序列容器—如何防止迭代器失效—即erase()的使用
序列性容器::(vector和list和deque) erase迭代器不仅使所有指向被删元素的迭代器失效,而且使被 删元素之后的所有迭代器失效,所以不能使用erase(iter++)的方 式, ...
- MySQL基础笔记(六) 存储过程与函数
写在开头:本文所有的示例都是基于workers表,表中保存了某公司的员工姓名.性别.工资.年龄和居住城市,如下: +----+-----------+--------+--------+------+ ...
- [原创+分享]Mandelbrot Explorer
Mandelbrot Explorer 是一款用于在MandelBort集/Julia集上进行无限漫游的软件,使用VS2013+CUDA6.5开发而成.它也是我学习CUDA开发的一个小小的成果,欢迎大 ...
- Mongodb for PHP教程之入门安装
简介: MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据 ...
- Jenkins系列之-—01 简介&新建任务
一.Jenkins 简介 Jenkins是一个可扩展的持续集成引擎. 主要用于: l 持续.自动地构建/测试软件项目.l 监控一些定时执行的任务. Jenkins拥有的特性包括: l 易于安装-只要把 ...
- 小胖说事35-----Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer posi
2011-06-11 15:19:17.167 ***[930:707] *** Terminating app due to uncaught exception 'CALayerInvalidGe ...
- 【iOS系列】- iOS吸附效果的实现 之 UICollectionView的使用全解
[iOS系列]- iOS吸附效果的实现 之 UICollectionView的使用全解 UICollectionView可以做很多的布局,在iOS开发中较为重要,所以这里就以实例来讲解UICollec ...