jmeter之逻辑控制器

逻辑控制器

  • 优先级

    • 在取样器之前被执行

    • 逻辑控制器起作用,它的下面,一定要挂载启用的取样器

  • 作用域

    • 作用于它的子集取样器

if条件控制器

英文含义:

为了提升性能,建议将“将条件解释为变量表达式”勾选

并使用jexl3或者groovy函数,来评估表达式条件的真假

/*
条件为真时,才会执行控制器下面的取样器
Interpret condition as valiable expression
默认情况下勾选,为true
表示: 条件表达式的**执行结果**必须为真
合的两个函数:使用${\_\_jexl3(,)} ${\_\_groovy(,)}两个函数的计算结果为真
若去除勾选:(去除勾选后,需要计算表达式的结果是否为真,耗cpu)
条件表达式的结果为真;
直接写布尔表达式结果即可,如:1==1
​
​
Evaluate for all children?:条件作用于每个子项进行评估。
默认不勾选;
表示:该控制器可以对在其下面的所有可运行的组件,进行控制执行,但只在入口执行一次。
​
若勾选该选项:
则该控制器在每一个子节点执行时前,执行一次
例:若if控制器下有三个请求,分别别淘宝、京东、百度,若淘宝请求成功才会执行京东,若京东执行成功才会执行百度
*/

__groovy函数

__jexl3两者使用是一样的

JEXL expression to evaluate:填写要计算的表达式

/*
​
==是否等于,如${__jexl3(${VAR}==1,)},判断${VAR}变量是否等于1。
​
!=不等于,如${__jexl3(${VAR}!=1,)},判断${VAR}变量是否不等于1。
​
!非,如${__jexl3(!(${VAR}!=1),)},对${VAR}!=1的结果取反。
​
&&且和||或,如${__jexl3(${VAR}==1 && "${name}" != "张三",)}。
​
>大于或者>=大于等于,如${__jexl3(${count}>=10,)}。
*/

 

  • 条件为真,才会执行控制器下面的取样器

  • 默认情况下勾选true: 条件表达式的执行结果必须为真

    • 结合的两个函数:使用${__jexl3(,)} ${__groovy(,)}

    • 使用两个函数,函数计算结果为真

  • 如果去掉 Interpret condition as valiable expression

    • 条件表达式的结果为真

jmeter中如何实现循环时控制递增取值

使用循环控制器,控制循环次数

计数器控制步长

  • 循环控制器结合计数器实现递增步长

    • 因为循环控制器里面没办法控制步长,所以可结合计数器来进行控制

    • 调试取样器中的xx_matgchNr是可以直接引用的

  • 计数器

    • 当取到maxnum以后,会重新第一个值开始取

foreach控制器

明确知道有多少个值,每个变量名称前缀相同,后缀是连续加1,我们可以使用

  • 应用场景

    • 明确值 变量的起始、结束;是明确知道如: user_1 user_2 user_3

      • 如提取获取医院列表的list接口,返回的hospital_id,使用json提取器,添加debug sample可以看到取到值为hospitallD_1,...hospitallD_n

    • 后置处理、从数据库中获取的值

    /*
    输入变量前缀:输入需要遍历的这一组数据的前缀,例如:hospitallD_1、hospitallD_2,hospitallD就是前缀。
    ​
    注意:用户自定义变量,或者是参数化文件中的数据都要这样命名才能遍历
    ​
    开始循环字段(不包含):循环的起始位置,如填0,实际是从第一个开始。
    默认为空也可以
    ​
    结束循环字段(含):
    循环结束的位置,如填4,实际第4个不会被使用,只会到第3个。
    默认为空也可以,程序会循环执行到最后一个变量,再停止
    ​
    */

     

仅一次控制器

 

每个线程用户(线程数),在运行过程中只会运行一次,如线程组中配置了10个线程数,无论运行多久,挂在仅一次控制器下的取样器,每个线程数只会执行一次,即:共10次

jmeter中默认,一个取样器执行一次,就是一个事务

应用场景:

常用于,业务、模块的性能测试

 

事务控制器

可以把多个取样器合并为一个事务,进行性能统计分析

  • Generate parent sample

    • 默认未勾选

    • 把多个接口合并为一个事务,需要勾选

    • 勾选以后,

      • 查看结果树状显示,事务控制器再最外层,事务控制器里面的样本请求再里面

      • 聚合报告里面,就会仅展示一个事务控制器,里面的请求不会一一展示出来了,此时的指标结果为,该事务控制器下的所有请求相加的结果

    •  

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

    • 是否在生成的样本中包括计时器,预处理和后处理延迟。默认值未勾选后。

    • 不建议选择,因为选择会把定时器 + 前后置处理器的时间也计算进来

临界部分控制器

并发和并行的区别

并发:指的是任务数多于cpu核数,通过操作系统的各种任务调度算法,实现多个任务"一起执行"

(实际上总有一些任务不在执行,因为切换任务的速度相当快,看上去一起执行而已)

并行:指的是任务数小于等于cpu核数,即任务真的是一起执行

  • 作用

    • 把多用户并行执行,强制变成串行

  • 默认情况下: 锁 global_lock 是固定名称,固定的话表示只有一把锁
    • 本身不就是从上往下执行吗?百度下TODO
  • 动态锁:让这个锁名称可变
    • 如果想弄成每个线程都用唯一的锁,就用counter函数,这会导致锁不会被复用

    • 如果想复用,就结合threadNum函数

    • 这种也叫做设置并行锁

随机控制器

随机取一个取样器执行

随机顺序控制器

打乱下面的取样器执行的顺序,但是所有的取样器都会执行

吞吐量控制器

性能测试中,最主要的一个性能指标值就是tps

参考文档

posted @ 2023-03-27 21:48  无敌大牛牛  阅读(98)  评论(0编辑  收藏  举报