十五、JMeter监听器
1.简介
监听器用来监听及显示JMeter取样器测试结果,能够以树、表及图形形式显示测试结果,也可以以文件方式保存测试结果,JMeter测试结果文件格式多样,比如XML格式、CSV格式。默认情况下,测试结果将被存储为xml格式的文件,文件的后缀: ".jtl"。另外一种存储格式为CSV文件,该格式的好处就是效率更高,但存储的信息不如xml格式详细。
比较常用监听器:
查看结果树、聚合报告、用表格查看结果、响应时间图、
2.预览监听器
首先我们来看一下JMeter的监听器,路径:线程组(用户)->添加->监听器;我们可以清楚地看到JMeter5中共有16个监听器(不包括jp@gc开头的监听器,这个是安装的插件),如下图所示:
3.常用监听器详解
3.1 察看结果树
察看结果树,显示取样器请求和响应的细节以及请求结果,包括消息头,请求的数据,响应的数据。
(1)察看结果树,放的位置不同,查看的结果也不同。在线程组下添加察看结果树,查看线程组下所有请求的结果;放在具体某个请求下,只查看此请求的结果;若放在某个控制器节点下,则查看此控制器下节点执行的结果;
(2)该监听器推荐做调试用,在实际运行压测时,应该禁用,因为大量请求时,启用该监听器时打印的日志比较多,会造成大IO消耗,影响压力机性能。
3.1.1新建:线程组 > 添加 > 监听器 > 察看结果树,如下图所示:
3.1.2关键参数说明如下:
文件名:载入文件名
显示日志内容: 仅错误日志、仅成功日志 ;勾选中显示对应的日志信息
配置:定义report中自己所关心的数据项。
取样器结果:
- Thread Name: 线组名称
- Sample Start: 启动开始时间
- Load time: 加载时长
- Latency: 等待时长
- Size in bytes: 发送的数据总大小
- Headers size in bytes: 发送头大小
- Body size in bytes: 发送数据的其余部分大小
- Sample Count: 发送统计
- Error Count: 错误统计
- Response code: 返回码
- Response message: 返回消息
- Response headers:返回头信息
请求
- 数据获取方式、路径、地址等以及传递的参数、cookie
响应数据
- 响应加载的页面html
3.1.3作用
1)查看请求结果,请求成功的测试通常为绿色;红色则代表失败。
注:在没有对请求断言的情况下,显示绿色并不一定是成功,只代表响应码是200或300系列,显示红色说明响应码是400或500系列。所以要想确定请求返回的是正确的,必须要加上断言,只有断言成功才会显示绿色。
2)查看对应Sampler的测试结果的请求、响应数据。
取样器结果:显示的是取样器相关参数(客户端参数与响应参数)
请求:发送请求的具体内容
响应数据:服务器返回的相应参数
3.2 汇总报告
汇总报告,为测试中的每个不同命名的请求创建一个表行。这与聚合报告类似,只是它使用更少的内存。提供了最简要的测试结果信息,同时可以配置将相应的信息保存至指定的文件中(支持xml、csv格式的文件)。
单击Configure按钮,可以配置结果保存各种选项,具体这里不做说明了。
该监听器是笔者在调试jmeter项目时常用的监听器之一。
3.2.1新建:线程组 > 添加 > 监听器 > 汇总报告,如下图所示:
3.2.2关键参数说明如下:
Label 取样器别名,如果勾选Include group name ,则会添加线程组的名称作为前缀
样本:取样器运行次数
平均值: 请求(事务)的平均响应时间
最小值:请求的最小响应时间
最大值;请求的最大响应时间
标准偏差:响应时间的标准方差
异常%:事务错误率
吞吐量:也就是TPS
接收 KB/sec:每秒收到的千字节
发送 KB/sec:每秒发送的千字节
平均字节数:响应平均流量
3.3聚合报告
聚合报告,记录这次性能测试的总请求数、错误率、用户响应时间(中间值、90%、最少、最大)、吞吐量等,用以帮助分析被测试系统的性能。在聚合报告中,各个响应时间不能超过客户的要求,就是合格,例如不能超过响应时间2s,大于2s就是不合格的。
聚合报告应该是最详细的报告了,也是最为常用的报告。是大家在压测过程中最常用的监听器。
该监听器对于每个请求,它统计响应信息并提供请求数,平均值,最大,最小值,中位数、90%、95%、错误率,吞吐量(以请求数/秒为单位)和以kb/秒为单位的吞吐量。
单击Configure按钮,可以配置结果保存各种选项,具体这里不做说明了。
3.3.1新建:线程组 > 添加 > 监听器 > 聚合报告,如下图所示:
3.3.2关键参数说明如下:
Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
#样本:表示测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里就显示对应的 HTTP Request的执行次数是100
平均值:平均响应时间------默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间
中位数:50%用户的响应时间
90%百分位:90%用户的响应时间
95%百分位:95%用户的响应时间
99%百分位:99%用户的响应时间
最小值:最少响应时间
最大值:最大响应时间
异常%:本次运行测试中出现错误的请求的数量/请求的总数
吞吐量:默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
(接收/发送)KB/sec :每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec
3.4后端监听器
后端监听器,是一个异步侦听器,可以将数据推入都数据库中,提供了InfluxDB,graphite选项
3.4.1新建:线程组 > 添加 > 监听器 > 后端监听器,如下图所示:
3.4.2关键参数说明如下:
后端监听器实现:BackendListenerClient类的实现,Jmeter默认提供如下两种实现,因为我们使用的influxdb作为持久存储
org.apache.jmeter.visualizers.backend.graphite.GraphiteBackendListenerClient
org.apache.jmeter.visualizers.backend.graphite.InfluxdbBackendListenerClient 因为我们使用的influxdb作为持久存储,所以后续只介绍InfluxdbBackendListenerClient
异步队列大小:队列值包含异步处理时的度量标准。除非有一些特定的性能问题,否则最好不要从默认的5000。
3.4.3我们使用InfluxdbBackendListenerClient
- influxdbMetricsSender:org.apache.jmeter.visualizers.backend.influxdb.HttpMetricsSender
- influxdbUrl:influx数据库的url。example : http://influxHost:8086/write?db=jmeter
- application:被测试的应用名称。此值也作为名为"application"的标记存储在"events"中
- measurement:使用默认的"jmeter"就行
- summaryOnly:为true的情况下,只输出所有请求的集合数据报告,为flase的情况下,输出每条数据的详情报告、
- samplersRegex:正则表达式将与样本名称匹配并发送到后端。默认匹配所有
- percentiles:要发送到后端的百分位数,多个值已;分割
- testTitle:测试名称。默认的设置为 Test name。该值作为名为"text"的字段存储在"事件"度量中。 JMeter在测试的开始和结束时自动生成一个注释,其值以'started'和'ended'结尾
- eventTags:自定义标签。您可以根据需要添加任意数量的自定义标签。对于它们中的每一个,只需创建一个新行并在其名称前加"TAG_"
3.5 JSR223 Listener
JSR223 Listener,允许将JSR223脚本代码应用于示例结果。
3.5.1新建:线程组 > 添加 > 监听器 > JSR223 Listener,如下图所示:
3.5.2关键参数说明如下:
参数:要传递到脚本文件或脚本的参数列表;
文件名:用于执行的脚本文件,若没有脚本文件,将执行脚本;
Script:传递给JSR223执行的脚本;如果提供了脚本文件,则执行脚本文件,否则执行脚本。
3.6保存响应到文件
保存响应到文件,我们可以看到表格显示的结果与图形结果,看着挺复杂,其实稍微翻译一下就知道,绝大多数都是对图形的设置。
3.6.1新建:线程组 > 添加 > 监听器 > 保存响应到文件,如下图所示:
2、关键参数说明如下:
Save conditions:
- Save Successful Responses only:只保留成功的响应
- Save Failed Responses only:只保存失败的响应
- Don't save Transaction Controller SampleResult:不保存事务控制器示例结果
Save details
- Variable Name containing saved file name:包含已保存文件名的变量名
- 文件名称前缀:设置响应文件所在路径(路径必须已存在)和文件前缀
- Don't add number to prefix:不添加数字到文件名前缀
- Don't add content type suffix:不添加内容类型后缀,即扩展名(注:默认情况下,jmeter会根据服务器返回的结果自动生成合适类型的文件,比如服务器返回json格式的内容,jmter会自动生成.json文件)
- Add timestamp:添加时间戳到文件前缀
- Minimum Length of sequence number :最小序列号,不填默认从1开始。
3.7响应时间图
响应时间图,响应时间图形监听器。有点和我们之前介绍的Aggregate Graph类似
3.7.1新建:线程组 > 添加 > 监听器 > 响应时间图,如下图所示:
3.7.2关键参数说明如下:
设置
- 显示图表
- 保存图表:可以很方便的保存图表
图设置
- 时间间隔(ms):时间间隔,默认单位毫秒。样本根据此值进行分组。在显示图表之前,单击 Apply interval(应用区间)按钮以刷新内部数据;多长时间刷新一次
- 取样器标签选择:取样器标签选择,勾选之后,可以选择区分大小写,正则表达式。在显示图表之前,单击 Apply filter(应用过滤器)按钮以刷新内部数据
- 应用区间
- 区分大小写
- 正则表达式
标题:在图表的头部定义图表的标题
- 图标题:图形标题
- 同步名称
- 字体:字体。默认无衬线字体,可选衬线体
- 尺寸:大小
- 样式:样式。默认粗体,可选普通,斜体
线设置:定义线条的宽度
- 描边宽度
- 形状
图表大小
- 动态图大小 :动态图表大小,默认勾选,根据当前JMeter窗口大小的宽度和高度计算图形大小。取消勾选之后,可以自定义大小。单位是像素
- 宽:取消勾选动态图大小,自定义宽度,单位像素
- 高度:取消勾选动态图大小,自定义高度,单位像素
X轴:自定义X轴标签的日期格式
- 时间格式(SimpleDateFormat):时间格式。默认格式HH:mm:ss
Y轴(毫秒):为Y轴定义自定义最大值(以毫秒为单位)
- 最大值:注:如图图形出不来,设置下这个最大值,比如 100 ms
- 增量比例
- 显示号码分组?
图例:定义图表图例的放置和字体设置
- 放置:放置,默认底部,可以选右,左,上
- 字体:字体。默认无衬线字体,可选衬线体
- 尺寸:大小
- 样式:样式。默认普通,可选粗体,斜体
3.8 图形结果
图形结果,通过图形展示出本次性能测试数据的分布。 图形结果一般作为聚合报告的分析辅佐
3.8.1新建:线程组 > 添加 > 监听器 > 图形结果,如下图所示:
3.8.2关键参数说明如下:
文件名:载入文件名
3.9 断言结果
断言结果,对相应的请求添加断言。对取样器进行断言后,我们希望知道断言结果;此元件可以帮助我们显示断言结果(察看结果树元件中也可以看到)。消耗了大量资源(内存和CPU),性能测试时候不建议使用。
作用:用于检查测试中得到的响应数据等是否符合预期,用以保证性能测试过程中的数据交互与预期一致,一般与结果树结合使用。
3.9.1:线程组 > 添加 > 监听器 > 断言结果,如下图所示:
3.10 比较断言可视化器
比较断言可视化器,和比较断言配合使用。
3.10.1新建:线程组 > 添加 > 监听器 > 比较断言可视化器,如下图所示:
3.11 汇总图
汇总图,我们可以看到表格显示的结果与图形结果,看着挺复杂,其实稍微翻译一下就知道,绝大多数都是对图形的设置。
3.5.1新建:线程组 > 添加 > 监听器 > 汇总图,如下图所示:
3.12 生成概要结果
生成概要结果,该测试元素可以放置在测试计划中的任何位置。生成到目前为止对日志文件和/或标准输出的测试运行的摘要。显示了运行总计和差异总计。在适当的时间边界每n秒(默认为30秒)生成一次输出,因此将同步在同一时间运行的多个测试。
3.12.1新建:线程组 > 添加 > 监听器 > 生成概要结果,如下图所示:
3.13用表格查看结果
用表格查看结果,这个listener用来显示每个请求的响应头信息,我觉得它最好用的一点就是可以按先后顺序显示每个请求的开始时间、耗时、响应状态等,方便进行结果分析。
3.13.1新建:线程组 > 添加 > 监听器 > 用表格查看结果,如下图所示:
3.13.2关键参数说明如下:
Sample # :一个系列号,我们线程用户设置了5,这里就有5个号
Start Time:每个用户的开始时间,我们设置了1秒进5个用户,所以,每个用户进入时间不同,这里精确到毫秒。
Thread Name:线程名称,注意1-1,1-5,第一个1我也不知道表示什么,后面的1到5很好理解,就是用户1到用户5.
Label:就是Http reques的名称
Sampler Time(ms):运行这个Sampler所消耗的时间,有时候也等于Duration time
Status:执行结果标记,成本绿勾,失败红叉。
Bytes:请求的响应文件大小
Sent Byte:发送HTTP请求的数据包大小
Latency:这个字面意思是潜伏时间,不是延迟,暂时不好理解和解释。一个网络术语
Connet Time(ms):连接到服务器消耗的时间。
3.14 简单数据写入器
简单数据写入器,对用来记录取样器响应结果,不会以图形方式显示。配合NON GUI模式使用。
3.14.1新建:线程组 > 添加 > 监听器 > 简单数据写入器,如下图所示:
3.15邮件观察仪
邮件观察仪, 如果测试运行从服务器收到太多失败的响应,则可以将邮件程序可视化工具设置为发送电子邮件,这个不错,起到及时通知效果,下面我使用的是163 SMTP进行测试。可以实现。
3.15.1新建:线程组 > 添加 > 监听器 > 邮件观察仪,如下图所示:
3.15.2关键参数说明如下:
Message中
- From:代表发件人
- Address:代表收件人
- Success Subject:成功发送邮件的标题
- Success Limit:代表成功次数大于X时发送邮件
- Failure Subject:失败发送邮件的标题
- Failure Limit:大代表失败事务大于X时,发送邮件(于给定的数值,不是等于。比如写的1,则失败2次后将发送邮件通知我,当测试结果100%成功时则不会发送邮件)
SMTP sever
- Host:填写邮件服务器名称
- Login:发件人的邮箱地址
- Password 将smtp服务开启,生成授权码当作密码
- Connection Security 选择协议
点击TestMail 测试下是否可以发送成功,就可以投入使用了
3.16 BeanShell Listener
通过BeanShell 监听器可以访问JMeter提供的属性和变量
3.16.1新建:线程组 > 添加 > 监听器 > BeanShell Listener,如下图所示:
3.16.2关键参数说明如下:
重置解释器: 每次迭代是否重置解释器
参数:传递给脚本的参数;
文件名:本地开发的脚本文件(会覆盖在JMeter里编写的脚本);
Script:要运行脚本。编写脚本的区域。