jmeter压力测试步骤(jmeter压力测试结果分析)

周六早上10:00准时推送周刊

Jmeter作为一款开源的轻量级应用,可以快速完成接口和性能测试任务,方便、快捷又灵活,是值得一用的首选开源工具。

在上一期文章“一文带你熟悉Jmeter原理和结构体系”中,小编为大家介绍了Jmeter的原理、结构体系、八大元件及其用法。有了这层基础,本期小编教大家如何使用Jmeter进行压力测试,主要包括以下三个要点:

如何使用Jmeter,并结合Fiddler测试系统;

如何提取动态值;

响应断言等常用配置和操作。

压测脚本的编写方法

首先,小编为大家讲解压测脚本的编写方法,主要包括八个步骤。各步骤的具体内容依次如下:

Step1配置Jmeter基础组件

打开Jmeter,添加“-线程组”,并右键线程组,添加“-配置元件”,包括:Cookie管理器、用户自定义变量、调试取样器、观察结果树、聚合报告等。

注:在配置Jmeter基础组件时,要养成随时添加上述配置元件的好习惯。

jmeter压力测试步骤(jmeter压力测试结果分析)

Jmeter基础组件配置示例

小知识:

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中,通过配置用户自定义变量设置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(调试取样器)及勾选观察结果树中的仅错误日志,不然压力机会撑不住的噢!

Jmeter压测实战之CSV可变参数压测

接下来,请随小编开启Jmeter压测实战之旅。

并发测试之并发线程组

脚本编写完毕后,需设置并发数、加压时间、并发运行时间。

并发线程组设置示例

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:将线程状态记录到文件中(将线程启动和线程停止事件保存为日志文件)。

并发数报告分析之聚合报告

运行测试并通过监听器(聚合报告)查看每一个测试结果。

聚合报告示例

关于上图报告中的指标,说明如下:

1)响应时间:聚合报告中包含Average、Median、90%Line、95%Line、99%Line、Min、Max四个时间指标,它们的值越小效果越好,表示接口响应越快。

2)吞吐量:在聚合报告中是指Throughput这项(即TPS),表示服务器分秒处理请求数或任务数。该值越大越好,表示服务器处理能力越强。

3)错误率:聚合报告中是指Error%(错误率=错误的请求的数量/请求的总数),错误率越低越好,为0表示没有异常请求。对于一般业务来说,错误率要在万分之一以下。

4)带宽:在聚合报告中指Recived(KB/s),表示从服务器端接受返回数据所占网络带宽。该值一般越小越好,因为越小代表占用带宽越小,间接地表示服务器端返回数据较小。一般内网环境也就是千兆带宽,如果带宽过大时,需要考虑优化。

以上就是Fiddler配合Jmeter录制脚本的全过程。文章有点长,没消化?别急,小编这就带你回顾整个过程的重点:

首先,通过Fiddler录制所需测试业务的HTTP请求;

接着,对HTTP请求做参数化,打通各个请求之间的数据关联;

然后,设置断言保证测试结果准确;

最后,设置思考时间及增加事务控制器模拟用户真实操作场景。

Jmeter有很多组件,合理利用组件之间的搭配,可以满足复杂测试场景的测试需求噢~

#往期推荐#

#一文带你熟悉Jmeter原理和结构体系

#Jmeter高阶系列——使用JDBC协议获取数据

#Jmeter高阶系列—数据参数化及使用场景

#Jmeter的高阶系列——Beanshell脚本

发表评论

登录后才能评论