其他分享
首页 > 其他分享> > JMTER逻辑控制器

JMTER逻辑控制器

作者:互联网

about

来自JMeter官网对逻辑控制器的解释:

Logic Controllers determine the order in which Samplers are processed.

大致意思是逻辑控制器决定了采样器的执行顺序。

也就是说,逻辑控制器通常和采样器一起使用。

另外,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