Jmeter(十三) - 从入门到精通 - JMeter定时器 - 上篇(详解教程)
1.简介
用户实际操作时,并非是连续点击,而是存在很多停顿的情况,例如:用户需要时间阅读文字内容、填表、或者查找正确的链接等。为了模拟用户实际情况,在性能测试中我们需要考虑思考时间。若不认真考虑思考时间很可能会导致测试结果的失真。例如,估计的可支撑用户数偏小。在性能测试中,访问请求之间的停顿时间被称之为思考时间,那么如何模拟这种停顿呢?我们可以借助JMeter的定时器实现。
JMeter中的定时器一般被我们用来设置延迟与同步。定时器的执行优先级高于Sampler(取样器),在同一作用域(例如控制器下)下有多个定时器存在时,每一个定时器都会执行,如果想让某一定时器仅对某一Sampler有效,则可以把定时器加在此Sampler节点下。
2.预览定时器
首先我们来看一下JMeter的定时器,路径:线程组(用户)->添加->定时器(Timer);我们可以清楚地看到JMeter5中共有9个定时器,如下图所示:
如果上图您看得不是很清楚的话,宏哥总结了一个思维导图,关于JMeter5的逻辑控制器类型,如下图所示:
通过以上的了解,我们对定时器有了一个大致的了解和认识。下面宏哥就给小伙伴或则童鞋们分享讲解一些通常在工作中会用到的定时器。
4.常用定时器详解
这一小节,宏哥就由上而下地详细地讲解一下常用的定时器。
4.1Constant Timer
固定定时器,看名称大家也知道是一个固定定时器,多用来模拟思考时间,顾名思义是:请求之间的间隔时间为固定值。
作用:通过ThreadDelay设定每个线程请求之前的等待时间(单位为毫秒)。注意:固定定时是有作用域的,放到线程组下其作用域是所有请求都会延迟固定器设置的时间,如果放到请求内,作用域是单个请求延迟时间(常用)。
1、我们先来看看这个Constant Timer长得是啥样子,路径:线程组 > 添加 > 定时器 > 固定定时器,如下图所示:
2、关键参数说明如下:
Name:名称,可以随意设置,甚至为空;
Comments:注释,可随意设置,可以为空;
Thread Delay(in milliseconds):线程等待时间,单位毫秒。
用法(场景),更真实的模拟用户场景,需要设置等待时间,或是等待上一个请求的时间,才执行,给sampler之间的思考时间;
4.1.1实例
场景应用:性能测试中,根据用户操作预估时间,或者需要等待一段时间来加载数据。
PS:在实际模拟用户请求的过程中,会失去灵活性,不推荐大量使用
1、新建测试计划,线程组下添加2个取样器 访问博客园首页、访问度娘,如下图所示:
2、然后再添加固定定时器,设置延迟时间3000ms,即3s,如下图所示:
3、配置好以后,点击“保存”,运行JMeter,查看表格结果(取样器访问博客园首页和访问度娘间隔3s),如下图所示:
4.2Uniform Random Timer
统一(均匀)随机定时器,也是让线程暂停一个随机时间,只不过力求随机时间能够更均匀,都会出现。均匀随机定时器,顾名思义,它产生的延迟时间是个随机值,而各随机值出现的概率均等。总的延迟时间等于一个随机延迟时间加上一个固定延迟时间,用户可以设置随机延迟时间和固定延迟时间。
作用:它产生的延迟时间是个随机值,而各随机值出现的概率均等。总的延迟时间等于一个随机延迟时间加上一个固定延迟时间,用户可以设置随机延迟时间和固定延迟时间。每个线程的延迟时间是符合标准正态分布的随机时间停顿,那么使用这个定时器,总延迟 = 高斯分布值(平均0.0和标准偏差1.0)* 指定的偏差值+固定延迟偏移(Math.abs((this.random.nextGaussian() * 偏差值) + 固定延迟偏移))
总延迟时间 = 指定范围内的随机时间(在范围内各随机值等概率)+ 固定延迟时间
1、我们先来看看这Uniform Random Timer长得是啥样子,路径:线程组 > 添加 > 定时器 > 统一随机定时器,如下图所示:
2、关键参数说明如下:
Name:名称,可以随意设置,甚至为空;
Comments:注释,可随意设置,可以为空;
Random Delay Maximum:最大随机延迟时间;
Constant Delay Offset: 固定延迟时间。
4.2.1实例
1、新建测试计划,线程组下添加2个取样器 访问博客园首页、访问度娘,如下图所示:
2、然后再添加统一随机定时器,设置延迟时间3s,如下图所示:
3、配置好以后,点击“保存”,运行JMeter,查看表格结果(取样器访问博客园首页和访问度娘间隔4s = 1000ms + 3000ms),如下图所示:
4.3Precise Throughput Timer
准确的吞吐量定时器,顾名思义,这个就是控制吞吐量的。和Constant Throughput Timer类似,但是能更精准的控制请求。区别就是Constant Throughput Timer根据时间来做定时器(到了多少秒就发请求);Precise Throughput Timer是根据吞吐量在做计时器(到了多少量就发请求)。也就是能做到控制请求的速度和个数。
1、我们先来看看这个Precise Throughput Timer长得是啥样子,路径:线程组 > 添加 > 定时器 > 准确的吞吐量定时器,如下图所示:
2、关键参数说明如下:
Name:名称,可以随意设置,甚至为空;
Comments:注释,可随意设置,可以为空;
Thread Delay:忽略子控制器,即子控制器失效,由交替控制器接管。
Target Throught:目标吞吐量
Throught Period:表示在多长时间内发送Target Throught指定的请求数(以秒为单位)
Test Druation:指定测试运行时间(以秒为单位)
Number of threads in the bath:用来设置集合点,等到指定个数的请求后并发执行
4.3.1实例
1、新建测试计划,线程组(设置线程组,保证有足够的时间)下添加2个取样器 访问博客园首页(已禁用)、访问度娘,如下图所示:
2、然后再添加准确的吞吐量定时器,设置10个吞吐量,设置10s启动完10个请求,设置运行时间20s,如下图所示:
3、配置好以后,点击“保存”,运行JMeter,查看表格结果(大约用了20秒启动了21个线程),如下图所示:
4、设置集合点在Precise Throughput Timer中设置集合点为10,其它参数不变,如下图所示:
5、在Thread Group中设置线程数为10,如下图所示:
6、配置好以后,点击“保存”,运行JMeter,查看表格结果(可以看到,每10个线程为1组,同时启动。),如下图所示:
4.4Constant Throughput Timer
固定吞吐量定时器,这个定时器引入了变量暂停,通过计算使总吞吐量(以每分钟去杨树计)尽可能接近给定的数字。当然,如果服务器不能处理它,或者如果其他定时器或耗时的测试原件阻止它,那么吞吐量将更低。
虽然计时器被称为常数吞吐量定时器,但吞吐量值并不一定是常数。它可以根据变量或函数调用定义,并且可以在测试期间改变该值。通过以下多种方式都可以改变:
使用计数器变量
使用一个 __jexl3, __groovy 函数来提供一个变化的值
使用远程BeeShell服务器更改Jmeter属性
请注意,在测试期间,不应该频繁地更改吞吐量值——新值生效需要一段时间。
常数吞吐量定时器作用:控制吞吐量(线上压测时候,避免一下就上百上千的吞吐量影响线上性能,加上这个之后较安全,可以一点一点往上加); 按指定的吞吐量执行,以每分钟为单位。计算吞吐量依据是最后一次线程的执行时延。
作用域:此定时器放在请求的下级,只对它的上级请求起作用
1、我们先来看看这个Constant Throughput Timer长得是啥样子,路径:线程组 > 添加 > 定时器 > 常数吞吐量定时器,如下图所示:
2、关键参数说明如下:
Name:名称,可以随意设置,甚至为空;
Comments:注释,可随意设置,可以为空;
Target throughput(in samples per minute):目标吞吐量。注意这里是每分钟发送的请求数,可以选择作用的线程:当前线程、当前线程组、所有线程组等,具体含义如下:
this thread only: 设置每个线程的吞吐量。总的吞吐量=线程数*该值。
all active threads in current thread group:吞吐量被分摊到当前线程组所有的活动线程上。每个线程将根据上次运行时间延迟。
all active threads:吞吐量被分配到所有线程组的所有活动线程的总吞吐量。每个线程将根据上次运行时间延迟。在这种情况下,每个线程组需要一个具有相同设置的固定吞吐量定时器。(不常用)
all active threads in current thread group (shared):同上,但是每个线程是根据组中的线程的上一次运行时间来延迟。相当于线程组组内排队。(不常用)
all active threads (shared):同上,但每个线程是根据线程的上次运行时间来延迟。相当于让所有线程组整体排队。(不常用)
4.4.1实例
1、新建测试计划,线程组下添加1个取样器 访问博客园首页(已禁用)、访问度娘,如下图所示:
2、然后再添加常数吞吐量定时器,设置目标吞吐量为300,如下图所示:
3、配置好以后,点击“保存”,运行JMeter,查看jp@gc - Transactions per Second(常数吞吐量定时器设置300/分钟,也就是5/秒,故tps最大5,这里的tps大约都是5,说明已经超过5,可以往上增加了),如下图所示:
5. 定时器的作用域
1. 定时器是在每个sampler(采样器)之前执行的,而不是之后(无论定时器位置在sampler之前还是下面);
2. 当执行一个sampler之前时,所有当前作用域内的定时器都会被执行;
3. 如果希望定时器仅应用于其中一个sampler,则把定时器作为子节点加入;
4. 如果希望在sampler执行完之后再等待,则可以使用Test Action;
6.小结
6.1安装插件管理
1、安装前查看选项,没有看到插件管理,如下图所示:
2、想安装一个jmeter的插件,到官网(http://jmeter-plugins.org)上去下载插件安装包,但是页面一直都是搜索状态,如下图所示:
3、然后宏哥找了一个下载一个jmeter的插件管理工具 地址: http://jmeter-plugins.org/get/
4、将下载的文件拷贝的你的JMeter根目录下的 lib/ext
目录,如下图所示:
5、 重启jmeter,在选项中可以看到插件管理工具已经安装成功,如下图所示:
6、勾选要下载的插件,点击Apply changes and restart JMeter按钮就完成了
Installed Plugins:用于查看已安装的插件,并可通过 取消勾选
- 应用操作
来卸载插件
Available Plugins:用于查看和安装可用的插件,通过 勾选-应用操作(右下侧有按钮Apply changes and restart JMeter) 来安装插件
Upgrades:用于升级插件
好了,今天关于定时器的上篇就讲解到这里,这一篇主要介绍了 Constant Timer 、Uniform Random Timer、Precise Throughput Timer和 Constant Throughput Timer。感谢你耐心的阅读和学习。
您的肯定就是我进步的动力。如果你感觉还不错,就请鼓励一下吧!记得随手点波 推荐 不要忘记哦!!!
别忘了点 推荐 留下您来过的痕迹
Jmeter(十三) - 从入门到精通 - JMeter定时器 - 上篇(详解教程)的更多相关文章
- Jmeter(一) - 从入门到精通 - 环境搭建(详解教程)
1.JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序).它可以用来测试静态和动态资源的性能,例如:静态文件, ...
- Jmeter(二十三) - 从入门到精通 - JMeter函数 - 上篇(详解教程)
1.简介 在性能测试中为了真实模拟用户请求,往往我们需要让提交的表单内容每次都发生变化,这个过程叫做参数化.JMeter配置元件与前置处理器都能帮助我们进行参数化,但是都有局限性,为了帮助我们能够更好 ...
- Jmeter(九) - 从入门到精通 - JMeter逻辑控制器 - 上篇(详解教程)
1.简介 Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in which Samplers are processed.”. 意思 ...
- Jmeter(八) - 从入门到精通 - JMeter配置元件(详解教程)
1.简介 JMeter配置元件可以用来初始化默认值和变量,读取文件数据,设置公共请求参数,赋予变量值等,以便后续采样器使用.将在其作用域的初始化阶段处理.配置元件(Config Element)提供对 ...
- Jmeter(十) - 从入门到精通 - JMeter逻辑控制器 - 中篇(详解教程)
1.简介 Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in which Samplers are processed.”. 意思 ...
- Jmeter(十一) - 从入门到精通 - JMeter逻辑控制器 - 下篇(详解教程)
1.简介 Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in which Samplers are processed.”. 意思 ...
- Jmeter(十七) - 从入门到精通 - JMeter后置处理器 -上篇(详解教程)
1.简介 后置处理器是在发出“取样器请求”之后执行一些操作.取样器用来模拟用户请求,有时候服务器的响应数据在后续请求中需要用到,我们的势必要对这些响应数据进行处理,后置处理器就是来完成这项工作的.例如 ...
- Jmeter(三十三) - 从入门到精通 - Jmeter Http协议录制脚本工具-Badboy6(详解教程)
1.简介 今天分享的就是在上一篇文章的基础上来进行讲解和分享:Badboy使用数据源Excel进行脚本参数化.然后在使用读取的参数进行对比断言. 2.具体场景 Badboy录制一个搜索的脚本,并对搜索 ...
- Jmeter(四十四) - 从入门到精通高级篇 - Jmeter远程启动(本地运行+远程运行)(详解教程)
1.简介 这篇文章其实很简单,就是为下一篇文章做一个铺垫,所以宏哥给小伙伴或童鞋们提前热身一下. 2.什么是远程运行? 远程执行,就是脚本放在本地,执行却在另一台电脑上执行,当然,可以是远程多台电脑一 ...
随机推荐
- hdl - HLS vs. Generator
https://mp.weixin.qq.com/s/n_4RKlOddr_p2S_wODvFbw 介绍硬件建模的各个层次,以及基于RTL进一步提高层次的方法. 1. 物理版图 直接画 ...
- Java实现 蓝桥杯 算法训练 K好数
算法训练 K好数 时间限制:1.0s 内存限制:256.0MB 提交此题 锦囊1 锦囊2 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K ...
- Java实现 LeetCode 458 可怜的小猪
458. 可怜的小猪 有 1000 只水桶,其中有且只有一桶装的含有毒药,其余装的都是水.它们从外观看起来都一样.如果小猪喝了毒药,它会在 15 分钟内死去. 问题来了,如果需要你在一小时内,弄清楚哪 ...
- Java实现 LeetCode 456 132模式
456. 132模式 给定一个整数序列:a1, a2, -, an,一个132模式的子序列 ai, aj, ak 被定义为:当 i < j < k 时,ai < ak < aj ...
- Java实现 蓝桥杯VIP 算法训练 排列问题
算法训练 排列问题 时间限制:1.0s 内存限制:512.0MB 问题描述 求一个0-N-1的排列(即每个数只能出现一次),给出限制条件(一张N*N的表,第i行第j列的1或0,表示为j-1这个数不能出 ...
- Java实现 LeetCode 125 验证回文串
125. 验证回文串 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, ...
- Java实现 洛谷 P1089 津津的储蓄计划
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc=new Scan ...
- java实现文件管理
** 文件管理** 显示"DaSai"目录下以"Ex"开头的文件和目录,写了如下代码,请完善之: import java.io.*; class JavaFil ...
- 【大厂面试04期】讲讲一条MySQL更新语句是怎么执行的?
流程图 这是在网上找到的一张流程图,写的比较好,大家可以先看图,然后看详细阅读下面的各个步骤. 执行流程: 1.连接验证及解析 客户端与MySQL Server建立连接,发送语句给MySQL Serv ...
- 实践案例丨基于ModelArts AI市场算法MobileNet_v2实现花卉分类
概述 MobileNetsV2是基于一个流线型的架构,它使用深度可分离的卷积来构建轻量级的深层神经网,此模型基于 MobileNetV2: Inverted Residuals and Linear ...