JMTER逻辑控制器
作者:互联网
about
来自JMeter官网对逻辑控制器的解释:
Logic Controllers determine the order in which Samplers are processed.
大致意思是逻辑控制器决定了采样器的执行顺序。
也就是说,逻辑控制器通常和采样器一起使用。
另外,JMeter中的逻辑控制器大体分为两类:
- 控制测试计划执行过程中线程执行的顺序,如循环控制器、if控制器等。
- 对测试计划中的脚本进行分组,方便jmeter统计执行结果以及进行脚本的运行控制等,如简单控制器、吞吐量控制器、事务控制器等。
JMeter提供了如下这么多的逻辑控制器,以应对各种场景:
简单控制器
正如它的名字一样,"简单控制器"是最基础的逻辑控制器,非常的简单!它本身对测试计划没什么影响!那它能干嘛呢?我们常用来使用"简单控制器"对线程组的取样器做分组,或者打个标签,如联系人分组一样,本身并没有什么实际的意义!
来看:
"察看结果树"中也没啥大变化:
循环控制器#
现在,有这么个需求,在线程组内,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请求"取样器:
经过这么设置后,我们来观察结果:
完美!
foreach控制器
http://www.neeo.cc:6001/get # get
foreach控制器可以遍历变量,比如从数据库中查询出用户信息,然后在别的接口中循环使用查询出来的每个用户。
来个需求:从数据库查询出用户记录,然后循环获取记录中的用户名当成请求的参数,发请求。
关于jdbc的配置:
结果:
现在创建一个"foreach控制器"来循环使用上面的user变量:
在"调试取样器"中,user变量都是以user
加_
加数字
来保存的,想要循环读取这些变量,就要按照规则来读取,如上图这么配置。然后在"foreach控制器内"的取样器中,直接使用即可:
"察看结果树"中,就会发现,有三个请求,并且这三个请求携带的user参数都是从数据库中提取出来的。
哦了!
标签:控制器,请求,get,逻辑,JMTER,取样器,post,执行 来源: https://www.cnblogs.com/TodayWind/p/16275643.html