jmeter-逻辑控制器

jmeter-逻辑控制器

If Controller
Transaction Controller
Once Only Controller
Loop Controller
While Controller
ForEach Controller
Simple Controller
Module Controller / Include Controller
参考:https://blog.csdn.net/qq_36502272/article/details/88014742

If Controller(条件控制器)

作用:条件成真,则执行控制器下所有取样器

interpret condition as variable expression:
  不勾选:可以直接使用判断语句,只要判断语句为ture就执行,不需要用’__jexl3 ‘或’__groovy’ 函数。[不推荐,]
  勾选:判断表达式的值是否等于字符串true(不区分大小写)

Evaluate for all children:
  如果选中这一项,在每个子结点执行前都会计算表达式
  • ${__jexl3(,)}函数介绍
    参数说明:
      JEXL expression to evaluate:填写要计算的表达式。
      Name of variable in which to store the result (optional):给函数结果定义一个可被引用的变量名(可选)。
    
    函数使用注意点:
      ${__jexl3("${token}"!=null,)}
      实验得知:
          变量的值是字符串(非map或非arry),则变量必须加上双引号;
          变量的值是数字,加与不加都可以。
      比较,逻辑运算符同java
    
    参考:
      https://www.cnblogs.com/gltou/p/15166264.html
      https://blog.csdn.net/guiyin1150/article/details/113091973
    
    groovy 写法
    ${__groovy(vars.get("count")=="1")}
    ${__groovy("${count}"=="1")}
    
    
    jexl3 写法
    ${__jexl3(${count}=="1")}
    ${__jexl3(${count}==1)}
    ${__jexl3(${count}<10)}
    ${__jexl3("${count}"=="1")}
    
    javaScript 写法
    ${__javaScript("${count}"=="1")}
    
    参考:https://blog.csdn.net/qq_45138120/article/details/130854895
    

Transaction Controller(事物控制器)

作用:获取事务请求响应时间。事务控制器生成一个额外的样本,该样本测量执行嵌套测试元素所需的总时间。

事务响应时间是衡量业务性能的主要指标,事务控制器可以把其节点下的取样器执行消耗时间累加在一起,便于统计。

Include duration oftimer and pre-post processors in generated sample: 
  是否在生成的样本中,包括计时器和前后处理程序的持续时间,默认值为false。一般不建议选择,因为选择会把一些额外时间算入总时间

注意:
  1. 事务下有多个取样器,其中一个取样器请求失败,这个事务就失败了
  2. 性能测试过程中事务控制器使用较多,接口测试中使用较少

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. 

注意:
  1. 该Controller没有与其他循环Controller嵌套:一个线程中仅执行一次。
  2. 该Controller上级有Loop Controller:受线程组循环次数影响,不受Loop Controller影响。

总结:
  Once Only Controller只停止循环离它最近的循环控制。
  可以尝试实验如:
    线程组
      |-LoopController(5)
      |--LoopController(2)
      |---OnceController
      |----Sampler
  此时,Sampler执行5次

Loop Controller

除了为线程组指定的循环值外,JMeter还将循环它们一定次数。

If you add Generative or Logic Controllers to a Loop Controller, JMeter will loop through them a certain number of times, in addition to the loop value you specified for the Thread Group. 

While Controller(条件控制器)

Condition条件如下:
1:为空(不输入任何值) -- 直到某次请求执行失败才退出循环
2:LAST -- 直到最后一个请求请求失败才退出循环
3:其它 -- 条件值等于"false"时,退出循环
4:Contion可以输入计算结果等于“false”的变量、函数。

ForEach Controller

循环次数跟 用户定义的变量名Controller变量名前缀 有关。执行次数其实就是开了指定数量的线程,而不是一个线程循环。
一般都是配合 UDV 使用。
UDV:

ForEach Controller

执行结果:

注意点:
  1. 寻找的变量名必须为:变量名前缀_1  (必须数组1开始,jmeter要求)
  2. 变量结尾不是1开始的,则不执行。除非指定索引,索引0代表以_1开始

Simple Controller

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. 

只是调整脚本的层级结构,没有其他功能。

Module Controller

参考:https://blog.csdn.net/SwTesting/article/details/84647999

  1. Test Fragment(测试片段)
Test Fragment是一种特殊的控制器,和线程组是同级别的。
若不使用模块控制器(Module Controller)或Include_Controller调用,Test Fragment是不执行的。
  1. Test Fragment的作用
1. 在脚本开发过程中可以用来备份元件。
2. 测试片段下的元件可以被模块控制器调用,我们可以利用它来模块化请求供模块控制器调用。

Module Controller,Test Fragment配合使用脚本结构

-Test Plan
---Test Fragment
------某几个功能模块
---Thread Group
------Module Controller

案例:

posted @ 2021-07-11 16:25  扬帆去远航  阅读(165)  评论(0编辑  收藏  举报