每周读书与学习->初识JMeter 元件(五)

每周读书与学习是由清华大学出版社出版的《JMeter核心技术、性能测试与性能分析》一书的作者推出,分享作者多年的IT从业经历,希望对很多计算机科学技术IT类专业毕业生以及IT从业者有所帮助。

1、监听器

在Jmeter中监听器通常用于监听以及实时展示JMeter取样器的测试执行结果,监听器支持以树、表及图形等形式展示当前正在压测的测试结果,同时也支持以文件方式保存测试结果,Jmeter支持XML、CSV等格式的来保存测试结果到指定的文件中,监听器通常是用于对性能测试的结果做统计分析以快速的发现性能压测中可能存在的性能问题,如下图所示。

从图中可以看到,监听器通常主要包括:

  • 查看结果树:查看结果树通常用于性能测试脚本的调试,因为查看结果树会展示取样器每次发出请求的请求参数和响应结果以及取样器从发出请求到获取相应结果中的具体耗时,由于取样器每次执行请求时,都会在查看结果树中进行展示,所以在高并发的负载测试时,建议禁用查看结果树,不然会消耗大量的CPU、内存等硬件资源。由于取样器返回的结果数据可能会包含多种不同的格式,所以查看结果树支持以Text、CSS/JQuery Tester、Document、HTML、HTML Source formatted、JSON、JSON Path Tester、XML等不同的格式来展示取样器的响应结果数据,同时也支持将查看结果树中的数据写入到自定义的文件中来进行保存。
  • 后端监听器:是一个异步的侦听器,通常用于对接Graphite ,而Graphite是一个开源的实时图形化监控工具,后端监听器,可以异步的将监控数据发送到Graphite中,通过Graphite来展示出Jmeter的性能指标进行监控,在该监听器中可以配置Graphite的主机域名或者IP地址以及端口号来接收Jmeter异步传输过去的性能指标数据,关于Graphite的更多介绍,可以参考官网:https://graphiteapp.org/,关于后端监听器的更多介绍可以参考Jmeter官网链接:https://jmeter.apache.org/usermanual/component_reference.html#Backend_Listener
  • 断言结果:用于通过可视化的方式展示每个取样器请求的断言结果,和查看结果树一样,不建议在高并发的负载测试中使用断言结果,因为会消耗大量的CPU、内存等硬件资源,通常仅用于性能测试脚本的调试。
  • 汇总报告:汇总报告通常用于实时展示Jmeter性能压测中的各项性能指标,并且支持将汇总报告中的数据写入到自定义的文件中,如下图所示。

从图中可以看到,汇总报告包含的性能指标如下:

    • 样本:指取样器累计发出的请求总数量。
    • 平均值:指取样器请求过程中的平均耗时,单位为毫秒。
    • 最小值:指取样器请求过程中的最小耗时,单位为毫秒。
    • 最大值:指取样器请求过程中的最大耗时,单位为毫秒。
    • 标准偏差:指取样器请求时长的标准偏差。
    • 异常:指取样器请求的返回结果为异常的百分比。
    • 吞吐量:指单位时间内处理的请求数,通常可以等同于TPS。
    • 接收KB/SEC:每秒中接收到KB(千字节)数。
    • 发送KB/SEC:每秒中发送的KB(千字节)数。
    • 平均字节数:响应结果的平均字节数,单位为字节。
  • 聚合报告:聚合报告和汇总报告很类似,是通过聚合的形式来实时展示Jmeter性能压测中的各项性能指标,和汇总报告一样,聚合报告也支持将报告中的数据写入到自定义的文件中,如下图所示,聚合报告中对于取样器中的每一个请求,一旦测试完成吞吐量就是整个测试期间的实际吞吐量。

从图中可以看到,聚合报告包含的性能指标如下:

    • Samples:和 汇总报告一样,指取样器累计发出的请求总数量。
    • Average:指取样器请求过程中的平均耗时,单位为毫秒。
    • Median:指的是取样器请求过程中耗费的时长的中间值,也可以理解为约占50%的取样器请求的时长不会超过此时长,剩下的50%的请求的时长至少也耗费了同样多的时长。
    • 90% Line:指90%的取样器请求的耗费时长不会超过此时长,并且剩余的请求的时长不会低于该时长。
    • 95% Line:指95%的取样器请求的耗费时长不会超过此时长,并且剩余的请求的时长不会低于该时长。
    • 99% Line:指99%的取样器请求的耗费时长不会超过此时长,并且剩余的请求的时长不会低于该时长。
    • Min:指的是取样器请求的最小耗费时长。
    • Maximum:指的是取样器请求的最大耗费时长。
    • Error:指取样器请求的返回结果为错误异常的百分比。
    • Throughput::和 汇总报告一样,指单位时间内处理的请求数,通常可以等同于TPS。
    • Received KB/sec:和 汇总报告一样,每秒中接收到KB(千字节)数。
    • Sent KB/sec:和 汇总报告一样,每秒中发送的KB(千字节)数。
  • 汇总图:也可以叫做聚合图,其类似于聚合报告,主要区别在于汇总图提供了条形图的展示,并且可以将条形图保存成PNG图片格式,如下图所示。
  • 比较断言可视化器:以可视化的方式展示比较断言的结果,并且支持将结果数据写入到指定的自定义的文件中。
  • 生成概要结果:用于将概要结果输出到Jmeter的日志文件中,该元件可以加在Jmeter测试计划的任何位置,但是需要注意的是,默认为每隔30秒才会输出一次结果写入到日志文件中。
  • 图形结果:用于生成一个简单的图形结果,图形中会展示所有取样器请求的耗时,单位为毫秒,在图形的底部会以黑色的形式显示每个取样器请求的耗时,会以蓝色来显示所有取样器请求的平均值,会以红色来显示耗时的标准偏差,会以绿色来显示当前的吞吐量,如下图所示,图中的吞吐量表示了所压测的服务器在单位时间内处理的实际请求数,图像结果的展示,可以更加直观的看到每个取样器请求的耗时情况以及观察性能指标曲线的走势来辅助判断可能存在的性能问题。由于图像展示通常需要消耗大量的CPU、内存等硬件资源,所以不建议在高并发的性能压测中,长时间使用图像结果展示,不然会让Jmeter 界面变得非常的卡顿。
  • JSR223 Listener:指的是使用JSR223规范(全称为Java Specification Request 223,是一个Java语言平台发布的规范,用于提供一种标准化的方式来嵌入脚本语言到Java应用程序中)的脚本语言来自定义监听器的实现以监听Jmeter的性能测试指标。
  • 邮件观察仪:用于设置在Jmeter的性能压测过程中,如果出现了大量的取样器请求失败时,可以向指定的邮件服务器和邮箱发送邮件,请求失败以触发发送邮件的阀值大小可以在界面中进行配置。
  • 响应时间图:是指Jmeter会在性能压测中,将取样器的响应时长绘制成一个折线图,在折线图中会展示出在整个性能压测过程中每个取样器请求的响应时长的变化趋势,以辅助进行性能问题的分析和定位,如果在同一个时间戳存在多个取样器请求时,会展示平均值,如下图所示。在Jmeter的界面中,支持设置响应时间图的相关展示参数,详细介绍可以参考官网链接:https://jmeter.apache.org/usermanual/component_reference.html#Response_Time_Graph
  • 保存响应到文件:用于将性能压测过程中取样器的所有响应结果都保存在指定的文件中,该元件可以放在Jmeter测试计划的任何位置中,在界面中可以设置仅保存取样器请求失败的结果以方便进行问题定位,当然也可以保存所有的响应结果到文件中。
  • 简单数据写入器:用于将简单的结果数据记录写入到指定的文件中。
  • 用表格查看结果:以表格的方式展示取样器每次请求的响应结果数据,在表格中会按照顺序展示取样器的请求编号、开始时间、线程的名称、请求耗时、请求的结果状态、传输的字节数据大小等。
  • BeanShell Listener:即BeanShell 监听器,指的是以BeanShell脚本语言的方式来自定义监听器的实现以监听Jmeter的性能测试指标。

2、开始一个性能测试脚本的编写

在完成了Jmeter元件的基础介绍后,在这里列举一个实际按理来方便大家对上述介绍的理论知识做一个基础的实践,实践时以Jmeter中最常用的HTTP取样器作为示例,在网址:https://httpbin.org/ 中提供了大量的HTTP请求和响应的模拟接口,读者们可以通过调用该网站提供的大量模拟接口来练习Jmeter性能测试脚本的编写,如下图所示,在这里我们从其中选取一个HTTPS的接口来作为演示的示例,演示接口的相关信息如下,接口详情如下图所示。

在确定了待测试的接口地址后,我们就可以使用Jmeter 来编写对该接口进行性能测试的脚本了,在Jmeter中,新建一个线程组,并且在该线程组下添加HTTP请求取样器,如下图所示,在HTTP请求取样器中,协议中输入https,因为待测试的接口是一个https协议的接口,服务器名称或者IP中输入httpbin.org因为待测试的接口的域名为httpbin.org,端口号中输入443,因为https协议的默认端口号为443,HTTP请求类型选择POST,路径中输入/post,在请求参数中输入名称为book,值为jmeter。

在线程组下再添加一个查看结果树元件,用于查看HTTP请求取样器的调试运行结果,添加完成后,即可调试运行Jmeter,如下图所示,在运行完成后,可以从查看结果树中看到HTTP请求取样器运行成功,并且待测试的接口正确的返回了相关的数据。

在线程组下再添加一个聚合报告元件,用于监控和查看Jmeter性能测试的指标,如下图所示。

在完成了上述的步骤后,一个简单的性能压测脚本就编写完成了,此时返回线程组界面,设置线程数为2,循环次数设置为永远,如下图所示,设置好了后,点击Jmeter界面的运行按钮,即可开始对接口进行性能压测了,性能压测时,切换到聚合报告元件下,即可查看到Jmeter性能压测时的各项性能指标了,如下图所示。

从图中可以看到,当前聚合报告中显示,

    • 性能测试时已经发送了48次请求的样本。
    • 平均响应的时长为391毫秒。
    • 请求过程中耗费的时长的中位数为319毫秒,也可以理解为约占50%的请求的时长不会超319毫秒,约占50%的请求的时长不会低于319毫秒。
    • 请求过程中90%的请求的时长不会高于450毫秒,剩余的10%的请求的时长不会低于450毫秒。
    • 请求过程中95%的请求的时长不会高于598毫秒,剩余的5%的请求的时长不会低于598毫秒。
    • 请求过程中99%的请求的时长不会高于1934毫秒,剩余的1%的请求的时长不会低于1934毫秒。
    • 请求过程中,最低请求时长为101毫秒,最高请求时长为1934毫秒。
    • 请求过程中的吞吐量为5.0/秒,即表示每秒可以处理5个请求,也表示其TPS为5。
    • 请求过程中的请求异常率为4.17%,即表示4.17%的请求发送失败。
    • 请求过程中每秒接收到的网络流量为3.74kb/sec,每秒发送的网络流程为1kb/sec。

3、本次学习总结

  • 监听器的使用,包括查看结果树、后端监听器、断言结果、汇总报告、聚合报告、汇总图、比较断言可视化器、生成概要结果、图形结果、JSR223 Listener、邮件观察仪、响应时间图、保存响应到文件、简单数据写入器、用表格查看结果、BeanShell Listener等,监听器通常同样是Jmeter性能测试中必不可缺少的元件,因为监听器通常会用于性能测试结果和指标的展示,建议读者需要重点掌握查看结果树、汇总报告、聚合报告的使用。

在完成内容的学习后,读者们需要能完成Jmeter基本性能测试脚本的编写,关于Jmeter元件的详细使用,在接下来的学习中还会进行更加详细的介绍。

出处 :本次学习的内容参考自清华大学出版社出版的《JMeter核心技术、性能测试与性能分析》一书

相关推荐
西岸行者2 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意2 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码2 天前
嵌入式学习路线
学习
毛小茛2 天前
计算机系统概论——校验码
学习
babe小鑫2 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms2 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下2 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。2 天前
2026.2.25监控学习
学习
im_AMBER2 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J2 天前
从“Hello World“ 开始 C++
c语言·c++·学习