性能工具之 JMeter 常用组件介绍(四)

举报
zuozewei 发表于 2024/08/12 22:27:44 2024/08/12
【摘要】 性能工具之 JMeter 常用组件介绍(四)

本文主要介绍常用的逻辑控制器功能

一、前言

在上一讲中简单展示了常用组件,大家也只是有一个大概的概念,但是没有详细讲解怎么使用,这一讲中咱们聊一聊几个组件的常用规则。也许不是完全正确,可以参考下;

二、Logic Controller:逻辑控制器‘

先介绍下逻辑控制器,如图:
在这里插入图片描述

Logic Controller大概可分为两类:

  • 控制测试计划执行过程中节点的执行顺序,如:Loop Controller、If Controller等;
  • 对测试计划中的脚本进行分组、方便JMeter统计执行结果以及进行脚本的运行时控制等,如:Throughput Controller、Transaction Controller

1、If Controler:If控制器

在这里插入图片描述

说明:

  • 作用:根据给定表达式的值决定是否执行该节点下的子节点。

  • 参数:
    Condition(evaluated with javascript):用 javascript 的解释器执行代码,返回 “true” 或者 “false”。
    Expression (must evaluate to true of false):表示判断变量值是否等于字符串true或者false(不区分大小写)。比如:${JMeterThread.last_sample_ok}用来判断上个线程是否执行成功
    Evaluate for all children:选中此项表示在每个子结点执行前都会计算表达式
    Interpret Condition as Variable Expression?:选中此项表达式的条件为:Expression (must evaluate to true of false),不勾选为:Condition(evaluated with javascript)

1、添加线程组
在这里插入图片描述
2、添加if逻辑控制器
在这里插入图片描述
注:

  • 1、文本框上的黄色感叹号,就是提示你,建议采用__jexl3 or __groovy 表达式,以提高性能,也就是默认的方式。
  • 2、if 控制器 只能作用于其下的子项。

3、添加结果查看树
在这里插入图片描述
说明:
咱们再设置num初始值为7,但是条件判断中显示的是8;通过验证该if控制器生效。
假如把if控制器设置为8,查看结果为:
在这里插入图片描述

显示:
在这里插入图片描述

2、Transaction Controller:事务控制器

在这里插入图片描述

  • 作用:用于将Test Plan中的特定部分组织成一个Transaction,JMeter中Transaction的作用在于,可以针对Transaction统计其响应时间、吞吐量等。比如说,一个用户操作可能需要多个Sampler来模拟,此时使用Transaction Controller,可以更准确地得到该用户操作的性能指标,如响应时间等。这个时间包含该控制器范围内的所有处理时间,而不仅仅是采样器的。

  • 参数:

    • Generate parent sample:勾选后,所有的结果将在父结点中展示(一般要勾选)
    • include duration of timer and pre-post processors in generated sample:勾选后会统计定时器(timer)的时间,否则只统计采样器(sample)的时间。

演示:
1、增加线程组
2、增加事务控制器
增加两个请求
3、添加聚合报告

如图:
在这里插入图片描述
第一个请求:
在这里插入图片描述

第二个请求:
在这里插入图片描述
添加聚合报告
在这里插入图片描述
运行结果:
把请求全部统计到一个事务中去,并且显示每请求信息;
在这里插入图片描述
修改事务控制:
在这里插入图片描述
运行查看结果显示,勾选后把所有请求合并到一个事务中:
在这里插入图片描述

3、Loop Controller:循环控制器

在这里插入图片描述

  • 作用:指定子节点运行的次数,可以使用具体的数值,也可以使用变量
  • 参数:
    • Forever选项:勾选上这一项表示一直循环下去
    • 如果同时设置了线程组的循环次数和循环控制器的循环次数,那循环控制器的子节点运行的次数为两个数值相乘的结果。

操作步骤:
1、添加线程组
在这里插入图片描述
2、添加Loop Controller控制器
在这里插入图片描述

3、添加简单java请求【目的为了学习所以才有java 请求】
在这里插入图片描述
4、添加结果查看树
在这里插入图片描述

点击请求查看结果树:
在这里插入图片描述

如果勾选如图,表示永远执行
在这里插入图片描述

如图:
在这里插入图片描述

4、Once Only Controller:仅一次控制器

在这里插入图片描述

  • 作用:在测试计划执行期间,每个线程内,该控制器下的子内容只执行一次,无论循环多少次都只执行一遍。登录场景经常会使用到这个控制器。
  • 注意:将 Once Only Controller 作为 Loop Controller 的子节点,Once Only Controller 在每次循环的第一次迭代时均会被执行。

1、添加线程组
在这里插入图片描述
2、添加
在这里插入图片描述
3、添加java请求
在这里插入图片描述
4、添加结果查看树
在这里插入图片描述
5、效果
在这里插入图片描述

5、 Include Controller:包含控制器

在这里插入图片描述

  • 作用:引用外部的脚本,用来导入外部测试片段(),在执行时会导入。但是导入的测试片段不能包含线程组,只能包含简单的控制元件及控制元件下的子元件(controller和sampler)

操作步骤
1、添加线程组
2、添加Include Controller插件
在这里插入图片描述
选择脚本:
添加:{Test Fragment}片段脚本
在这里插入图片描述
添加到 Include 中。
在这里插入图片描述

3、添加结果查看树
在这里插入图片描述

6、 Module Controller:模块控制器

  • 作用:可以快速的切换脚本,不用来回的新建,方便脚本调试

1、添加两个【Test Fragment】并且在两个模块下新建两个测试【Test Fragment -1】

如上图、添加模块控制器;

操作步骤
1、添加线程组
在这里插入图片描述

2、添加 module controller
选择第一个模块点运行:
在这里插入图片描述
结果:
在这里插入图片描述

3、选择第二模块
在这里插入图片描述
4、添加结果查看树
在这里插入图片描述
说明:
通过这个模块可以轻松控制两个模块切换

7、 Throughput Controller:吞吐量控制器

在这里插入图片描述
在这里插入图片描述

作用:控制其下的子节点的执行次数与负载比例分配,也有两种方式:

  • Total Executions:设置运行次数,单位为次

勾选Per User:

  • 1.线程数循环次数>=线程数吞吐量时,Total Executions模式的执行次数=线程数*吞吐量。
  • 2.线程数循环次数<线程数吞吐量时,Total Executions模式的执行次数=当线程数*循环次数。

不勾选Per User:

  • 1.线程数循环次数<=吞吐量时,Total Executions模式的执行次数=线程数循环次数。

  • 2.线程数*循环次数>吞吐量时,Total Executions模式的执行次数=吞吐量。

  • Percent Executions:设置运行比例(1~100之间),单位为%

不管Per User是否勾选,按Percent Executions模式的执行次数都不受Per User影响,Percent Executions模式的执行次数=线程数循环次数吞吐量%。(循环次数=线程组循环次数*循环控制器循环次数)

  • Per User:勾选该项的话则按虚拟用户数(线程数)来计算执行次数,不勾选则按所有虚拟用户数来计算执行次数

操作步骤
1、添加线程组
在这里插入图片描述
2、添加 7DGroup - Throughput Controller
在这里插入图片描述
3、添加java请求
在这里插入图片描述
4、添加结果查看树
在这里插入图片描述
5、效果
在这里插入图片描述

8、 Runtime Controller:时间控制器

在这里插入图片描述

  • 作用:用来控制其子元件的执行时长
  • 参数:
    • Name:名称,可以随便填写
    • Comments:注释,可以随便填写,可以为空、
    • Runtime(seconds):其下组件执行时长,默认为1秒,为0表示其下的组件不执行。

注意:如果此控制器设置的时间指的是该控制器下子节点的执行时间,Thread Group中设定的时间是整个线程组的整体执行时间。一般线程组中的时间要比Runtime Controller设定的时间要大,Runtime Controller设定的时间到了之后,执行Thread Group中其他组件,如果没有其它组件的话会继续执行Runtime Controller中的内容。如果Thread Group中设定的时间比Runtime Controller中设定时间小的话就会按线程组中顺序执行,执行时间到了的话就不会执行Thread Group后面的请求。

操作步骤
1、添加线程组
在这里插入图片描述
2、添加Runtime Controllerr如图
在这里插入图片描述
3、添加http请求
添加第一请求
在这里插入图片描述

添加第二个请求
在这里插入图片描述

4、添加View Results in Table
在这里插入图片描述

9、 Interleave Controller:交替控制器

在这里插入图片描述

  • 作用:每次循环中交替执行不同的controller中请求
  • 参数:
    • ignore sub-controller blocks:勾选后,子控制器每次只能发起一个请求
    • Interleave accross threads:勾选之后,第1次循环执行第一个子元素、第2次循环2执行第二个子元素、第3次循环执行第三个子元素。。。

操作步骤
1、添加线程组
在这里插入图片描述
2、添加Interleave Controller
在这里插入图片描述
3、添加http请求
在这里插入图片描述
4、添加结果查看树
在这里插入图片描述

10、Random Controller:随机控制器

在这里插入图片描述

  • 作用:随机执行其下的子节点

操作步骤
1、添加线程组
在这里插入图片描述
2、添加Random Controller
在这里插入图片描述
3、添加http请求
在这里插入图片描述
4、添加结果查看树
在这里插入图片描述

11、 ForEach Controller

在这里插入图片描述

  • 作用:依次调用用户定义的变量,直到最后一个,结束循环。为了满足ForEach Controller提取数据,变量命名的格式一般为“变量名_数字”,其中数字从1开始。
  • 参数说明:
    • Input variable prefix:输入变量的前缀,也就是自定义变量的前缀;
    • Start index for loop(exclusive):循环的起始索引index,但是不包含当前值。也就是从index+1开始。
    • End index for loop(inclusive):循环结束的索引,包含这个值。
    • Output variable name:输出的变量名,后续可通过${}引用
    • Add "_" before number?:如果定义的变量名中有下划线的话就要勾选此项,否则找不到;反之,没有的话不要勾选,否则同样找不到变量

操作步骤
1、添加线程组
在这里插入图片描述
2、添加ForEach Controller
在这里插入图片描述
3、添加http请求
在这里插入图片描述
4、添加结果查看树
在这里插入图片描述
5、效果
在这里插入图片描述

在这里插入图片描述

12、 Switch Controller

在这里插入图片描述

  • 作用:和编程语言中的switch语句类似,执行Switch Value中指定的请求

  • 参数说明:

    • Switch Value:指定请求的索引或者名称,索引从0开始,如果没有赋值,或者索引超过请求个数的话就执行第0个请求。

操作步骤
1、添加线程组
在这里插入图片描述
2、添加Switch Controller
在这里插入图片描述
设置条件为2:
在这里插入图片描述

3、添加http请求
在这里插入图片描述
4、添加结果查看树
在这里插入图片描述
运行结果从索引0开始;
在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。