• 0
  • 0
分享
  • JMeter定时器——软件测试圈
  • 北极 2022-08-01 15:47:23 字数 4035 阅读 5598 收藏 0

1.简介

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

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

2.预览定时器

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

1.png

2.png

2.1Constant Timer

固定定时器,看名称大家也知道是一个固定定时器,多用来模拟思考时间,顾名思义是:请求之间的间隔时间为固定值。

作用:通过ThreadDelay设定每个线程请求之前的等待时间(单位为毫秒)。注意:固定定时是有作用域的,放到线程组下其作用域是所有请求都会延迟固定器设置的时间,如果放到请求内,作用域是单个请求延迟时间(常用)。

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

3.png

2、关键参数说明如下:

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

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

Thread Delay(in milliseconds):线程等待时间,单位毫秒。

用法(场景),更真实的模拟用户场景,需要设置等待时间,或是等待上一个请求的时间,才执行,给sampler之间的思考时间;

1.实例

场景应用:性能测试中,根据用户操作预估时间,或者需要等待一段时间来加载数据。

PS:在实际模拟用户请求的过程中,会失去灵活性,不推荐大量使用

1、新建测试计划,线程组下添加2个取样器 访问首页、查询接口,如下图所示:

4.png

2、然后再添加固定定时器,设置延迟时间3000ms,即3s,如下图所示:

5.png

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

6.png

2.2Uniform Random Timer

统一(均匀)随机定时器,也是让线程暂停一个随机时间,只不过力求随机时间能够更均匀,都会出现。均匀随机定时器,顾名思义,它产生的延迟时间是个随机值,而各随机值出现的概率均等。总的延迟时间等于一个随机延迟时间加上一个固定延迟时间,用户可以设置随机延迟时间和固定延迟时间。

作用:它产生的延迟时间是个随机值,而各随机值出现的概率均等。总的延迟时间等于一个随机延迟时间加上一个固定延迟时间,用户可以设置随机延迟时间和固定延迟时间。每个线程的延迟时间是符合标准正态分布的随机时间停顿,那么使用这个定时器,总延迟 = 高斯分布值(平均0.0和标准偏差1.0)* 指定的偏差值+固定延迟偏移(Math.abs((this.random.nextGaussian() * 偏差值) + 固定延迟偏移))

总延迟时间 = 指定范围内的随机时间(在范围内各随机值等概率)+ 固定延迟时间

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

7.png

2、关键参数说明如下:

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

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

Random Delay Maximum:最大随机延迟时间;

Constant Delay Offset: 固定延迟时间。

2.实例

1、添加统一随机定时器,设置延迟时间3s,如下图所示:

8.png

2、配置好以后,点击“保存”,运行JMeter,查看表格结果(取样器访问首页和访问查询间隔4s = 1000ms + 3000ms),如下图所示:

9.png

3.Precise Throughput Timer

准确的吞吐量定时器,顾名思义,这个就是控制吞吐量的。和Constant Throughput Timer类似,但是能更精准的控制请求。区别就是Constant Throughput Timer根据时间来做定时器(到了多少秒就发请求);Precise Throughput Timer是根据吞吐量在做计时器(到了多少量就发请求)。也就是能做到控制请求的速度和个数。

1、我们先来看看这个Precise Throughput Timer长得是啥样子,路径:线程组 > 添加 > 定时器 > 准确的吞吐量定时器,如下图所示:

1.png

2、关键参数说明如下:

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

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

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

Target Throught:目标吞吐量

Throught Period:表示在多长时间内发送Target Throught指定的请求数(以秒为单位)

Test Druation:指定测试运行时间(以秒为单位)

Number of threads in the bath:用来设置集合点,等到指定个数的请求后并发执行

4.实例

1、新建测试计划,线程组(设置线程组,保证有足够的时间)下添加2个取样器 访问首页(已禁用)、访问查询接口,如下图

2.png

2、然后再添加准确的吞吐量定时器,设置10个吞吐量,设置10s启动完10个请求,设置运行时间20s,如下图所示:

3.png

3、配置好以后,点击“保存”,运行JMeter,查看表格结果(大约用了20秒启动了20个线程),如下图所示

3.png

4、设置集合点在Precise Throughput Timer中设置集合点为10,其它参数不变,如下图所示:

2.png

5、在Thread Group中设置线程数为10,如下图所示:

2.png

6、配置好以后,点击“保存”,运行JMeter,查看表格结果(可以看到,每10个线程为1组,同时启动。),如下图所示:

3.png

5.Constant Throughput Timer

固定吞吐量定时器,这个定时器引入了变量暂停,通过计算使总吞吐量(以每分钟去杨树计)尽可能接近给定的数字。当然,如果服务器不能处理它,或者如果其他定时器或耗时的测试原件阻止它,那么吞吐量将更低。

虽然计时器被称为常数吞吐量定时器,但吞吐量值并不一定是常数。它可以根据变量或函数调用定义,并且可以在测试期间改变该值。通过以下多种方式都可以改变:

  • 使用计数器变量

  • 使用一个 __jexl3, __groovy 函数来提供一个变化的值

  • 使用远程BeeShell服务器更改Jmeter属性

请注意,在测试期间,不应该频繁地更改吞吐量值——新值生效需要一段时间。

常数吞吐量定时器作用:控制吞吐量(线上压测时候,避免一下就上百上千的吞吐量影响线上性能,加上这个之后较安全,可以一点一点往上加); 按指定的吞吐量执行,以每分钟为单位。计算吞吐量依据是最后一次线程的执行时延。

作用域:此定时器放在请求的下级,只对它的上级请求起作用

1、我们先来看看这个Constant Throughput Timer长得是啥样子,路径:线程组 > 添加 > 定时器 > 常数吞吐量定时器,如下图所示:

4.png

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):同上,但每个线程是根据线程的上次运行时间来延迟。相当于让所有线程组整体排队。(不常用)

5.实例

1、新建测试计划,线程组下添加1个取样器 访问首页(已禁用)、访问查询接口,如下图所示:

1.png

2、然后再添加常数吞吐量定时器,设置目标吞吐量为300,如下图所示:

2.png

3、配置好以后,点击“保存”,运行JMeter,查看jp@gc - Transactions per Second(常数吞吐量定时器设置300/分钟,也就是5/秒,故tps最大5,这里的tps大约都是5,说明已经超过5,可以往上增加了),如下图所示:

1.png

5. 定时器的作用域

定时器是在每个sampler(采样器)之前执行的,而不是之后(无论定时器位置在sampler之前还是下面);

当执行一个sampler之前时,所有当前作用域内的定时器都会被执行;

如果希望定时器仅应用于其中一个sampler,则把定时器作为子节点加入;

如果希望在sampler执行完之后再等待,则可以使用Test Action;

作者:胡生生

原文链接:https://blog.csdn.net/weixin_44909045/article/details/124341853

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   OpenAI可能正在追逐企业用户,但一些高管警告人们不要指望这项技术能迅速改变他们的业务。首席运营官布拉德-莱特凯普(Brad Lightcap)在接受CNBC采访时说,人工智能被过度夸大的一个部分是"它可以一举带来实质性的业务变革"。  Lightcap说,企业与OpenAI接触时,都期望生成式人工智能能解决许多问题,大幅削减成本,并在企业陷入困境时恢复增长。他说,虽然人工智能可以改善更多,但"人工智能永远没有一件事可以完全解决这个问题",而且这项技术仍处于起步阶段。他补充说,人工智能仍处于实验阶段,尚未成为关键工具和应用的一部分。  OpenAI...
            0 0 405
            分享
          •   提起外包公司,很多小伙伴都不是很看好,觉得外包公司没啥发展前途、受限很多、没有自主权......也因此认为在外包公司没办法让测试新手提高技能。  但这些担忧,真的都有道理吗?换句话说,这些担忧都是有根据的吗?今天,我们就来聊聊这个话题。  我的外包企业工作经历  在这个外包公司这个问题上,我认为主要还是取决于外包企业所服务的甲方公司究竟是谁。也就是说,外包和外包还是有区别的。根据这几年我在外包公司工作的经验来看,外包公司主要有这么两类:  人力外包企业  如果你所在的是人力外包公司,负责的是一家开放且重技术的甲方公司,就会让你觉得,你就是在甲方本公司工作。  不仅不会让你觉得没有前途、发展...
            0 0 1125
            分享
          • 1、软件接口是什么?答:程序不同模块之间传输数据并作处理的类或函数。2、HTTP 和 HTTPS 协议区别?答:https 协议需要到 CA(Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用; http 是超文本传输协议,信息是明文传输,Https 协议是由 SSL+Http 协议构建的可进行加 密传输、身份认证的网络协议,比 http 协议安全; http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80后者是 443。3、HTTPS 在哪一层?答:HTTPS 在应用层4、get 和 post 区别是什么?答:P...
            0 0 1051
            分享
          • 读者提问:偶现 BUG,怎么报?阿常回答:这个方面我从三方面回答:1、出现偶发 BUG,报不报;2、出现偶发 BUG,怎么报;3、偶发 BUG 如何跟踪闭环。一、出现偶发 BUG,报不报偶发 BUG 要报。偶发 BUG 即低概率 BUG,它也许只会出现一次,但我们要相信,即使是偶发 BUG 也有其必现的路径,只是我们暂时未找到复现的方法。二、出现偶发 BUG,怎么报增加一类偶现 BUG 类型。先分析 BUG 严重程度,如果是严重影响系统的 BUG,第一时间反馈给研发处理。记录 BUG 复现的测试场景、测试步骤,上传日志文件以及其他相关截图,提交 BUG 单。三、偶发 BUG 如何跟踪...
            0 0 1086
            分享
          •   前言  虽然笔者是一个测试老人了,但是基本上所有的测试经验都停留在手工测试方面,对于自动化测试方面的实战经验少之又少,可以说,从这个角度来说,就像生活在原始社会,一切靠双手解决问题。  其实,究其原因:一方面是,自动化方面不求上进,觉得会手工测试就可以了,自动化就能躲就躲吧;另一方面是,觉得自动化是个慢慢积累的过程,不是那么容易学会的,既然不是那么学会的,那是不是......就先不学了,然后,就一拖再拖,能拖就拖,殊不知,自动化已经逐步成为测试领域必备的生存技能了。  所以,为了顺应测试行业发展的潮流,我就开始了从测试“原始人”到测试“现代人”的转变。(顺便说一下,想快速成长,有两个方面的...
            12 13 1971
            分享
      • 51testing软件测试圈微信