首页 > 其他分享 >jmeter--定时器组件

jmeter--定时器组件

时间:2023-05-24 20:22:44浏览次数:40  
标签:设置 定时器 请求 -- 吞吐量 线程 固定 jmeter

工作中,用jmeter写接口测试脚本、性能测试脚本时,通常也会用到定时器组件,一般用的比较多的还是固定定时器、同步定时器。对于其他的定时器了解的不是特别深,为了更系统更深入的学习jmeter工具和工具中的定时器组件,自己对一些经常使用的定时器组件进行了学习、探索,并记录了一些知识点。

在JMeter中定时器用来设置延时和同步,以调节请求的发送速率,这里介绍一些常用的定时器组件,包括:固定定时器、jp@gc-throughput shaping timer、bean shell timer、constant throughput timer、synchronizing timer、uniform random timer

所有定时器的统一规则:

(1)     任何类型的定时器,可以放在线程下方、放在线程组下方、放在testplan 下方。

放在线程下方:此定时器只作用于此线程

放在线程组下方:此定时器作用于此线程组下的所有线程

放在testplan 下方:此定时器作用于testplan下的所有线程组(即每个线程组的每隔线程)

(2)     任何类型的定时器,在放置时,是不分前后的,例如下图,定时器和一个线程组在同一级,但是在线程组的下面,在执行此线程组中的请求时,也同样是先执行定时器,再执行请求。

(3)     每个testplan、线程组、线程下方都可以放多个定时器。多个定时器的情况下,延迟时间是根据定时器进行累加的,例如下图,线程组同级处有个固定吞吐量定时器,搜索3下有个固定定时器。 那每次跑搜索3时,延迟时间=固定定时器时间+固定吞吐量定时器的时间。 而每次跑搜索4时,延迟时间=固定定时器的时间

 

(4)  对于 和吞吐量相关的定时器(吞吐量定时器、固定吞吐量定时器),在设置吞吐量的值,首先要保证线程组中的线程数量是足够的,不然达不到吞吐量设置的要求。

下面将具体介绍每种定时器

1、 固定定时器

定时器用于延迟请求执行,固定定时器主要是固定了延迟的时间。

使用场景:1)一般接口测试时,接口文档中会明确说明此接口连续发送请求时,两个请求之间的间隔最低不能低于多长时间(这种可能一个请求执行完毕了,但后台姿源释放或者其他后台处理还没有执行完,所以要保证请求与请求之间要至少多大的间隔),那对此接口做性能测试、稳定性测试,就要加固定定时器。来保证请求之间的间隔要满足要求。2)模拟真是用户的使用场景,一般用户真正使平台时,对某个请求也不会连续不停的去请求,用户操作时会存在一定的思考时间,那这个思考时间就可以通过固定定时器来模拟。

固定定时器放在某个线程下,则此固定定时器,只对此线程起作用

若固定定时器放在某个线程组下,则此固定定时器对此线程组下的所有线程起作用(即每个请求模拟发送前,都要先固定等待N 秒)。

若固定定时器放在测试计划组件下,则此固定定时器,对测试计划下所有线程组下的所有线程起作用。

 

2、 synchronizing timer

同步定时器,主要是为了更准确的模拟同时并发执行的情况。

通常我们做并发测试时,是设置线程组中的线程数。如下图,当我线程数设置为10,ramp-up period 设置为1s 时,从结果中可以看到,每个请求的start time 还是有一点差距的。每个请求之间大概相差了100ms, 第一个请求和第十个请求相差了大概1s。 这是因为 线程数设置为10,ramp-up period 设置为1s的意思就是1s内把这10个请求模拟发送完。所以严格上讲这并没有达到真正意义上的同时并发请求。

为了能够模拟严格意义的并发,就需要使用synchronizing timer,当我在synchronizing timer设置为10 时,后台就会等到这10个线程都准备好了,再一起发送请求。如下图:

同步定时器的参数配置:

Number of simulated users to group by :即设置要模拟多少用户去同时并发请求。此数值要小于等于线程组中的线程数。因为Number of simulated users to group by代表的是要集结多少个的时候才一起发送请求。 如果线程组中的线程数设置为5, 而Number of simulated users to group by设置为10 ,那将永远集结不到10个

 Timeout in milliseconds : 表示当超时多少毫秒后,还没有集结到Number of simulated users to group by中设置的数量的话。就不再等待,直接发送就可以了。如果此值为0的话,则会一直等待下去。

3、 constant throughput timer

吞吐量定时器。可以控制取样器发送请求的吞吐量,保证吞吐量在某个固定值下。固定吞吐量定时器组件的配置参数意思如下:

如下图,10线程下跑一个请求,跑一段时间后,可以看到吞吐量是308(单位是秒),那对应的一个线程的吞吐量是30,如果我想10个线程下,稳定在300的吞吐量一直跑下去的话,固定吞吐量定时器的target throughput 需设置为1800(即30个/s * 60 = 1800个/min), calculate throughput based on 设置为 this thread only,

从下图可以看到,添加并设置了固定吞吐量定时器后,吞吐量的值一下子就飙到了将近300, 但是存在两个疑惑点:1、为什么跑了一段时间,一直都没办法到达300的吞吐量呢?

2、为什么图形显示吞吐量的值,可以看到很不稳定啊

如果我想10个线程的情况下稳定跑300的吞吐量,其中calculate throughput based on 设置为 all active threads in current thread group, 那target throughput 需设置为18000.

当我把calculate throughput based on 设置为 all active threads,  target throughput设置为18000时,且有两个线程组,每个线程组下有一个https请求,两个线程组设置的线程数都是10 , 测试计划中【独立运行每隔线程组】选择去勾选。最后跑出来的结果如下

(总吞吐量18000个/min, 则平分到两个线程组的话是 9000个/min , 转化成秒的话是150个/min,所以跑出来的结果应该是150左右的吞吐量)

4、 jp@gc-throughput shaping timer

即吞吐量定时器,可以通过设置吞吐量定时器,来达到在某个时间段内,吞吐量是线性增长或稳定在某个值或线性下降的。

使用场景:通常使用此吞吐量定时器,来寻找请求的吞吐量的最大值(即找拐点)

如下图,是我添加了吞吐量定时器, 并对吞吐量定时器的设置:前50秒,吞吐量从0线性增长到200 ,50到110秒的时候,吞吐量从200线性增长到300, 110秒到290秒的时候,吞吐量固定在300一直跑, 290秒到350秒的时候,吞吐量从300线性下降到0, 最终跑出来的结果可以看到基本符合这个设定。

5、 uniform random timer

即统一随机定时器,和固定定时器差不多,只不过这个随机定时器,每次的延迟时间是随机的。

如下图,是执行结果

 

6、 bean shell timer

暂定,后续再讲

 

标签:设置,定时器,请求,--,吞吐量,线程,固定,jmeter
From: https://www.cnblogs.com/ccnn9/p/17429398.html

相关文章

  • 打一个适合自己主机的nginx和php的包
    创建适配主机的nginx和php的包##先m01上配置一遍wordpress#安装nginx,php包#官方源安装vim/etc/yum.repos.d/nginx.repo[nginx-stable]name=nginxstablerepobaseurl=http://nginx.org/packages/centos/$releasever/$basearch/gpgcheck=1enabled=1gpgkey=https://ng......
  • 算法day1
     暴力解二分查找      直接fast遍历数组,不要用for循环i遍历,......
  • LaTeX 的学习笔记
    摘自我的洛谷博客该文章被打开的次数(包括洛谷平台):\(\LaTeX\)中所有命令都以\开头,后面可以跟一个花括号,代表参数。\documentclass{}指定了文章类型,有article(普通文章)、book(书)、beamer(幻灯片),如果要显示中文,有ctexart(普通文章),ctexbook(书),同时要指定文档的编码类型:\document......
  • 打卡
    1.问题:求两个正整数之间的最大公约数。2.思路:用暴击穷举法,简单粗暴地把1~y(前面已经假设x>y)都列出来分别判断是否为x、y的公约数,然后再找到其中最大的一个。3.程序流程图: 4.代码实现:#include<iostream>usingnamespacestd;intmain(){ intx,y; cin>>x>>y; intco......
  • tj-factory_Person_v1_to_v2.py
    说明:该脚本把21的mysql数据库factory_cloud.personnel表里的数据迁移到185的mysql数据库tj_factory_prod.bd_person表里,这2个表字段不一致,只要2个表相关联的字段。 importpymysqlimportsysimportdatetimefromtimeimportstrftime##################在21找出人员数据#......
  • php中日期时间字符串可以直接比较大小
    php中的日期时间字符串可以直接比较大小很多朋友还不知道,一直使用strtotime转换字符串为时间戳再比较大小。$time1='09:00';$time2='12:51';$time3='22:00';self::assertTrue($time2>$time1);self::assertTrue($time2<$time3);$date1='2021-02-03';$......
  • 正则表达式匹配最后一部分
    今天,同事问了我一个正则,最后解决了,给大家提供一下参考。用于取网址的最后一部分。本文用于讲解(?=和?<=和?>=和?!的用法)数据如下:https://download.microsoft.com/download/5/3/8/5388ECC4-C2E2-4D40-8C21-D1EA26FEA0CA/msodll40ui2016-kb4018324-fullfile-x86-glb.exehttps://......
  • python turtle 海龟绘图,绘制小猪佩奇
    项目介绍:瞎玩的,要用Python来画小猪佩奇。其实这个实现并不难,只要使用Python的内置模块turtle进行绘图即可。但是,如要完成一个好的作品,还是需要耗费一定时间的,因为你要提前布置好所有点的坐标和走线样式等,以及实际测试中会反复调试也比较麻烦。下面就是最终完成的小猪佩琪效果动态图......
  • SQL高级语法学习总结(二)
    SQL高级语法学习总结(一)。现在我们接着说sql的高级用法。SQLCREATEDATABASE语法CREATEDATABASEdbname;CREATEDATABASE语句用于创建数据库。 SQLCREATETABLE语法CREATETABLEtable_name(column_name1data_type(size),column_name2data_type(size),column_name3dat......
  • SQL高级语法学习总结(一)
    基础语法呢,就是简单的对行列进行增删改。SQL基础语法学习总结,高级用法无非是条件更多,能实现的需求更多,其中涉及到非常多的关键字,本篇博客就进行一下总结。本文所有用法均在mysql环境下测试通过。其他数据库可能某些关键字会有不同。SQLSELECTLIMIT子句 SELECTLIMIT子句用于规......