Jmeter(十四) - 从入门到精通 - JMeter定时器 - 下篇(详解教程)_jmeter连接定时任务-程序员宅基地

技术标签: python  压力测试  jenkins  单元测试  自动化  jmeter  开发语言  

1.简介

  用户实际操作时,并非是连续点击,而是存在很多停顿的情况,例如:用户需要时间阅读文字内容、填表、或者查找正确的链接等。为了模拟用户实际情况,在性能测试中我们需要考虑思考时间。若不认真考虑思考时间很可能会导致测试结果的失真。例如,估计的可支撑用户数偏小。在性能测试中,访问请求之间的停顿时间被称之为思考时间,那么如何模拟这种停顿呢?我们可以借助JMeter的定时器实现。

  JMeter中的定时器一般被我们用来设置延迟与同步。定时器的执行优先级高于Sampler(取样器),在同一作用域(例如控制器下)下有多个定时器存在时,每一个定时器都会执行,如果想让某一定时器仅对某一Sampler有效,则可以把定时器加在此Sampler节点下。

2.预览定时器

首先我们来看一下JMeter的定时器,路径:线程组(用户)->添加->定时器(Timer);我们可以清楚地看到JMeter5中共有9个定时器,如下图所示:

如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是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

 

如果上图您看得不是很清楚的话,

 

 

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

3.常用定时器详解

这一小节,宏哥就由上而下地详细地讲解一下常用的定时器。

3.1Gaussian Random Timer

高斯定时器,高斯定时器,生成一个呈高斯分布的时间间隔。
如需要每个线程的延迟时间是符合标准正态分布的随机时间停顿,那么使用这个定时器,总延迟 = 高斯分布值(平均0.0和标准偏差1.0)* 指定的偏差值+固定延迟偏移(计算参考:Math.abs((this.random.nextGaussian() * 偏差值) + 固定延迟偏移))。
另一种解释方法,在高斯随机定时器中, 随机时间在固定延迟偏移附近,概率符合高斯曲线分布。

总延迟时间 = 高斯分布值(平均0.0和标准差1.0)* 指定的偏差值 + 固定延迟偏移

1、我们先来看看这个Gaussian Random Timer长得是啥样子,路径:线程组 > 添加 > 定时器 > 高斯随机定时器,如下图所示: 

总结了一个思维导图,关于JMeter5的逻辑控制器类型,如下图所示: 

2、关键参数说明如下:

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

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

Deviation:忽略子控制器,即子控制器失效,由交替控制器接管。

Constant Delay Offset:

3.1.1实例

1、新建测试计划,线程组下添加2个取样器 访问博客园首页、访问北京宏哥的园子,如下图所示:

2、然后再添加高斯随机定时器,设置高斯随机定时器的偏差为1000ms,固定延迟偏移为3000,如下图所示:

 

3、配置好以后,点击“保存”,运行JMeter,查看表格结果(取样器访问博客园首页和访问度娘间隔3s),如下图所示:

3.2JSR223 Timer

JSR定时器,在jemter最新的版本中,新增了这个定时器,可以这么理解,这个定时器相当于BeanShell定时器的“父集”,它可以使用java、JavaScript、beanshell等多种语言去实现你希望完成的事情。

1、我们先来看看这个JSR223 Timer长得是啥样子,路径:线程组 > 添加 > 定时器 > JSR233定时器,如下图所示: 

2、关键参数说明如下:

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

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

Thread Delay:忽略子控制器,即子控制器失效,由交替控制器接管。

3.2.1实例

1、新建测试计划,线程组下添加2个取样器 访问博客园首页、访问度娘,如下图所示:

2、然后再添加JSR223 定时器,编写脚本设置延迟时间5s,如下图所示:

 

3、配置好以后,点击“保存”,运行JMeter,查看表格结果(取样器访问博客园首页和访问度娘间隔5s),如下图所示:

 

3.3Poisson Random Timer

泊松随机定时器,这个定时器在每个线程请求之前按随机的时间停顿,总的延迟就是泊松分布值和偏移值之和。这个定时器在每个线程请求之前按随机的时间停顿,总的延迟就是泊松分布值和偏移值之和。

泊松分布:概率学中离散机率分布

1、我们先来看看这个Poisson Random Timer长得是啥样子,路径:线程组 > 添加 > 定时器 > 泊松随机定时器,如下图所示: 

2、关键参数说明如下:

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

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

Lambda(in milliseconds):兰布达值;

Constant Delay Offset(in milliseconds):暂停的毫秒数减去随机延迟的毫秒数。

3.3.1实例

1、新建测试计划,线程组下添加2个取样器 访问博客园首页、访问度娘,如下图所示:

2、然后再添加泊松定时器,设置暂停时间会分布在100到400毫秒之间,如下图所示:

 

3、配置好以后,点击“保存”,运行JMeter,查看表格结果(取样器访问博客园首页和访问度娘间隔在100到400毫秒之间),如下图所示:

 

3.4Synchronizing Timer

同步计时器,用来模拟多用户并发,或者说更严格的并发场景,比如秒杀活动,就要用这个玩意了。

作用:也是用来设置集合点,阻塞线程,同步虚拟用户,直到指定的线程数量到达后,恰好在同一时刻执行任务,再一起释放,可以瞬间产生很大的压力。

注意:敲黑板,敲脑袋!!!

一般情况,并发用户数多少,同步定时器就写多少。(多少并发就要等多少个人到齐一起释放)

1、我们先来看看这个Synchronizing Timer长得是啥样子,路径:线程组 > 添加 > 定时器 > 同步定时器,如下图所示: 

2、关键参数说明如下:

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

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

Number of Simulated Users to Group by:集合点个数 (执行的线程数),如果设置为0,等于设置为线程租中的线程数量。

Timeout in milliseconds:指定线程数多少秒没集合到算超时(以毫秒为单位)。如果设置为0,该定时器将会等待线程数达到了"Number of Simultaneous Users toGroup"中设置的值才释放,不够的话就死等。如果大于0,那么如果超过Timeout inmilliseconds中设置的最大等待时间后还没达到"Number of Simultaneous Users toGroup"中设置的值,Timer将不再等待,释放已到达的线程。默认为0

注意:敲黑板,敲脑袋!!!

(1)上面两个参数如果都设置了值,则在实际中是哪个条件先达到,定时器先执行哪个,如第一个参数释放线程数量先达到,则不会管超时时间的值,timer会释放;如果第二个参数超时时间先达到,则不会再等线程数量,按照目前超时的时间点集合的线程数,timer释放。

(2)同步定时器(Synchronizing Timer)的超时时间设置要求: 超时时间 > 请求集合数量 * 1000 / (线程数 / 线程加载时间)

线程组用户数100,添加同步定时器

线程数(100) 定时器等待线程数(视情况而定) 超时设置(默认为0,单位毫秒) 设置效果(脚本运行达到的效果)
100 100 0 用户等待达到100个用户,同时并发请求
100 90 100

1、刚好超时100ms,且等到90个用户并发请求;

2、等到90个用户,未超时,继续等到结束,再并发,这时用户数将大于90;

3、等到小于90和用户,又超过了设置100ms,那么以等到的用户并发请求,可能小于90;

100 110 0 用户无法达到110个用户,线程将一直等待,不会停止;
100 100 100

1、刚好超时100ms,等到100个用户并发请求;

2、超时100ms后,定时器以等到的最大用户数并发请求;

3、如果超时100ms,用户数没有到达100,将以等到的用户数并发请求,这是用户数可能小于100;

100 0 0 定时器设置的用户数等效于线程的用户数,超时默认设置为0,用户同时并发请求
3.4.1实例

a. 若某个请求需要并发测试,则可在该请求下添加同步定时器。

1、新建测试计划,线程组(设置线程组10个,加载时间1s)下添加2个取样器 访问博客园首页(已禁用)、访问度娘,如下图所示:

 2、然后再添加同步定时器,设置模拟用户组数量:10,超时时间:5000,如下图所示:

3、配置好以后,点击“保存”,运行JMeter,查看表格结果(几乎是在同一时间,10个用户同时并发访问度娘),如下图所示:

b. 若某几个请求需要同时进行并发,则可在请求的同一级添加同步定时器。

1、新建测试计划,线程组下添加2个取样器  访问博客园首页、访问度娘,如下图所示:

 

2、然后再添加同步定时器,设置模拟用户组数量:10,超时时间:5000,如下图所示:

3、配置好以后,点击“保存”,运行JMeter,查看表格结果(取样器访问博客园首页和访问度娘间隔3s),如下图所示:

 

c. 若某几个线程需要同步并发,则可在测试计划下(线程组同一级)添加同步定时器(适用于多业务混合并发测试)。

1、新建测试计划,添加同步定时器,设置模拟用户组数量:10,超时时间:5000,如下图所示:

2、然后再添加两个线程组,一个线程组下添加2个取样器  访问博客园首页、访问度娘,另一个线程组下添加1个取样器 访问度娘1,如下图所示:

 

3、配置好以后,点击“保存”,运行JMeter,查看表格结果,如下图所示: 

 

3.5BeanShell Timer(重要-常用)

Bean Shell定时器,顾名思义是:互相交替,其节点下的取样器交替执行。根据被控制器触发执行次数,去依次执行控制器下的子节点<逻辑控制器、采样器>。被触发执行可以由线程组的线程数、循环次数、逻辑控制器触发。

1、我们先来看看这个 Bean Shell定时器长得是啥样子,路径:线程组 > 添加 > 定时器 > Bean Shell定时器,如下图所示: 

2、关键参数说明如下:

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

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

Reset Interpreter:每次迭代是否重置解析器,默认为false;在长时间运行的脚本中建议设置为true。

Parameters:BeanShell脚本的入参。入参可以是单个变量;也可以是数组,若是字符串数组,两个元素之间用空格隔开;也可以是常量。

File Name:BeanShell脚本可以从脚本文件中读取。

Script:在Script区直接写BeanShell脚本。

3.5.1实例

1、新建测试计划,线程组下添加2个取样器 访问博客园首页、访问度娘,如下图所示:

2、然后再添加Bean Shell定时器,脚本代码设置延迟时间5s,如下图所示:

3、配置好以后,点击“保存”,运行JMeter,查看结果树(取样器访问博客园首页和访问度娘间隔5s),如下图所示:

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Faith_Lzt/article/details/132277964

智能推荐

python中文显示不出来_解决Python词云库wordcloud不显示中文的问题-程序员宅基地

文章浏览阅读2.6k次。解决Python词云库wordcloud不显示中文的问题2018-11-25背景:wordcloud是基于Python开发的词云生成库,功能强大使用简单。github地址:https://github.com/amueller/word_cloudwordcloud默认是不支持显示中文的,中文会被显示成方框。安装:安装命令:pip install wordcloud解决:经过测试发现不支持显示中文..._词云python代码无法输出文字

台式计算机cpu允许温度,玩游戏cpu温度多少正常(台式电脑夏季CPU一般温度多少)...-程序员宅基地

文章浏览阅读1.1w次。随着炎热夏季的到来,当玩游戏正爽的时候,电脑突然死机了,自动关机了,是不是有想给主机一脚的冲动呢?这个很大的原因是因为CPU温度过高导致的。很多新手玩家可能都有一个疑虑,cpu温度多少以下正常?有些说是60,有些说是70,到底多高CPU温度不会死机呢?首先我们先看看如何查看CPU的温度。下载鲁大师并安装,运行鲁大师软件,即可进入软件界面,并点击温度管理,即可看到电脑各个硬件的温度。鲁大师一般情况下..._台式机玩游戏温度多少正常

小白自学Python日记 Day2-打印打印打印!_puthon打印任务收获-程序员宅基地

文章浏览阅读243次。Day2-打印打印打印!我终于更新了!(哭腔)一、 最简单的打印最最简单的打印语句: print(“打印内容”)注意:python是全英的,符号记得是半角下面是我写的例子:然后进入power shell ,注意:你需要使用cd来进入你保存的例子的文件夹,保存时名字应该取为xxx.py我终于知道为什么文件夹取名都建议取英文了,因为进入的时候是真的很麻烦!如果你没有进入正确的文件夹..._puthon打印任务收获

Docker安装:Errors during downloading metadata for repository ‘appstream‘:_"cenerrors during download metadata for repository-程序员宅基地

文章浏览阅读1k次。centos8问题参考CentOS 8 EOL如何切换源? - 云服务器 ECS - 阿里云_"cenerrors during download metadata for repository \"appstream"

尚硅谷_谷粒学苑-微服务+全栈在线教育实战项目之旅_基于微服务的在线教育平台尚硅谷-程序员宅基地

文章浏览阅读2.7k次,点赞3次,收藏11次。SpringBoot+Maven+MabatisPlusmaven在新建springboot项目引入RELEASE版本出错maven在新建springboot项目引入RELEASE版本出错maven详解maven就是通过pom.xml中的配置,就能够从仓库获取到想要的jar包。仓库分为:本地仓库、第三方仓库(私服)、中央仓库springframework.boot:spring-boot-starter-parent:2.2.1.RELEASE’ not found若出现jar包下载不了只有两_基于微服务的在线教育平台尚硅谷

随便推点

网络学习第六天(路由器、VLAN)_路由和vlan-程序员宅基地

文章浏览阅读316次。路由的概念路由器它称之为网关设备。路由器就是用于连接不同网络的设备路由器是位于OSI模型的第三层。路由器通过路由决定数据的转发。网关的背景:当时每家计算机厂商,用于交换数据的通信程序(协议)和数据描述格式各不相同。因此,就把用于相互转换这些协议和格式的计算机称为网关。路由器与三层交换器的对比路由协议对比路由器的作用:1.路由寻址2.实现不同网络之间相连的功能3.通过路由决定数据的转发,转发策略称为 路由选择。VLAN相关技术什么是VLAN?中文名称叫:虚拟局域网。虚_路由和vlan

设置div背景颜色透明度,内部元素不透明_div设置透明度,里面的内容不透明-程序员宅基地

文章浏览阅读2.8w次,点赞6次,收藏22次。设置div背景颜色透明度,内部元素不透明:.demo{  background-color:rgba(255,255,255,0.15) } 错误方式:.demo{ background-color:#5CACEE;opacity:0.75;} 这样会导致div里面的元素内容和背景颜色一起变透明只针对谷歌浏览器的测试_div设置透明度,里面的内容不透明

Discuz!代码大全-程序员宅基地

文章浏览阅读563次。1.[ u]文字:在文字的位置可以任意加入您需要的字符,显示为下划线效果。2.[ align=center]文字:在文字的位置可以任意加入您需要的字符,center位置center表示居中,left表示居左,right表示居右。5.[ color=red]文字:输入您的颜色代码,在标签的中间插入文字可以实现文字颜色改变。6.[ SIZE=数字]文字:输入您的字体大小,在标签的中间插入文..._discuzcode 大全

iOS NSTimer定时器-程序员宅基地

文章浏览阅读2.6k次。iOS中定时器有三种,分别是NSTimer、CADisplayLink、dispatch_source,下面就分别对这三种计时器进行说明。一、NSTimerNSTimer这种定时器用的比较多,但是特别需要注意释放问题,如果处理不好很容易引起循环引用问题,造成内存泄漏。1.1 NSTimer的创建NSTimer有两种创建方法。方法一:这种方法虽然创建了NSTimer,但是定时器却没有起作用。这种方式创建的NSTimer,需要加入到NSRunLoop中,有NSRunLoop的驱动才会让定时器跑起来。_ios nstimer

Linux常用命令_ls-lmore-程序员宅基地

文章浏览阅读4.8k次,点赞17次,收藏51次。Linux的命令有几百个,对程序员来说,常用的并不多,考虑各位是初学者,先学习本章节前15个命令就可以了,其它的命令以后用到的时候再学习。1、开机 物理机服务器,按下电源开关,就像windows开机一样。 在VMware中点击“开启此虚拟机”。2、登录 启动完成后,输入用户名和密码,一般情况下,不要用root用户..._ls-lmore

MySQL基础命令_mysql -u user-程序员宅基地

文章浏览阅读4.1k次。1.登录MYSQL系统命令打开DOS命令框shengfen,以管理员的身份运行命令1:mysql -u usernae -p password命令2:mysql -u username -p password -h 需要连接的mysql主机名(localhost本地主机名)或是mysql的ip地址(默认为:127.0.0.1)-P 端口号(默认:3306端口)使用其中任意一个就OK,输入命令后DOS命令框得到mysql>就说明已经进入了mysql系统2. 查看mysql当中的._mysql -u user

推荐文章

热门文章

相关标签