暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

原创 風立ちぬ〆🧸ིྀ 2023-11-01
246

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

Jmeter可以快速完成接口和性能测试任务,方便、快捷又灵活,是值得一用的首选开源工具。本文内容主要介绍了Jmeter配合Fiddler如何测试系统,如何提取动态值,以及响应断言等常用配置和操作。

1.  压测脚本编写

1.1 Jmeter基础组件配置

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

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

_⊙小知识:

这里使用的线程组为并发线程组(Concurrency Thread Group)

插件下载地址:https://jmeter-plugins.org/wiki/PluginsManager/

下载后直接将jmeter-plugins-manager.jar 包放在jmeter安装目录apache-jmeter-4.0\lib\ext 下,重新启动jmeter即可使用。

1.2 录制Fiddler脚本

业务操作路径:

登录→首页展示→【应用列表】→一级菜单【应用】→二级菜单【系统服务云】→三级菜单【主数据】→四级菜单【物料】。

上图为Fiddler抓包会话请求列表,右键点击请求列表可添加注释及颜色标记,方便快速定位每个业务操作所对应的HTTP请求。

1.3 导入Fiddler脚本到Jmeter

操作路径为:打开Fiddler→点击“检查”→点击“表单”→选中【参数】列表中的请求体→右键复制→打开Jmeter→HTTP请求→点击“从剪切板粘贴”。

重复上述步骤,将fiddler中的请求逐一复制到Jmeter中,通过配置用户自定义变量(有共性、替换方便、改动少[shawyen2] )设置HTTP请求中协议、服务器名称、端口号、方法、路径

_⊙小知识:

Fiddler已有对应的扩展插件支持Jmeter-JMX文件格式导出,这边就不做复述。

1.4 参数化(后置处理器-正则提取器)

根据Fiddler找到的关联关系,在对应的请求中添加后置处理器à正则表达式提取器

关于上图中各字段的说明如下:

1)引用名称:下一个请求要引用的参数名称,如填写title,则可⽤${title}引用它

2)正则表达式,各符号说明如下:

a)   ():括号内的内容即为所需提取的内容。

b)   .:匹配任何字符串。

c)   +:一次或多次。

d)   ?:在找到第⼀个匹配项后停止匹配。

更多特别字符说明,请见下图:

注:针对响应结果为JSON格式的,表达式左边界([^",]+?)右边界,能够满足我们 80%的使用场景。

3)模板:用“$$”引⽤起来,如果在正则表达式中有多个正则表达式,则可以是“$2$$3$”等等,表示解析到的第几个值给title。如: $1$表示解析到的第1个值

4)匹配数字: 0代表随机取值, 1代表全部取值,通常情况下填0

5)缺省值:如果参数没有取到值,则设置一个缺省值作为默认值

 

 

1.5 参数化(CSV数据驱动)

 

为贴近用户真实使用场景,对登录用户做参数化,Jmeter读取CSV文件里面的参数进行压测。具体方法请参考下图:

 

1.6 设置断言(断言)

 

响应断言作用域:

a)   可以断言服务器的响应内容

b)   在性能测试脚本中使用断言,一般是为了校验接口响应内容是否符合预期

c)   断言成功与否,可以通过监听器-断言结果查看

d)   如果断言失败,则将此请求标记为失败,并显示在察看结果树中,错误率会显示在聚合报告中

e)   可以将断言添加到任何取样器,只作用于当前取样器

f)   如果断言是在线程组下,那么会作用于线程组下的所有取样器

响应断言,运行回放验证,更新断言期望值展示出错信息。

注:压测过程中,一个好的断言能保证测试结果的准确性。

1.7 设置思考时间(定时器-高斯随机定时器)

思考时间:实际操作中,模拟真实⽤户在操作过程中的等待时间。

1.8 添加事务(逻辑控制器-事务控制器)

事务控制器会生产一个额外的采样器,用来统计该控制器子结点的所有时间。如下[shawyen3] 

·      Generate Parent Sample如果选中,事务控制器将作为其他取样器的父级样本,否则事务控制器仅作为独立的样本。

选中这个参数结果展示如下图红框,否则显示为下图蓝框

  • Include duration of timer and pre-post processors in generated sample是否在生成的样本中包括计时器,预处理和后处理的延迟时间,选中这一项会统计定时器(timer)的时间,否则只统计采样器(sample)的时间。

_⊙小知识:

QPS: 每秒钟处理完的请求次数;

注意这里是处理完,具体是指发出请求到服务器处理完成功返回结果。可以理解有个counter ,每处理一个请求加 1 ,1 秒后 counter = QPS。

TPS:每秒钟处理完的事务次数,一般TPS是对整个系统而言的,表示一个应用系统1s能完成多少事务处理。一个事务在分布式处理中,可能会对应多个请求,用于衡量单个接口服务的处理能力。

1.9 厉害了,脚本就这么写完了

_⊙小知识:

脚本完成之后一定要禁用Debug Sample(调试取样器)及勾选观察结果树中的仅错误日志,不然压力机可是撑不住的。

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

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录制脚本的全过程,Jmeter有很多组件,合理利用组件之间的搭配,可以满足复杂测试场景的测试需求。后续[shawyen4]         

 

以上就是Fiddler配合Jmeter录制脚本的全过程,首先通过Fiddler录制要测试业务的HTTP请求,对HTTP请求做参数化打通各个请求之间的数据关联、设置断言保证测试结果准确,设置思考时间及增加事务控制器模拟用户真实操作场景。Jmeter有很多组件,合理利用组件之间的搭配,可以满足复杂测试场景的测试需求。

梳理[shawyen5] 

 

附录:Fiddler基础配置及使用[shawyen6] 

Fiddler是web调试工具之一,它能记录所有客户端和服务端的http和https请求,允许监视、设置断点、修改输入/输出数据,测试中常用的功能有对客户端发往服务端的请求及响应进行分析。

1  Fiddler如何捕捉HTTPS会话

默认情况下Fddler不会捕捉HTTPS会话,需要设置下HTTPS选项卡。

打开Fiddler软件,状态栏选择工具->Fiddler选项->HTTPS菜单栏,勾选HTTPS相关选项。

2  Fiddler过滤器使用

设置过滤域名,可过滤掉一些不需要的会话,使界面看起来更清晰

打开Fiddler tab,界面中使用筛选器勾选->HOST下拉选项中选择仅显示下列主机->在HOST文本区写入我们要显示的域名或IP,可用分号分割多个域名或IP。

过滤静态请求及图片正则:

REGEX:(?insx)/[^\?/]*\.(css|ico|jpg|png|gif|bmp|wav|js|jpeg)(\?.*)?$

3  Fiddler抓包配置

打开Fiddler会自动抓包,可以通过F12或者点击右下角 启动暂停抓包。

在苍穹登录页,输入用户名密码点击登录按钮,查看Fiddler界面。

图中1号标记位置为WEB请求会话列表:

*  请求结果-HTTP响应的状态码;

*  协议-本次会话使用的协议类型(HTTP/HTTPS);

*  主机名–发送本次请求的主机名;

*  网页地址–发送本次请求的路径和具体文件名;

*  内容大小–响应本次请求返回内容的大小;

*  缓存–是否使用了缓存;

*  响应的HTTP内容类型–响应的响应头的 content-Type值;

*  请求所运行的程序–数据流对应的本地Windows进程;

*  注释-通过脚本或者在会话列表中右键添加的注释。

图中2号标记位置为请求主体信息查看器:

*  检查器:

用于查看会话(请求)的内容,测试常用的有消息头、文本视图、表单、原始。

*  时间轴:

在左侧会话窗口点击一个或多个(同时按下 Ctrl 键),Timeline 便会显示指定内容从服务端传输到客户端的时间。

图中3号标记位置为请求返回信息查看器:

*  消息头:查看请求返回的head信息。

*  文本视图:查看response,配合下方的查找数据框,定位可以高亮显示查找的值。

*  JSON:对返回数据内容为json数据进行格式化。

4  Fiddler参数动态关联

苍穹脚本编写难点在于各请求之间错综复杂的关联关系,而关联的纽带主要源自于请求体中的Pageid。

在Fiddler会话表单中从下往上找关联,通过Fiddler查找功能,能快速找到各个请求之间的Pageid关联关系,限与篇幅Pageid关联逻辑后面会有单独的文章做讲解。

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    


 [shawyen1]这个符号是必须有的吗?To:是的。

 [shawyen2]这里是指自定义变量的要求吗?是的

 [shawyen3]下述的两个选项是什么呢?可以在这里概括下。

 [shawyen4]如果文章已完稿,可在此处预告下文章的标题哈,to:没有预告完结篇

 [shawyen5]鉴于文章篇幅较长,重点相对分散。请在此处补充对整篇文章重点的简要概括,帮助读者更好地提取文章的重点知识。

 [shawyen6]文章的整体篇幅较长,阅读跳出率可能会较高。附录部分是否有必要加入文章呢?或者附录部分有没有在社区发表为知识?如果有,可作为参考资料的形式插入链接。To:附录删除掉不需要。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论