现在有这样的一个场景:
1、连续发10个相同的请求
2、其中前两个做特殊处理
连续复制10个请求(不是增加线程数),将其中两个做处理
这时候我们就需要用到Jmeter的逻辑控制器,Jmeter的逻辑控制器有很多,我们介绍一些常用的的逻辑控制器。
Logic Controller逻辑控制器
1、首先必须声明的是: Jmeter中的Controller 和 LoadRunner中的Controller的区别。
LoadRunner中的Controller场景执行、数据收集
Jmeter中的Controller 控制脚本的执行顺序
2、回到执行顺序。查看Controller的执行顺序。
提供的各种各样的Controller
Simple Controller简单的Controller
1、 The Simple Logic Controller lets you organize your Samplers(组织你的采样器) and other Logic Controllers. Unlike other Logic Controllers, this controller provides no functionality beyond that of a storage device.
就是一个存储设备,需要跟采样器结合,将需要的采样器组合起来
2、提供一个块的结构和控制。更方便,更清晰。
3、嵌套其他的Controller
4、适用场景——都可以使用,只是将相关联的东西放在一起,脚本看起来简洁清晰,自身没有特点
Loop Controller
1、 简单的说就是提供一个循环
两个请求加在里面,两个请求同时循环
添加变量
执行
获得当前的线程号,使用函数帮助里的threadNum
设置循环三次
现在在Thread Group中设置线程数,设置成2
发现 一个线程 执行了6次
Thread Group中设置线程数设置很多,会使cpu的调度打乱,线程数就会乱
将Thread Group中的循环次数修改,修改成2
把two拿出来,执行
Once Only Controller
The Once Only Logic Controller tells JMeter to process the controller(s) inside it only once per Thread, and pass over any requests under it during further iterations through the test plan.
不管循环多少次,里面的只执行一次
设置循环三次
在套一个循环控制器
循环控制器里面的循环次数,改为3
执行
再把TestGroup里面的循环次数设置为3次
看下面的例子
把TestGroup里面的循环次数设置为3次
ForEach Controller(使用与UDV绑定使用)
The ForEach Controller is used in tandem with User Defined Variables (UDV). It is a variant of a Loop Controller as every sampler or controller that we add is executed one or more times according to the number of times to repeat.
UDV用户定义变量
循环次数是根据你的变量名数量定的
脚本如下
UDV定义变量
运行脚本
最后一个名字,输出的变量名字,剩下两次Debug,最后输出的vname分别是may,ada
这时将UDV里面的值变一下,变一下name的名称
执行,发现是执行不了的,说明这个必须是按照顺序执行的
再将UDV里面的值变一下
运行脚本
发现只执行了两次
这时脚本如下设置
执行脚本,发现无法执行
这时将UDV的name值变一下
执行脚本
可以执行,观察下name的名称,这时就知道输入变量的前缀是要对应的
Transaction Controller
The Transaction Controller generates an additional sample which measures the overall time taken to perform the nested test elements.
事务控制器
Jmeter中如何控制事物,学习之后就明白啦!
one和two两个请求的加载时间总和,脚本如下,并执行
事物控制器界面
运行脚本
这种方式是不是比之前的更好看些
添加一个2秒的等待时间
运行脚本
等待2秒,运行one
再等待2秒,运行two
这时,计算one和two的加载时间,发现并没有加上等待的四秒
如果这时也加上这些时间呢,需要勾选下一项
运行脚本
这时候,发现时间变得很大,将思考时间和元件的执行的时间加进去了。
If Controller
The If Controller allows the user to control whether the test elements below it (its children) are run or not.
不加条件,执行脚本
执行,发现if里面的in-out并没有执行
加一个为true的表达式
执行脚本
发现,in-if已经执行了
如果表达式为false的话,in-if也是不会执行的
在TestPlan里面加一个全局变量
引用变量
运行脚本
条件里面可以用变量的
默认是Javascript,是否可以不默认呢
解析一个条件为变量表达式,什么意思呢,看下面的例子
在TestPlan里面设置一个变量,true大小写都可以
引用
执行脚本
修改变量,不为true,执行,发现in-if不执行
注意:逻辑控制不能随意乱套