JMTER逻辑控制器
about
来自JMeter官网对逻辑控制器的解释:
Logic Controllers determine the order in which Samplers are processed.
大致意思是逻辑控制器决定了采样器的执行顺序。
也就是说,逻辑控制器通常和采样器一起使用。
另外,JMeter中的逻辑控制器大体分为两类:
- 控制测试计划执行过程中线程执行的顺序,如循环控制器、if控制器等。
- 对测试计划中的脚本进行分组,方便jmeter统计执行结果以及进行脚本的运行控制等,如简单控制器、吞吐量控制器、事务控制器等。
JMeter提供了如下这么多的逻辑控制器,以应对各种场景:
如果(if)控制器
1.1:准备数据
1.1.1:如下图 准备两组http取样器 并且分别添加上Debug取样器
1.1.2:执行后我们发现第一组http取样器执行成功 Debug Sampler1的响应数据中JMeterThread.last_sample_ok=true
第二组http取样器执行失败Debug Sampler2的响应数据中JMeterThread.last_sample_ok=false
1.2:添加【如果(if)控制器】 先禁用 第二个http取样器和其他的Debug Sampler
条件:相当于Java if()中的条件 只要是true就会继续执行 如果条件判断false就不会执行
1.3:查看结果树 我们发现【如何(if)控制器】下的Debug sampler执行了
第二种判断方式
循环控制器
现在,有这么个需求,在线程组内,get请求执行一次,post请求就要执行2次。怎么实现呢?
上URL:
http://www.neeo.cc:6001/get # get 无参数
http://www.neeo.cc:6001/post # post 无参数
在线程组内创建两个"HTTP请求"取样器:
那怎么才能让get请求执行一次,就让post请求执行2次呢?这就要用到了循环控制器了,来看如何添加和配置:
如上图,所示,将取样器移动到"循环控制器"中,这样,"循环控制器"中的"循环次数"就决定了其内的取样器的执行次数。
来看"察看结果树"中的执行结果:
完美!
if控制器
http://www.neeo.cc:6001/get # get
http://www.neeo.cc:6001/post # post
如果有些取样器的执行需要满足一定的条件才执行,这里就用到了if控制器:
"if控制器"的配置中,需要添加简单的表达式来完成条件判断,比如当port是8080时条件成立,当用户名是xxx时条件成立等等。
# 语法
${__jexl3(条件表达式)}
# 示例
${__jexl3("${ip}" == "localhost" && ${port} == 8231)} // 会执行
${__jexl3(${user} == "zhangkai" && ${pwd} == 666)} // 会执行
来个需求,当user == “zhangsan" && pwd == 111
时,取样器才执行,来看怎么配置吧!
为线程组的线程数设置为2;在"用户参数"这个前置控制器内,有两个用户信息:
然后,两个"HTTP请求"取样器参数都从"用户参数中"取值:
那"if控制器"的表达式怎么写呢?
就这么写,一定要按照格式要求来!来看是否生效吧:
生效了!
仅一次控制器
http://www.neeo.cc:6001/get?user=zhangkai&pwd=123 # get 无参数
http://www.neeo.cc:6001/post # post
# 参数
{"buy": 1}
这个仅一次控制器一般用来某个接口只执行一次,后续接口可以执行多次的结果,比如用户登录一次,后续请求执行多次都是基于登录成功的结果的。
来个需求,参照如上URL,我们设置get请求仅执行一次;post请求执行10次。这个需求就要借助"仅一次控制器"来实现了:
"仅一次控制器"没啥好配置的。来看其他的配置吧!
首先,为线程组的线程数为1,循环10次,表示1个用户登录一次后,购买10次,然后添加两个"HTTP请求"取样器:
经过这么设置后,我们来观察结果:
完美!