JMeter学习(二十六)逻辑控制器(转载)
转载自 http://www.cnblogs.com/yangxia-test
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学习(二十六)逻辑控制器(转载)的更多相关文章
- Java开发学习(二十六)----SpringMVC返回响应结果
SpringMVC接收到请求和数据后,进行了一些处理,当然这个处理可以是转发给Service,Service层再调用Dao层完成的,不管怎样,处理完以后,都需要将结果告知给用户. 比如:根据用户ID查 ...
- JMeter学习(十六)JMeter测试Java(二)(转载)
转载自 http://www.cnblogs.com/yangxia-test 实例: 服务为:将输入的两个参数通过IO存入文件: 1.打开MyEclipse,编写Java代码 服务: package ...
- Jmeter (二十六)逻辑控制器 之 Module Controller and Include Controller
Module Controller ---模块控制器 测试计划设置“独立运行没每个线程组” 线程组2中使用Module Controller执行线程组1中的Sampler: 紧接着,将线程组1disa ...
- jmeter(二十六)生成HTML性能测试报告
性能测试工具Jmeter由于其体积小.使用方便.学习成本低等原因,在现在的性能测试过程中,使用率越来越高,但其本身也有一定的缺点,比如提供的测试结果可视化做的很一般. 不过从3.0版本开始,jmete ...
- ElasticSearch7.3学习(二十六)----搜索(Search)参数总结、结果跳跃(bouncing results)问题解析
1.preference 首先引入一个bouncing results问题,两个document排序,field值相同:不同的shard上,可能排序不同:每次请求轮询打到不同的replica shar ...
- JavaWeb学习 (二十六)————监听器(Listener)学习(二)
一.监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信 ...
- Jmeter(二十六)Jmeter-Question之“集成Jenkins”
Jenkins,最初被称为Hudson,是一个Java语言编写的开源持续集成工具.Jenkins在持续集成领域的市场份额居于主导地位,其被各种规模的团队用于各种语言和技术的项目中,比如.net.rub ...
- ballerina 学习二十六 项目docker 部署&& 运行(二)
ballerina 从发布,到现在官方文档的更新也是很给力的,同时也有好多改进,越来越好用了 可以参考官方文档 https://ballerina.io/learn/by-guide/restful- ...
- 前端学习(二十六)移动端s(笔记)
===================================================弹性布局rem布局---------------------------------------- ...
- Salesforce LWC学习(二十六) 简单知识总结篇三
首先本篇感谢长源edward老哥的大力帮助. 背景:我们在前端开发的时候,经常会用到输入框,并且对这个输入框设置 required或者其他的验证,当不满足条件时使用自定义的UI或者使用标准的 inpu ...
随机推荐
- 解决Cell重用问题
在显示的过程中,出现了内容重叠的问题,其实就是UITableViewCell重用机制的问题. 解决方法一:对在cell中添加的控件设置tag的方法 在cell的contentView上需要添加控件,那 ...
- 一些被提问频率最高的12个php面试题,以及对应的常规回答。
一些被提问频率最高的12个php面试题,以及对应的常规回答.1.问题:请用最简单的语言告诉我php是什么?回答:php全称:hypertext preprocessor,是一种用来开发动态网站的服务器 ...
- java 基础之 list
ArrayList 基于 array, 顾名思义. ArrayList是用数组实现的,这个数组的内存是连续的,不存在你说的相邻元素之间还隔着其他内存什么的 索引ArrayList时,速度比原生数组慢是 ...
- 《The book of shaders》读书笔记
最近几天在GitHub上看到一个关于Shader开发的开源项目thebookofshaders,其中一个贡献者是Patricio Gonzalez Vivo,这个开源项目囊括了<The book ...
- 数电——全减器分析(用74HC138设计提示)
-1=1(即Di=1). Di=(Y1' * Y2' * Y4' * Y7')'可以得到74HC138来表示,(注意:Ai,Bi,Ci-1的各自位权对应A2,A1,A0) Ci同理可得.
- 16.linux常用查看命令
cat :查看整个文件tail -200f abc.txt :查看abc.txt的最后200行
- HTML学习-2标记标签-2
三.表单元素 ①<form></form>表单标签,代表表单 主要属性:1.action提交到的页面. 2.method数据提交方式(get显示提交,有长度限制.post隐 ...
- day11-mysql中的mysql数据库不见了
mysql中的mysql数据库不见了 昨天刚刚在vmware虚拟机的linux上安装mysql,今天登上就发现一个问题.通过网上漫长的寻找,终于解决了.所以我在这把我解决的步骤跟大家分享一下. 问题就 ...
- Cause: java.sql.SQLException: The user specified as a definer ('root'@'%') does not exist
权限问题,授权 给 root 所有sql 权限 mysql> grant all privileges on *.* to root@"%" identified by &q ...
- 一次docker中的nginx进程响应慢问题定位记录
有个ft测试的环境,其中nginx使用docker发布的.测试用例是curl的时候,没有获得nginx的响应. docker ps CONTAINER ID IMAGE COMMAND CREATED ...