Jmeter(十二) - 从入门到精通 - JMeter逻辑控制器 - 终篇(详解教程)

2023-11-03

1.简介

Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in which Samplers are processed.”。

意思是说,逻辑控制器可以控制采样器(samplers)的执行顺序。由此可知,控制器需要和采样器一起使用,否则控制器就没有什么意义了。放在控制器下面的所有的采样器都会当做一个整体,执行时也会一起被执行。

JMeter逻辑控制器可以对元件的执行逻辑进行控制,除仅一次控制器外,其他可以嵌套别的种类的逻辑控制器。

2.逻辑控制器分类

JMeter中的Logic Controller分为两类:
(1)控制测试计划执行过程中节点的逻辑执行顺序,如:Loop Controller、If Controller等;
(2)对测试计划中的脚本进行分组、方便JMeter统计执行结果以及进行脚本的运行时控制等,如:Throughput Controller、Transaction Controller。

3.预览逻辑控制器 

首先我们来看一下JMeter的逻辑控制器,路径:线程组(用户)->添加->逻辑控制器(Logic Controller);我们可以清楚地看到JMeter5中共有17个逻辑控制器,如下图所示:

如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386     

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1.【接口自动化】目前软件测试的市场行情以及测试人员能力标准。、2.【接口自动化】全面熟练Requests库以及底层方法调用逻辑、3.【接口自动化】接口自动化实战及正则和JsonPath提取器的应用等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337&vd_source=488d25e59e6c5b111f7a1a1a16ecbe9a 

如果上图您看得不是很清楚的话,宏哥总结了一个思维导图,关于JMeter5的逻辑控制器类型,如下图所示: 

 通过以上的了解,我们对逻辑控制器有了一个大致的了解和认识。下面宏哥就给小伙伴或则童鞋们分享讲解一些通常在工作中会用到的逻辑控制器。 

4.常用逻辑控制器详解

  这一小节,宏哥就由上而下地详细地讲解一下常用的逻辑控制器。

4.1Runtime Controller

运行控制器用来控制其子元件的执行时长。市场单位是秒。

 1、我们先来看看这个Runtime Controller长得是啥样子,路径:线程组 > 添加 > 逻辑控制器 > 运行控制器,如下图所示:

2、关键参数说明如下:

Name:名称,可以随意设置,甚至为空;

Comments:注释,可随意设置,可以为空;

Runtime:默认为1,去掉1则默认为0,此时不执行其节点下的元件。 与线程组中的调度器的持续时间 效果一致。不填 或 0,不会执行样例

4.1.1Runtime控制器控制其下取样器执行2s

1、创建测试计划,设置 Runtime 控制器的运行时间 为 2,线程组设置默认不变,如下图所示:

Runtime 控制器设置

线程组设置

 

2、配置好以后,运行JMeter,然后查看结果树,如下图所示:

 

4.1.2使用线程组中的调度器控制样例运行3s

1、创建测试计划,设置 Runtime 控制器的运行时间 为 2,线程组设置运行时间3,如下图所示:

线程组设置

Runtime 控制器设置

 

2、配置好以后,运行JMeter,然后查看结果树,如下图所示:

 

线程组设置3,Runtime控制器设置2,但是运行时间是2s。所以从上边的运行时间得出结论:如果线程组中设置了持续时间,Runtime 控制器也设置了 运行时间,那么会优先于线程组中的设置。

4.2Simple Controller

Simple Controller用来指定了一个执行单元,它不改变元件的执行顺序。在它下边还可以嵌套其他控制器。简单控制器可以编辑只有名称和注释。就像他的名字一样,简单,可以理解为一个文件夹,就是分组用的,没有其他特殊功能,但相比不添加简单控制器,区别在于简单控制器可以被模块控制器所引用。其作用就是分组,比如QQ好友列表,可分为家人、同学、等。一般是请求较多,需要分组时采用。

 1、我们先来看看这个Simple Controller长得是啥样子,路径:线程组 > 添加 > 逻辑控制器 > 简单控制器,如下图所示:

2、关键参数说明如下:

Name:名称,可以随意设置,甚至为空;

Comments:注释,可随意设置,可以为空。

4.2.1简单实例

1、创建测试计划,线程组设置循环10,如下图所示:

 

 2、配置好以后,运行JMeter,然后查看结果树,如下图所示:

4.3Throughput Controller

用来控制其下元件的执行次数,并无控制吞吐量的功能,想要控制吞吐量可以使用Constant Throughput Timer,后边会讲解到。吞吐量控制器有两种模式:Total Executions:设置运行次数与Percent Executions:设置运行比例(1~100之间)。

1、我们先来看看这个Throughput Controller长得是啥样子,路径:线程组 > 添加 > 逻辑控制器 > 吞吐量控制器,如下图所示:         

 

2、关键参数说明如下:

Name:名称,可以随意设置,甚至为空;

Comments:注释,可随意设置,可以为空;

Total Executions:执行百分比(1-100);

percent Executions:执行数量;

Throughput:根据上边选择的方式填写,百分比为0~100;

Per User:线程数,当选Total Executions时,是线程数;当选percent Executions时,是线程数*循环次数。

4.3.1不勾选Per User

1、线程组中设置 线程数量 2,循环次数 10,吞吐量控制器 设置 Total Executions,吞吐量设置为 2,其下添加一个取样器,如下图所示:

2、配置好以后,运行JMeter,然后查看结果树(执行了2次),如下图所示:

3、现在将 吞吐量控制器 设置为百分比的控制方式,吞吐量设置为:50%,如下图所示:

 

4、配置好以后,点击“保存”运行JMeter,然后查看结果树(执行了10次,计算方式:10=吞吐量50% * 循环次数10 * 线程数 2),如下图所示: 

4.3.2勾选Per User

1、线程组中设置 线程数量 2,循环次数 10,吞吐量控制器 设置 Total Executions,吞吐量设置为 2,其下添加一个取样器,勾选Per User,如下图所示:

线程组设置

吞吐量控制器

 

2、配置好以后,点击“保存”,运行JMeter,然后查看结果树(总共执行了4次,其中吞吐量设置为2,执行2次,线程设置为2,执行2次,总共4次),函数 __threadNum 只是简单地返回当前线程的编号,如下图所示:

 

3、现在将 吞吐量控制器 设置为百分比的控制方式,吞吐量设置为:50,如下图所示:

4、配置好以后,点击“保存”运行JMeter,然后查看结果树(执行了10次,计算方式:10=吞吐量50% * 循环次数10 * 线程数 2),如下图所示:

 

综上所述:

勾选Per User:

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

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

不勾选Per User:

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

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

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

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

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

测试计划
序号 线程数 循环次数 模式 Throughput Per User 执行次数
1 2 10 Percent 50 Y 10
2 2 10 Percent 50 N 10
3 2 10 Total 7 Y 14
4 2 10 Total 7 N 7
5 2 2 Total 7 Y 4
6 2 2 Total 7 N 4

下面说明一下这6个场景:
(1)序号1和2场景,Per User 对总执行次数没有影响。
(2)序号3场景,Per User勾选,每个虚拟用户(线程)执行7次,共执行14次。
(3)序号4场景,Per User不勾选,则所有虚拟用户执行7次。
(4)序号5场景,Per User勾选,每个虚拟用户(线程)执行7次,共执行14次,由于Thread Group计划循环次数是4(2线程*2循环)次,所以最多只能执行4次。
(5)序号6场景,Per User不勾选,所有虚拟用户执行7次,由于Thread Group计划循环次数是4(2线程*2循环)次,所以最多只能执行4次。

4.4Module Controller

模块控制器可以快速的切换脚本,不用来回的新建,方便脚本调试。 

可以理解为引用、调用的意思,执行内容为Module To Run种所选的内容,引用范围为当前测试计划内的测试片段、逻辑控制器<模块控制器除外>
被引用的逻辑控制器、测试片段可以为禁用状态,被引用后仍然会被执行。
可以将模块控制器与包括控制器一起学习比较,模块控制器是从内部文件中引用,引用上相对比较灵活,可以只引用部分测试片段或模块内容,包括控制器是从外部文件引用,只能引用整个测试片段的内容。
注意:被应用的模块位置不可随意变更,变更后会执行时出现提示引用失败
找到目标元素:快速查找与跳转的作用,点击后会立即跳转到所选的逻辑控制器的内容详情

1、我们先来看看这个Module Controller长得是啥样子,路径:线程组 > 添加 > 逻辑控制器 >  模块控制器,如下图所示: 

2、关键参数说明如下:

Name:名称,可以随意设置,甚至为空;

Comments:注释,可随意设置,可以为空;

Forever:勾选上这一项表示一直循环下去。

4.4.1实例

1、创建测试计划,添加两个测试片段,并且在每个测试片段下添加一个取样器,然后,添加线程组,再添加模块控制器,最后添加查看结果树,如下图所示:

2、配置模块控制器,选择第一个测试片段,如下图所示:

 

3、配置好以后,点击“保存”运行JMeter,然后查看结果树(执行了第1个测试片段的取样器),如下图所示:

 

4、配置模块控制器,选择第二个测试片段,如下图所示: 

5、配置好以后,点击“保存”运行JMeter,然后查看结果树(执行了第2个测试片段的取样器),如下图所示:

 

4.5Switch Controller

Switch Controller:开关控制器,通过其下样例顺序数值或名称 控制执行某一个样例。

 1、我们先来看看这个if Controller长得是啥样子,路径:线程组 > 添加 > 逻辑控制器 > 如果 (if) 控制器,如下图所示:

2、关键参数说明如下:

Name:名称,可以随意设置,甚至为空;

Comments:注释,可随意设置,可以为空;

Switch Value:指定请求的索引或者名称,索引从0开始,如果没有赋值,或者索引超过请求个数的话就执行第0个请求。可以是数字,也可以是字符,为字符时匹配取样器名称,如果匹配不上就会默认并找取样器名称为default的取样器,如果没有则不运行。

4.5.1数值

数值:表示将执行其下第 数值+1个取样器,例如:填1,将执行第2个取样器;填0或者不填,将执行第1个取样器;数值超出其下取样器数目时,执行第1个取样器。

1、创建一个测试计划,设置线程组和Switch控制器,如下图所示:

线程组

Switch控制器

 

2、配置好以后,点击“保存”运行JMeter,然后查看结果树(执行了第3<数值+1>个取样器),如下图所示:

 

3、修改Switch控制器的数值为0或者不填,如下图所示:

4、配置好以后,点击“保存”运行JMeter,然后查看结果树(执行了第1<数值为0或者不填,执行第1个取样器>个取样器),如下图所示:

 

4.5.2字符

1、创建一个测试计划,设置线程组和Switch控制器(直接使用取样器名字),如下图所示:

线程组

Switch控制器

 

2、配置好以后,点击“保存”运行JMeter,然后查看结果树(执行了使用名字的取样器),如下图所示:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jmeter(十二) - 从入门到精通 - JMeter逻辑控制器 - 终篇(详解教程) 的相关文章

  • SQLAlchemy 通过关联对象声明式多对多自连接

    我有一个用户表和一个朋友表 它将用户映射到其他用户 因为每个用户可以有很多朋友 这个关系显然是对称的 如果用户A是用户B的朋友 那么用户B也是用户A的朋友 我只存储这个关系一次 除了两个用户 ID 之外 Friends 表还有其他字段 因此
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • Python(Selenium):如何通过登录重定向/组织登录登录网站

    我不是专业程序员 所以请原谅任何愚蠢的错误 我正在做一些研究 我正在尝试使用 Selenium 登录数据库来搜索大约 1000 个术语 我有两个问题 1 重定向到组织登录页面后如何使用 Selenium 登录 2 如何检索数据库 在我解决
  • 使用带有关键字参数的 map() 函数

    这是我尝试使用的循环map功能于 volume ids 1 2 3 4 5 ip 172 12 13 122 for volume id in volume ids my function volume id ip ip 我有办法做到这一点
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • 如何从shell脚本自动登录MySQL?

    我有一个 MySQL 服务器 其中有一个用户和密码 我想在 shell 脚本中执行一些 SQL 查询而不指定密码 如下所示 config sh MYSQL ROOT root MYSQL PASS password mysql sh sou
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • 向 Altair 图表添加背景实心填充

    I like Altair a lot for making graphs in Python As a tribute I wanted to regenerate the Economist graph s in Mistakes we
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class
  • 如何使用 Pycharm 安装 tkinter? [复制]

    这个问题在这里已经有答案了 I used sudo apt get install python3 6 tk而且效果很好 如果我在终端中打开 python Tkinter 就可以工作 但我无法将其安装在我的 Pycharm 项目上 pip

随机推荐

  • 华为OD机试 - 字符串分割(二)(Java)

    题目描述 给定一个非空字符串S 其被N个 分隔成N 1的子串 给定正整数K 要求除第一个子串外 其余的子串每K个字符组成新的子串 并用 分隔 对于新组成的每一个子串 如果它含有的小写字母比大写字母多 则将这个子串的所有大写字母转换为小写字母
  • C语言初学者可完成的简易的学生成绩管理系统

    该学生成绩管理系统为我大一的一次课设 只是用结构体和链表实现了 增删查改 功能 后续修改时我又加入了按学生总分进行链表排序和保存简单的txt文件 首先介绍我建立的结构体 它可以储存学号 学生姓名 各科成绩和总成绩 并定义了 新类型stu t
  • 【状态估计】变分贝叶斯近似的递归噪声自适应卡尔曼滤波(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文献 1 概述 文献来源 本文研究了变分贝叶斯方法在线性
  • 隐马尔科夫模型(HMM)

    目录 1 隐马尔科夫模型求解步骤 其它大部分模型也均遵循如下路径 2 HMM定义 2 1 HMM的两个基本性质 2 2 HMM的确定 3 HMM的三个基本问题 3 1 概率计算问题 3 1 1直接计算 暴力算法 3 1 2前向算法和后向算法
  • 数据库理论知识总结

    数据库知识总结 一 数据库理论知识 1 1概述 1 4个基本概念 数据 描述事物的符号记录 数据库 永久存储 有组织 可共享 数据库系统 由DB DBMS DBA 应用程序组成的存储 管理 处理和维护数据的系统 数据库管理系统 用户与操作系
  • 正则过滤去除 JSON 中的 Base64 字段

    背景 业务通过Base64字串传输图片 这对日志记录的影响很大 暂不说浪费大量空间 自己看日志的时候也很折磨 问题是携带Base64字串的JSON里面还有业务数据 不能一刀切直接不记录 正则 正经的正则为 说明 以引号开始 只包含字母数字或
  • 双栈排序(Java)

    题目描述 请编写一个程序 按升序对栈进行排序 即最大元素位于栈顶 要求最多只能使用一个额外的栈存放临时数据 但不得将元素复制到别的数据结构中 给定一个int numbers C 中为vector
  • 18.class_create(),device_create详细说明

    class create device create自动创建设备文件结点
  • 异步promise返回内容为undefined解决方案

    采用此种方法 前台调用函数同步获取的异步内容为undefined import getData from http export function getHomePagePart1 city const res getData api ho
  • String为什么推荐使用直接赋值的方式?

    主要原因是直接赋值 他会把值放在同一个地方 即同一块堆内存 大大节省了堆内存
  • 处理串口接收不定长数据的另一种解决方法

    开发平台 Keil 5 库函数版本 V3 5 芯片 STM32F103CBT6 之前我在我的另一篇博客中介绍过使用串口空闲中断 DMA的方式来处理不定长数据 没有看过的同学可以点击这里查看 今天要介绍另一种接收不定长数据的方法 使用的是接收
  • 计网_对广播风暴的抑制【2010考研题】

    下列网络设备中 能够抑制广播风暴的是 中继器 集线器 网桥 路由器 A 仅 和 B 仅 C 仅 和 D 仅 答案 D 解析 考查网络设备与网络风暴 广播域是指网段上所有设备的集合 这些设备收听送往那个网段的所有广播 冲突域是指在同一个冲突域
  • Chromebook开发者模式Linux,Chromebook 的开发者模式和开发者版本有什么区别?

    如果你刚开始使用 Chromebook 会发现有开发者模式和 Chrome OS 的开发者版本两个不同的说法 你一定会好奇它们是不是一个意思 实际上 并不是 什么是开发者模式 Developer Mode 开发者模式从根本上削弱了 Chro
  • 机器学习——K近邻算法

    1 K近邻算法介绍 kNN k nearest neighbor KNN 是一个基本的分类和回归算法 在1968年有Cover和Hart提出 k近邻算法的三个基本要素 模型三要素 k值的选择 距离度量 如 欧式距离 分类决策规则 如 多数表
  • Linux常用命令-云计算篇-100%亲测超详细讲解

    推荐不错的学习地址 https jingyan baidu com article f96699bb168d75894f3c1b5d html 推荐参考资料 但他写的不太对 利用shell脚本监控linux中CPU 内存和磁盘利用率 k8s
  • #FTHR-G0001开发板开箱测评#

    最近看到芯查查有这个活动 就申请了这个开发板体验一下 没想到一申请就成功了 哈哈 人人都是天选之子了属于是 下面记录一下使用过程 1 首先是外观部分 外观板子比较小巧的样子 下面放图 基本上和图片是差不多的 板子是比较经典的调试器加板子的集
  • 安装python详细步骤(超详细,保姆级,一步一图)

    作者介绍 奇妙的大歪 个人名言 但行前路 不负韶华 个人简介 云计算网络运维专业人员 前言 作为一个实用学习的主义的学习者 最关心的问题一定是 我为什么要学习 Python 学会之后我可以用来做什么 首先 对于初学者来说 比起其他编程语言
  • PL/SQL的dbms_output.put_line不显示结果解决方法

    用dbms output put line来输出变量的一些信息 却总是看不到结果 解决方法 再执行存储过程之前 需要在SQL gt 中先执行下面这行代码 set serveroutput on 使用 set serveroutput on
  • 扑克排序

    include
  • Jmeter(十二) - 从入门到精通 - JMeter逻辑控制器 - 终篇(详解教程)

    1 简介 Jmeter官网对逻辑控制器的解释是 Logic Controllers determine the order in which Samplers are processed 意思是说 逻辑控制器可以控制采样器 samplers