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(十七)逻辑控制器的更多相关文章

  1. Jmeter之逻辑控制器(Logic Controller)

    Jmeter之逻辑控制器(Logic Controller) 前言: 1. Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in w ...

  2. Jmeter之逻辑控制器(Logic Controller)【转】

    Jmeter之逻辑控制器(Logic Controller) 前言: 1. Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in w ...

  3. (四)Jmeter之逻辑控制器(Logic Controller)

    Jmeter之逻辑控制器(Logic Controller) 前言: 1. Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in w ...

  4. jmeter的逻辑控制器

    这篇是在网上找的,写的实在是比我写的具体得多,也没什么好补充的,拿来记录一下,方便以后查询,感激原作者!! JMeter中的Logic Controller分为两类:一类用来控制Test Plan执行 ...

  5. 【jmeter】逻辑控制器

    JMeter中的Logic Controller用于为Test Plan中的节点添加逻辑控制器. JMeter中的Logic Controller分为两类:一类用来控制Test Plan执行过程中节点 ...

  6. 转:JMeter基础--逻辑控制器Logic Controller

    1.ForEach控制器 ForEach控制器在用户自定义变量中读取一系列相关的变量.该控制器下的采样器或控制器都会被执行一次或多次,每次读取不同的变量值.所以ForEach总是和User Defin ...

  7. (转)JMeter学习逻辑控制器

    JMeter中的Logic Controller用于为Test Plan中的节点添加逻辑控制器. JMeter中的Logic Controller分为两类:一类用来控制Test Plan执行过程中节点 ...

  8. Jmeter 之 逻辑控制器 if 控制器

    最近工作不忙,利用空闲时间整理了下Jmeter的相关知识,下面给大家分享下Jmeter中 如果(if)控制的使用和应用. 如下图:线程组 > 添加 > 逻辑控制器 > 如果 (if) ...

  9. Jmeter之逻辑控制器/定时器

    Jmeter逻辑控制器 更新中 线程组->添加->逻辑控制器->XX控制器 1.仅一次控制器 使用场景:线程数为1,登录1次,循环浏览N次. 如果,登录账号参数化,线程数为M时,登录 ...

  10. Jmeter 常见逻辑控制器详解

    简介 Jmeter有很多逻辑控制器,可以控制请求的执行顺序和执行逻辑,本文就Jmeter常见的逻辑控制器做一个详细的描述,并通过示例让大家了解逻辑控制器的作用.   代码的逻辑分支通常有: 条件判断I ...

随机推荐

  1. JavaScript-创建第一个自己的类库

    通过上一节面向对象和原型的学习. 我们知道了怎样创建一个类,包含类的私有化属性和方法.公有化属性和方法.静态属性和方法.在这里略微回想一下.首先要创建一个类能够通过1.new object().2.利 ...

  2. MVC 下 JsonResult 的使用方法(JsonRequestBehavior.AllowGet)<转>

    MVC 默认 Request 方式为 Post. actionpublic JsonResult GetPersonInfo(){var person = new{Name = "张三&qu ...

  3. 大话设计模式C++实现-第14章-观察者模式

    一.UML图 关键词:Subject维护一个Observer列表.Subject运行Notify()时就运行列表中的每一个Observer的Update(). 二.概念 观察者模式:定义了一种一对多的 ...

  4. Django初识二

    1,在django中用于提交的form表单中的三要素: 1.1>form标签要有action和method,上传文件需要额外指定的enctype 1.2>获取用户输入的标签要有name属性 ...

  5. MFC项目实战(1)文件管理器--准备篇

    本程序主要实现如下功能: 程序通过左边的树形控件显示本地计算机中目录的结构,右边的列表控件则负责响应树形控件中选择的目录节点并把此节点中的所有项在列表框中显示出来,列表框支持奇偶行颜色设置,选中颜色设 ...

  6. 判断一个包是否可以安装是一个NP-complete问题

    1 checking whether a single package P can be installed, given a repository R,is NP-complete

  7. CXF 中自定义SOAPHeader

    Interceptor是CXF架构中一个很有特色的模式.你可以在不对核心模块进行修改的情况下,动态添加很多功能.这对于CXF这个以处理消息为中心的服务框架来说是非常有用的,CXF通过在Intercep ...

  8. Linux如何查看进程等常用命令

    1.查进程    ps命令查找与进程相关的PID号:    ps a 显示现行终端机下的所有程序,包括其他用户的程序.    ps -A 显示所有程序.    ps c 列出程序时,显示每个程序真正的 ...

  9. mac下Android Studio干净卸载

    1.卸载Android Studio,在终端(terminal)执行以下命令: rm -Rf /Applications/Android\ Studio.app rm -Rf ~/Library/Pr ...

  10. 双系统xp和ubuntu,删除ubuntu

    1:下载MbrFix.exe 2:进入c盘,命令MbrFix /drive 0 fixmbr