如何使用Jmeter进行压力测试?这篇入门讲解请拿走!
Jmeter作为一款开源的轻量级应用,可以快速完成接口和性能测试任务,方便、快捷又灵活,是值得一用的首选开源工具。
在上一期文章“一文带你熟悉Jmeter原理和结构体系”中,小编为大家介绍了Jmeter的原理、结构体系、八大元件及其用法。有了这层基础,本期小编教大家如何使用Jmeter进行压力测试,主要包括以下三个要点:
如何使用Jmeter,并结合Fiddler测试系统;
如何提取动态值;
响应断言等常用配置和操作。
1 压测脚本的编写方法
首先,小编为大家讲解压测脚本的编写方法,主要包括八个步骤。各步骤的具体内容依次如下:
Step1 配置Jmeter基础组件
打开Jmeter,添加“-线程组”,并右键线程组,添加“-配置元件”,包括:Cookie管理器、用户自定义变量、调试取样器、观察结果树、聚合报告等。
注:在配置Jmeter基础组件时,要养成随时添加上述配置元件的好习惯。
Jmeter基础组件配置示例
小知识:
此处使用的线程组为并发线程组(Concurrency Thread Group),插件下载地址如下:
https://jmeter-plugins.org/wiki/PluginsManager/
下载后直接将“jmeter-plugins-manager.jar”包放在Jmeter安装目录“apache-jmeter-4.0\lib\ext”下,重新启动Jmeter即可使用。
Step2 录制Fiddler脚本
完成Jmeter基础组件的配置后,录制Fiddler脚本,业务操作路径为:登录苍穹→首页展示→【应用列表】→一级菜单【应用】→二级菜单【系统服务云】→三级菜单【主数据】→四级菜单【物料】。
下图为Fiddler抓包会话请求列表,右键请求列表可添加注释及颜色标记,方便快速定位每个业务操作所对应的HTTP请求。
Fiddler抓包会话请求列表
Step3 导入Fiddler脚本到Jmeter
接着,导入录制好的Fiddler脚本到Jmeter中,操作路径为:打开Fiddler→点击“检查”→点击“表单”→选中【参数】列表中的请求体→右键复制→打开Jmeter→HTTP请求→点击“从剪切板粘贴”。
“复制请求体”操作示例
“粘贴请求体”操作示例
重复上述步骤,将Fiddler中的请求逐一复制到Jmeter中,通过配置用户自定义变量设置HTTP请求中协议、服务器名称、端口号、方法和路径。
注:1)用户自定义变量有三个要求:有共性、替换方便和改动少;
2)Fiddler已有对应的扩展插件支持Jmeter-JMX文件格式导出,此处不做复述。
Step4 参数化(后置处理器-正则提取器)
根据Fiddler找到的关联关系,在对应的请求中添加后置处理器,选择正则表达式提取器。如下图所示:
正则表达式提取器配置示例
关于上图中各字段的说明如下:
1)引用名称:下一个请求要引用的参数名称,如填写“title”,则可⽤“${title}”引用它;
2)正则表达式,部分字符说明如下:
():括号内的内容即为所需提取的内容;
. :匹配任何字符串;
+ :一次或多次;
? :在找到第⼀个匹配项后停止匹配。
更多特别字符说明,请见下图:
正则表达式特别字符说明
注:针对响应结果为JSON格式的,表达式采用“左边界([^",]+?)右边界”,能够满足我们80%的使用场景。
3)模板:用“$$”引⽤模板,如果在正则表达式中有多个模板,则可以是“$2$$3$”,表示解析到的第几个值给“title”,如:“$1$”表示解析到的第1个值。
4)匹配数字:0代表随机取值,1代表全部取值,通常情况下填0。
5)缺省值:如果参数没有取到值,则设置一个缺省值作为默认值。
Step5 参数化(CSV数据驱动)
为贴近用户真实使用场景,对登录用户做参数化,Jmeter将读取CSV文件里面的参数进行压测。具体方法请参考下图:
CSV数据文件设置示例
Step6 设置断言
接着,设置断言,具体方法请参考下图:
设置断言示例
关于响应断言作用域的说明如下:
1) 可以断言服务器的响应内容;
2) 在性能测试脚本中使用断言,一般是为了校验接口响应内容是否符合预期;
3) 断言成功与否,可通过【监听器】→【断言结果】查看;
4) 如果断言失败,则将此请求标记为“失败”,并显示在【察看结果树】中,错误率则会显示在【聚合报告】中;
5) 可以将断言添加到任何取样器,但只作用于当前取样器;
6) 如果断言是在线程组下,则会作用于线程组下的所有取样器。
然后,响应断言,运行回放验证,更新断言期望值展示出错信息。
注:压测过程中,一个好的断言能保证测试结果的准确性。
Step7 设置思考时间(定时器-高斯随机定时器)
“断言”设置完成后,需设置思考时间,即实际操作中,模拟真实⽤户在操作过程中的等待时间。设置路径为:【定时器】→【高斯随机定时器】,如下图所示:
设置思考时间示例
Step8 添加事务(逻辑控制器-事务控制器)
最后,添加事务,路径为:【逻辑控制器】→【事务控制器】。
添加事务示例
事务控制器会生产一个额外的采样器,用来统计该控制器子结点的所有时间。关于上图中的两个勾选项,说明如下:
Generate Parent Sample:如果选中,事务控制器将作为其他取样器的父级样本,否则事务控制器仅作为独立的样本。
如果选中这个参数,结果显示为下图红框,否则显示为下图蓝框。
Include duration of timer and pre-post processors in generated sample:该选项用于控制是否在生成的样本中包括计时器、预处理和后处理的延迟时间。选中该项则会统计定时器(timer)的时间,否则只统计采样器(sample)的时间。
小知识:
1)QPS:每秒钟处理完的请求次数。
注:“处理完”是指发出请求到服务器处理完成功返回结果。可以理解为:有个counter,每处理一个请求加 1,1 秒后counter = QPS。
2)TPS:每秒钟处理完的事务次数。
一般TPS是对整个系统而言的,表示一个应用系统1s能完成多少事务处理。一个事务在分布式处理中,可能会对应多个请求,用于衡量单个接口服务的处理能力。
通过上述八个步骤,脚本的编写就完成啦,如下图所示:
压测脚本概览
小知识:
脚本编写完成之后,一定要禁用Debug Sample(调试取样器)及勾选观察结果树中的仅错误日志,不然压力机会撑不住的噢!
2 Jmeter压测实战之CSV可变参数压测
接下来,请随小编开启Jmeter压测实战之旅。
2.1 并发测试之并发线程组
脚本编写完毕后,需设置并发数、加压时间、并发运行时间。
并发线程组设置示例
Concurrency Thread Group能够更好地模拟用户行为,更轻松地控制测试的时间,并创建替换线程,防止线程尚未完成就结束创建。
注:该线程组需要单独下载插件安装。
关于上图中的设置项,说明如下:
Target Concurrency:目标并发(线程数);
Ramp Up Time:启动时间,若设置 1 min,则目标线程在1 min内全部启动;
Ramp-Up Steps Count:阶梯次数,若设置 6 ,则目标线程在 1min 内分六次阶梯加压(启动线程);每次启动的线程数 = 目标线程数 / 阶梯次数 = 60 / 6 = 10;
Hold Target Rate Time:持续负载运行时间,若设置 2 ,则启动完所有线程后,持续负载运行 2 min,然后再结束;
Time Unit:时间单位(分钟或者秒);
Thread Iterations Limit:线程迭代次数限制(循环次数);默认为空,理解成永远,如果运行时间到达Ramp Up Time + Hold Target Rate Time,则停止运行线程(不建议设置该值);
Log Threads Status into File:将线程状态记录到文件中(将线程启动和线程停止事件保存为日志文件)。
2.2 并发数报告分析之聚合报告
运行测试并通过监听器(聚合报告)查看每一个测试结果。
聚合报告示例
关于上图报告中的指标,说明如下:
1)响应时间:聚合报告中包含Average、Median、90%Line、95%Line、99%Line、Min、Max四个时间指标,它们的值越小效果越好,表示接口响应越快。
但是在实际工作中,我们一般会关注90%Line值,表示90%的响应时间是小于43ms。Average对应的平均响应时间参考意义不大,一般我们不参考该值。
2)吞吐量:在聚合报告中是指Throughput这项(即TPS),表示服务器分秒处理请求数或任务数。该值越大越好,表示服务器处理能力越强。
3)错误率:聚合报告中是指Error%(错误率=错误的请求的数量/请求的总数),错误率越低越好,为0表示没有异常请求。对于一般业务来说,错误率要在万分之一以下。
4)带宽:在聚合报告中指Recived(KB/s),表示从服务器端接受返回数据所占网络带宽。该值一般越小越好,因为越小代表占用带宽越小,间接地表示服务器端返回数据较小。一般内网环境也就是千兆带宽,如果带宽过大时,需要考虑优化。
以上就是Fiddler配合Jmeter录制脚本的全过程。文章有点长,没消化?别急,小编这就带你回顾整个过程的重点:
3 划重点
首先,通过Fiddler录制所需测试业务的HTTP请求;
接着,对HTTP请求做参数化,打通各个请求之间的数据关联;
然后,设置断言保证测试结果准确;
最后,设置思考时间及增加事务控制器模拟用户真实操作场景。
Jmeter有很多组件,合理利用组件之间的搭配,可以满足复杂测试场景的测试需求噢~
#往期推荐#
更多精彩内容,“码”上了解!↓
如何使用Jmeter进行压力测试?这篇入门讲解请拿走!
本文2024-09-23 01:12:12发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-144430.html