1、定时器介绍

默认情况下,JMeter线程发送请求之间是没有间歇的。建议为线程组添加某种定时器,以便设定请求之间的间隔是多长时间。如果测试人员不设定这种延迟,JMeter可能会在短时间内产生大量的并发访问请求,导致服务器宕机。

定时器会让作用域内的每一个取样器,都在执行前等待一个固定时长。定时器可以作为取样器或者逻辑控制器的子项,目的是只影响作用域内的取样器。

如果测试人员为线程组添加了多个定时器,那么JMeter会将这些定时器的时长叠加起来,共同影响作用域范围内的取样器。

2、固定吞吐量定时器介绍

一般我们进行压力测试时,会通过测试获取QPS(TPS)值,来判断系统的性能。

但有时为了复现线上生产的问题,需要尽可能还原生产场景,这时就可以通过设置固定的QPS(TPS)值,复现和线上生产过程相同的压测。

那么如何实现此要求呢?

可通过固定吞吐量定时器Constant Throughput Timer)组件来实现。

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

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

通过以下多种方式都可以改变:

  • 使用计数器变量。
  • 使用一个 __jexl3或者__groovy函数,来提供一个变化的值。
  • 使用远程BeeShell脚本更改JMeter属性。

3、固定吞吐量定时器界面说明

添加固定吞吐量定时器组件操作:选中“取样器”右键 —> 添加 —> 定时器 —> 固定吞吐量定时器

界面如下图所示:

下面是固定吞吐量定时器组件的详细说明:

  • 名称固定吞吐量定时器组件的自定义名称,见名知意最好。
  • 注释:即添加一些备注信息,对该固定吞吐量定时器组件的简短说明,以便后期回顾时查看。

Delay before each affected sampler:设置每个受影响采样器的延迟。

  • Target throughput (in samples per minute):设置每分钟的目标吞吐量(以每分钟样本为单位)

    注意这里的时间是分钟,不是per second(秒),

    即:测试在20 QPS情况下的系统表现,那么这里我们应该填 20*60=1200。
  • Calculate Throughput based on:以下面哪个选项为基础,来计算吞吐量。
    • this thread only:控制每个线程的吞吐量。

      选择这种模式时,总的吞吐量=Target throughput * 该线程的数量
    • all active threads:设置的Target throughput将分配到所有线程组的所有活动线程上,每个活跃线程在上一次运行结束后,等待合理的时间后再次运行。(活跃线程指同一时刻同时运行的线程)

      在这种情况下,每个线程组需要一个具有相同设置的固定吞吐量定时器。
    • all active threads in current thread group:设置的Target throughput将分配在当前线程组的每一个活跃线程上,每个线程将根据上次运行时间延迟。当测试计划中只有一个线程组时,该选项和all active threads选项的效果完全相同。
    • all active threads (shared):与all active threads的选项基本相同。唯一区别是,每个活跃线程都会在所有活跃线程上一次运行结束后,等待合理的时间后再次运行(延迟)。相当于让所有线程组整体排队。
    • all active threads in current thread group (shared):与all active threads in current thread group基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程的上一次运行结束后,等待合理的时间后再次运行(延迟)。 相当于线程组组内排队。

4、固定吞吐量定时器的使用

需求说明:模拟一个用户组以20QPS的频率来访问服务器,持续10秒钟,查看服务器平均响应时间。

(1)测试计划内包含的元件

添加元件操作步骤

  1. 创建测试计划。
  2. 创建线程组:选中“测试计划”右键 —> 添加 —> 线程(用户) —> 线程组
  3. 在线程组下,添加取样器“HTTP请求”组件:选中“线程组”右键 —> 添加 —> 取样器 —> HTTP请求
  4. 在取样器下,添加定时器“固定吞吐量定时器”组件:选中“取样器”右键 —> 添加 —> 定时器 —> 固定吞吐量定时器
  5. 在线程组下,添加监听器“聚合报告”组件:选中“线程组”右键 —> 添加 —> 监听器 —> 聚合报告

最终测试计划中的元件如下:

点击运行按钮,会提示你先保存该脚本,脚本保存完成后会直接自动运行该脚本。

(2)登陆请求内容

标准的POST请求,添加请求的基本要素,和所需要的数据即可。

如下图所示:

(3)固定吞吐量定时器内容

固定吞吐量定时器配置内容:

  1. 设置每分钟的目标吞吐量:因为我们是模拟20QPS情况下的系统表现,那么这里我们应该填 20*60=1200。

    提示:60表示一分钟有60秒。
  2. 选择哪些线程组,来计算吞吐量:就选择this thread only就可以。

编辑完成的内容如下:

(4)线程组元件内容

前面只是配置了单位时间的目标吞吐量,下面我们要接着配置JMeter持续发送请求的时间。

在线程组元件中的配置如下:

  1. 在线程属性的循环次数,勾选上“永远”,(此时旁边的editText就无法输入了)。
  2. 勾选“调度器”,在持续时间中配置10秒,或在启动时间、结束时间处配置一个时间间隔为10秒的时间区间。

如下图所示:

提示:

当然我们也可以进行估算,来设置循环次数。

设置循环次数= 访问频率(QPS) * 持续时间,即:20 * 10 = 200。

(5)查看聚合报告的结果

运行脚本,结果如下:

我们可以从上图中看到,Throughput的值为20QPS,证明测试复现了线上的压力环境,然后去查看其他的监听数据是否有异常。(每次Throughput的值会有稍微的浮动)

聚合报告参数介绍:

  1. Label:请求的名称,就是脚本中Sampler的名称。
  2. # Samples(样本):总共发给服务器的请求数量,如果模拟10个用户,每个用户迭代10次,那么总的请求数为:10*10 =100次。
  3. Average(平均值):默认情况下是单个Request的平均响应时间,当使用了Transaction Controller(事务控制器) 时,也可以用Transaction的时间,来显示平均响应时间 ,单位是毫秒。
  4. Median(中位数):50%用户的响应时间小于该值。
  5. 90% Line(90% 百分位):90%用户的响应时间小于该值。
  6. 95% Line(95% 百分位):95%用户的响应时间小于该值。
  7. 99% Line(99% 百分位):99%用户的响应时间小于该值。
  8. Min(最小值):最小的响应时间。
  9. Maximum(最大值):最大的响应时间。
  10. Error%(异常%):错误率=错误请求的数量/请求的总数。
  11. Throughput(吞吐量):默认情况下表示每秒完成的请求数(Request per Second)。
  12. Received KB/sec (接收数据):每秒从服务器端接收到的数据量。
  13. Sent KB/sec(发送):每秒发送到服务器端的数据量。

参考:

『动善时』JMeter基础 — 60、固定吞吐量测试的更多相关文章

  1. 『动善时』JMeter基础 — 41、使用JMeter连接数据库(MySQL)

    目录 1.为什么要使用JMeter连接数据库 2.JMeter连接数据库的前提 3.JDBC连接配置组件界面介绍 4.JMeter连接数据库演示 (1)测试计划内包含的元件 (2)测试计划中添加链接数 ...

  2. 『动善时』JMeter基础 — 12、JMeter取样器详解:sampler

    目录 1.取样器介绍 2.JMeter自带的取样器 3."HTTP请求"为例介绍一下取样器 (1)HTTP Request: (2)Web服务器: (3)HTTP请求: (4)同请 ...

  3. 『动善时』JMeter基础 — 27、通过JMeter函数助手实现参数化

    目录 1.测试计划中的元件 2.数据文件内容 3.函数助手配置 (1)函数助手的打开方式 (2)函数助手界面介绍 (3)编辑后的函数助手界面 4.HTTP请求组件内容 5.线程组元件内容 6.脚本运行 ...

  4. 『动善时』JMeter基础 — 32、JMeter察看结果树组件详解

    目录 1.察看结果树介绍 2.察看结果树界面详解 3.察看结果树的其他功能 (1)将数据写入文件中 (2)Search功能 (3)Scroll automatically选项 4.总结 1.察看结果树 ...

  5. 『动善时』JMeter基础 — 48、使用JMeter自身代理录制测试脚本

    目录 1.测试计划内包含的元件 2.HTTP代理服务器的设置内容 3.设置浏览器的代理服务器 4.录制脚本 5.查看录制的脚本 6.HTTP代理服务器的排除模式 7.保存脚本 录制脚本只不过是我们日常 ...

  6. 『动善时』JMeter基础 — 49、使用JMeter自身代理录制APP测试脚本

    目录 1.测试计划内包含的元件 2.HTTP代理服务器的设置内容 3.设置手机的代理服务器 4.录制脚本 5.查看录制的脚本 6.HTTP代理服务器的排除模式 7.保存脚本 8.注意坑点 录制脚本只不 ...

  7. 『动善时』JMeter基础 — 55、JMeter非GUI模式运行

    目录 1.JMeter的非GUI模式说明 2.为什么使用非GUI模式运行JMeter 3.怎样使用非GUI模式运行JMeter (1)非GUI模式运行JMeter步骤 (2)其它参数说明 4.CLI模 ...

  8. 『动善时』JMeter基础 — 55、使用非GUI模式运行JMeter(命令行模式)

    目录 1.JMeter的非GUI模式说明 2.为什么使用非GUI模式运行JMeter 3.使用非GUI模式运行JMeter (1)非GUI模式运行JMeter步骤 (2)其它参数说明 4.CLI模式运 ...

  9. 『动善时』JMeter基础 — 58、JMeter分布式测试

    目录 1.JMeter分布式测试概念 2.JMeter分布式测试前提条件 3.JMeter实现分布式测试 (1)在执行机中的配置 (2)在控制机中的配置 (3)启动执行机中的JMeter服务 (4)在 ...

随机推荐

  1. Go知识盲区--闭包

    1. 引言 关于闭包的说明,曾在很多篇幅中都有过一些说明,包括Go基础--函数2, go 函数进阶,异常与错误 都有所提到, 但是会发现,好像原理(理论)都懂,但是就是不知道如何使用,或者在看到一些源 ...

  2. JavaScript中var与let的异同点

    var是JavaScript刚出现时就存在的变量声明关键字,而let作为ES6才出现的变量声明关键字,无疑两者之间存在着很大的区别.那么具体有哪些区别呢? 1.作用域表现形式不同,var是函数作用域, ...

  3. Spark(二十)【SparkSQL将CSV导入Kudu】

    目录 SparkSql 将CSV导入kudu pom 依赖 scala 代码 启动脚本 SparkSql 将CSV导入kudu pom 依赖 <properties> <spark. ...

  4. go 代理

    环境变量中设置 #GO111MODULE=auto GOPROXY=https://goproxy.io 如果不第一次,则在命令行设置 go env -w GO111MODULE=on go env ...

  5. oracle 外部表查alter日志

    --创建文件夹,路径是alter日志的路径 create or replace directory data_dir as '/u01/app/oracle/diag/rdbms/orcl/orcl/ ...

  6. 【编程思想】【设计模式】【其他模式】blackboard

    Python版 https://github.com/faif/python-patterns/blob/master/other/blackboard.py #!/usr/bin/env pytho ...

  7. 论文翻译:2021_A Perceptually Motivated Approach for Low-complexity, Real-time Enhancement of Fullband Speech

    论文地址:一种低复杂度实时增强全频带语音的感知激励方法 论文代码 引用格式:A Perceptually Motivated Approach for Low-complexity, Real-tim ...

  8. Sentinel之流控规则

    在上文Sentinel流量防卫兵中讲到了Sentinel入门以及流控规则一小部分,而Sentinel还有以下规则: 熔断降级规则 热点参数规则 系统规则 黑白名单规则 本文要讲的是流控规则 流量控制规 ...

  9. Moment.js使用笔记

    零.前情提要 上个月开发了数据平台,用的框架是vue + Ant Design of Vue,其中用了组件[range-picker]日期选择框,涉及到时间方法就去看了momentJS,以此记录~ 如 ...

  10. gogs报错解决合集

    目录 一.在组织中添加成员,一直显示普通用户 一.在组织中添加成员,一直显示普通用户 组织是公司,团队是公司中的不同队伍.例如A团队设置为加入就有管理员权限,那加入就有管理员. 但在组织成员那一栏中加 ...