15.JMeter控制器

目录

0、加入控制器后的执行顺序

1、简单控制器

2、ForEach控制器(不常用)

3、if控制器

4、交替控制器(不常用)

5、事务控制器

6、循环控制器

7、仅一次控制器

8、while控制器(不常用)

9、include控制器

10、临界部分控制器


0、加入控制器后的执行顺序

  • 1)配置元件优先执行【没有在控制器里面的先执行】,用户自定义配置元件优先执行【无论是否在控制器内】

  • 2)按深度优先算法,依次寻找取样器,找到取样器后,逐个执行,遵循第3条规则

  • 3)执行总体顺序:

    • 控制器(父元件) ---> 配置元件(控制器里面的) ---> 前置处理器 ---> 定时器 ---> 取样器 ---> 后置处理器 ---> 断言 ---> 监听器
  • 4)控制器可以添加任意组件作为子元素

  • 5)在按深度优先算法寻找取样器时,控制器总会被执行

  • 6)控制器的后代中必须含有取样器为子元素,否则所有的后代元素执行时会无效(配置元件除外),但自身总会被执行

  • 7)取样器在执行前后组件时,总是先判断父类控制器(控制器内的配置元件在控制器后执行)


1、简单控制器

  • 简单控制器

    • 通常用来指定一个执行单元
    • 该控制器不改变元件的执行顺序

    • 可以嵌套其他的控制器

    • 利用该控制器通常用于定义元件的执行顺序

  • 示例:

    • 一个线程,循环9次,简单控制器里面3个请求
      • 最后生成27个请求的响应

2、ForEach控制器(不常用)

  • 说明:

    • 名称:控制器名称
      • 输入变量前缀:定义变量,循环控制器可从中获取到变量对应的值,作为循环控制器的循环条件

      • 开始循环字段:循环变量起点

      • 结束循环字段:循环变量终点

      • 输出变量名称:循环控制器生成的变量名称

  • 示例:

    • 设置用户定义的变量
      • 设置用户参数不得行
  • 使用场景:

    • 1)结合用户自定义的变量
    • 2)结合json提取器或者正则表达式提取器,获取数据后,再结合业务进行循环处理

  • 实际使用场景

    • processon登录后,可以看到登录用户的一个目录结构

  • 首先调试脚本,发http请求

  • 添加json处理器,将所有的title提取到

  • 最后用foreach循环来进行输出


3、if控制器

  • 如果条件满足,就执行if控制器下面的元件

  • 注意,if控制器的条件要以jexl3或者groovy函数来表示,否则无法识别

  • 字符串的判断,需要在${VARIABLE}外面加引号

  • Interpret Conditon as Variable Expression?

    • 勾选, 
      • 表示需要使用__jexl3/__groovy函数的计算结果为true或者false
    • 不勾选

      • 表示把条件框中的表达式当做js脚本,进行计算,然后使用计算的结果为真/假,来执行逻辑操作
  • 注意:

    • 1)字符串,必须放到引号里面,如"${username}"
    • 2)数字,可以直接用 ${count_num}==1

    • 3)bool,直接用${flag}==true

  • 判断条件总结:

    • 1)可以直接判断:
      • “${name}” == “admin"
    • 2)使用函数的方式 jexl3/groovy


4、交替控制器(不常用)

  • 交替控制器

    • 其节点下的取样器会交替执行
  • 示例:

    • 一个线程,循环9次【当然也可以用循环控制器来实现循环】,交替控制器里面3个请求
      • 如果使用简单控制器,那区别就是,每次循环都是执行里面的3个请求,最后就是 9 * 3 = 27个响应

      • 使用交替控制器,是一次循环只执行里面的一个请求,然后交替执行,最后总共只有9个响应


5、事务控制器

  • 组合出一个新的计量单位,就是把几个组合在一起而已

  • 事务

    • 在性能结果分析统计时,TPS代表每秒处理的事务数,通常情况下,每个请求,如JDBC请求,对应一个事务
    • 但是根据业务需求,有时需要把多个操作统计成一个事务,如果其中一个操作或者请求失败,则判定整个事务就失败

    • 通过逻辑控制器中的事务控制器来实现对事务的封装

  • 事务控制器

    • Generate parent sample

    • 还可以看到每个取样器,任何子事务失败,则整个事务失败

      • 如果事务控制器下有多个取样器

      • 如果选中该选项,则在查看结果树中可以看到事务控制器

      • 同时,这个事务控制器下面的取样器跟它成树形结构
      • 聚合报告里也有区别,如果勾选了,那么聚合报告里面不会显示取样器,而只会显示事务控制器的名字 

    • Include duration of timer and pre-post processors in generated sample

      • 是否包含定时器、预处理和后置处理器的延迟时间

6、循环控制器

  • 就是循环运行多少次


7、仅一次控制器

  • 就是只运行一次【针对的是每个线程用户】

    • 就算这个仅一次控制器放到了循环控制器里面,它也只运行里面的元件只跑一次
    • 包括线程组设置了循环次数,它也只运行一次

  • 场景:

    • 一般用于登录,全局参数设置这种只执行一次的业务逻辑控制
  • 但是它控制不了线程组的线程数(用户)哈,比如线程组里面设置了3次,最后还是要运行3次

    • 不能控制父级的父级哈

8、while控制器(不常用)

  • while控制器一般需要结合一个计数器来使用【配置元件--->计数器】

    • 否则,你想,是不是需要写代码,来使循环条件变量变化等。
  • 而且while控制器的循环条件写法跟if控制器类似,要使用groovy函数或者jexl3来作为条件

  • 备注,while控制器会多执行一次,比如可能条件是<5,但是到了5的时候,它要运行一次才退出

  • 示例1):

    • ​​​​​​​
  • 示例2:

    • 通过脚本的方式来控制条件,这个时候需要用到groovy的语法


9、include控制器

  • 要点就是:可以将一个保存的测试片段,在include控制器里面进行一个调用

  • 步骤:

    • 1)保存一个测试片段,叫test_fragment.jmx
    • 2)新建一个测试计划,然后线程组,然后新建一个include 控制器


10、临界部分控制器

  • 加了这个控制器,会变成串行执行

  • 用处不大


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值