『动善时』JMeter基础 — 60、固定吞吐量测试
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)测试计划内包含的元件
添加元件操作步骤:
- 创建测试计划。
- 创建线程组:
选中“测试计划”右键 —> 添加 —> 线程(用户) —> 线程组
。 - 在线程组下,添加取样器“HTTP请求”组件:
选中“线程组”右键 —> 添加 —> 取样器 —> HTTP请求
。 - 在取样器下,添加定时器“固定吞吐量定时器”组件:
选中“取样器”右键 —> 添加 —> 定时器 —> 固定吞吐量定时器
。 - 在线程组下,添加监听器“聚合报告”组件:
选中“线程组”右键 —> 添加 —> 监听器 —> 聚合报告
。
最终测试计划中的元件如下:
点击运行按钮,会提示你先保存该脚本,脚本保存完成后会直接自动运行该脚本。
(2)登陆请求内容
标准的POST请求,添加请求的基本要素,和所需要的数据即可。
如下图所示:
(3)固定吞吐量定时器内容
固定吞吐量定时器配置内容:
- 设置每分钟的目标吞吐量:因为我们是模拟20QPS情况下的系统表现,那么这里我们应该填 20*60=1200。
提示:60表示一分钟有60秒。 - 选择哪些线程组,来计算吞吐量:就选择
this thread only
就可以。
编辑完成的内容如下:
(4)线程组元件内容
前面只是配置了单位时间的目标吞吐量,下面我们要接着配置JMeter持续发送请求的时间。
在线程组元件中的配置如下:
- 在线程属性的循环次数,勾选上“永远”,(此时旁边的
editText
就无法输入了)。 - 勾选“调度器”,在持续时间中配置10秒,或在启动时间、结束时间处配置一个时间间隔为10秒的时间区间。
如下图所示:
提示:
当然我们也可以进行估算,来设置循环次数。
设置循环次数= 访问频率(QPS) * 持续时间,即:20 * 10 = 200。
(5)查看聚合报告的结果
运行脚本,结果如下:
我们可以从上图中看到,Throughput
的值为20QPS,证明测试复现了线上的压力环境,然后去查看其他的监听数据是否有异常。(每次Throughput
的值会有稍微的浮动)
聚合报告参数介绍:
Label
:请求的名称,就是脚本中Sampler
的名称。# Samples
(样本):总共发给服务器的请求数量,如果模拟10个用户,每个用户迭代10次,那么总的请求数为:10*10 =100次。Average
(平均值):默认情况下是单个Request
的平均响应时间,当使用了Transaction Controller
(事务控制器) 时,也可以用Transaction
的时间,来显示平均响应时间 ,单位是毫秒。Median
(中位数):50%用户的响应时间小于该值。90% Line
(90% 百分位):90%用户的响应时间小于该值。95% Line
(95% 百分位):95%用户的响应时间小于该值。99% Line
(99% 百分位):99%用户的响应时间小于该值。Min
(最小值):最小的响应时间。Maximum
(最大值):最大的响应时间。Error%
(异常%):错误率=错误请求的数量/请求的总数。Throughput
(吞吐量):默认情况下表示每秒完成的请求数(Request per Second
)。Received KB/sec
(接收数据):每秒从服务器端接收到的数据量。Sent KB/sec
(发送):每秒发送到服务器端的数据量。
参考:
『动善时』JMeter基础 — 60、固定吞吐量测试的更多相关文章
- 『动善时』JMeter基础 — 41、使用JMeter连接数据库(MySQL)
目录 1.为什么要使用JMeter连接数据库 2.JMeter连接数据库的前提 3.JDBC连接配置组件界面介绍 4.JMeter连接数据库演示 (1)测试计划内包含的元件 (2)测试计划中添加链接数 ...
- 『动善时』JMeter基础 — 12、JMeter取样器详解:sampler
目录 1.取样器介绍 2.JMeter自带的取样器 3."HTTP请求"为例介绍一下取样器 (1)HTTP Request: (2)Web服务器: (3)HTTP请求: (4)同请 ...
- 『动善时』JMeter基础 — 27、通过JMeter函数助手实现参数化
目录 1.测试计划中的元件 2.数据文件内容 3.函数助手配置 (1)函数助手的打开方式 (2)函数助手界面介绍 (3)编辑后的函数助手界面 4.HTTP请求组件内容 5.线程组元件内容 6.脚本运行 ...
- 『动善时』JMeter基础 — 32、JMeter察看结果树组件详解
目录 1.察看结果树介绍 2.察看结果树界面详解 3.察看结果树的其他功能 (1)将数据写入文件中 (2)Search功能 (3)Scroll automatically选项 4.总结 1.察看结果树 ...
- 『动善时』JMeter基础 — 48、使用JMeter自身代理录制测试脚本
目录 1.测试计划内包含的元件 2.HTTP代理服务器的设置内容 3.设置浏览器的代理服务器 4.录制脚本 5.查看录制的脚本 6.HTTP代理服务器的排除模式 7.保存脚本 录制脚本只不过是我们日常 ...
- 『动善时』JMeter基础 — 49、使用JMeter自身代理录制APP测试脚本
目录 1.测试计划内包含的元件 2.HTTP代理服务器的设置内容 3.设置手机的代理服务器 4.录制脚本 5.查看录制的脚本 6.HTTP代理服务器的排除模式 7.保存脚本 8.注意坑点 录制脚本只不 ...
- 『动善时』JMeter基础 — 55、JMeter非GUI模式运行
目录 1.JMeter的非GUI模式说明 2.为什么使用非GUI模式运行JMeter 3.怎样使用非GUI模式运行JMeter (1)非GUI模式运行JMeter步骤 (2)其它参数说明 4.CLI模 ...
- 『动善时』JMeter基础 — 55、使用非GUI模式运行JMeter(命令行模式)
目录 1.JMeter的非GUI模式说明 2.为什么使用非GUI模式运行JMeter 3.使用非GUI模式运行JMeter (1)非GUI模式运行JMeter步骤 (2)其它参数说明 4.CLI模式运 ...
- 『动善时』JMeter基础 — 58、JMeter分布式测试
目录 1.JMeter分布式测试概念 2.JMeter分布式测试前提条件 3.JMeter实现分布式测试 (1)在执行机中的配置 (2)在控制机中的配置 (3)启动执行机中的JMeter服务 (4)在 ...
随机推荐
- accommodate, accompany
accommodate 词源: to make fit, suitable; 近/反义词: adapt, adjust, lodge; disoblige, incommode, misfit Lod ...
- Vue API 3 (模板语法 ,指令)
条件 v-if v-if 指令用于条件性地渲染一块内容.这块内容只会在指令的表达式返回 truthy 值的时候被渲染. v-show v-show 指令也是用于根据条件展示一块内容.v-show 只是 ...
- Linux基础命令---slabtop
slabtop slabtop实时显示详细的内核板条缓存信息.它显示按所列排序条件之一排序的顶级缓存的列表.它还会显示一个统计信息头,其中填充了板坯层信息. 此命令的适用范围:RedHat.RHEL. ...
- virtualbox Linux安装增强功能
1.点击<设备>--><安装增强功能> 2.创建安装包挂载目录,并挂载 #创建挂载目录 mkdir /mnt/cdrom #挂载光盘内容 mount -t auto -r ...
- shell脚本计算Linux网卡流量
本文介绍了计算linux网卡流量的一个shell脚本,一个通过固定间隔时间获取ifconfig eth0 的字节值而计算出网卡流量的方法,有需要的朋友参考下. 使用shell脚本计算Linux网卡流量 ...
- Mysql脚本 优化检测
下载地址: wget https://launchpad.net/mysql-tuning-primer/trunk/1.6-r1/+download/tuning-primer.sh 安装依赖: y ...
- 学习笔记--html篇(2)
html学习--2 canvas . svg 区别 canvas: 依赖分辨率 不支持文本渲染能力 文本渲染能力弱 支持保存图像为png.jpg等格式 适合图像密集开发(游戏) SVG 不依赖分辨率 ...
- [BUUCTF]PWN1——test_your_nc
[BUUCTF]PWN1-test_your_nc 题目网址:https://buuoj.cn/challenges#test_your_nc 步骤: 根据题目提示,nc一下靶场 2.nc连接上后ls ...
- libevent实现多线程
libevent并不是线程安全的,但这不代表libevent不支持多线程模式.前几天在微博上看到ruanyf发了条微博说到apache和nginx的并发模型,看到评论很多人都说不对于是自己又查了下,总 ...
- IDEA控制台中文显示乱码处理
加入 -Dfile.encoding=UTF-8 以及