如何使用Jmeter进行压力测试?这篇入门讲解请拿走!

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:2

如何使用Jmeter进行压力测试?这篇入门讲解请拿走!


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


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


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

  2. 如何提取动态值

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




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原理和结构体系

Jmeter的高阶系列——Beanshell脚本


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

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


更多精彩内容,“码”上了解!↓



如何使用Jmeter进行压力测试?这篇入门讲解请拿走!

Jmeter作为一款开源的轻量级应用,可以快速完成接口和性能测试任务,方便、快捷又灵活,是值得一用的首选开源工具。在上一期文章“一文带你...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息