每天15分钟JMeter入门篇(七):认识JMeter中的监听器

前言

JMeter中监听器的作用就是收集、显示JMeter取样器的结果,并以树形、图表、表格的形式显示出来。还可以将监听结果保存成文件。在JMeter中5.4.1中一共提供了17中监听器,其中性能测试经常用的大概就是四五种,其他的监听器不是说不重要,只是大部分人的性能测试都是基于http请求的,所有有些监听器可能不会涉及。
欢迎转载,转载请注明出处:https://blog.csdn.net/wyp_810618/article/details/124571693?spm=1001.2014.3001.5501,谢谢


其他文章

每天15分钟JMeter入门篇(一):Hello JMeter
每天15分钟JMeter入门篇(二):使用JMeter实现并发测试
每天15分钟JMeter入门篇(三):认识JMeter的逻辑控制器
每天15分钟JMeter入门篇(四):认识JMeter中的函数
每天15分钟JMeter入门篇(五):认识JMeter中的Test Fragment
每天15分钟JMeter入门篇(六):学会用好JMeter中的断言
每天15分钟JMeter入门篇(七):认识JMeter中的监听器
每天15分钟JMeter进阶篇(1):JAVA 取样器的基本使用


每天15分钟JMeter入门篇(七):认识JMeter中的监听器

  • 前言
  • 认识监听器
    • 查看结果树(View Results Tree)
    • 汇总报告(Summary Report)
    • 聚合报告(Aggregate Report)
    • 后端监听器(Backend Listener)
    • 汇总图(Aggregate Graph)
    • 断言结果(Assertion Results)
    • 比较断言可视化器(Comparison Assertion Visualizer)
    • 生成概要结果(Generate Summary Results)
    • 图形结果(Graph Results)
    • JSR223 监听器(JSR223 Listener)
    • 邮件观察仪(Mailer Visualizer)
    • 响应时间图(Response Time Graph)
    • 保存响应到文件(Save Responses to a file)
    • 简单数据写入器(Simple Data Writer)
    • 用表格查看所有结果(View Results in Table)
    • BeanShell监听器(BeanShell Listener)


认识监听器

为了演示监听器的效果,简单的完成一个性能测试脚本,设置10线程并发,执行60分钟。要注意监听器需要放在测试计划节点或者线程组节点下,性能测试时一般是放在测试计划根节点下。

查看结果树(View Results Tree)

可以查看每个取样器的执行结果,在运行性能测试时不建议开启。
界面如下:
每天15分钟JMeter入门篇(七):认识JMeter中的监听器_第1张图片

汇总报告(Summary Report)

以表格的形式显示取样器结果,支持结果的保存。汇总报告和聚合报告的作用类似,比聚合报告占用内存少,但是缺少90%响应时间,因此对于性能测试的分析和度量没有太大意义。

聚合报告(Aggregate Report)

聚合报告恐怕是性能测试过程中使用最频繁的监听器组件了。通过聚合报告可以轻松获得90%响应时间、TPS、异常率统计等。使用聚合报告需要和事务控制器一起使用,没有事务控制器的话相当于每一个HTTP请求都会进行统计,例如登录操作可能会涉及到多个http请求:访问静态图片、访问静态CSS文件、发送登录登录等,对于性能测试来说,统计“登录”的性能更重要,而不是统计下载静态图片、CSS文件,就像数据库中的事务概念类似,一组操作形成了一个事务,我们要度量的就是这个事务的性能,因此需要把这一组操作放到事务控制器里,然后在聚合报告里查看。
聚合报告的界面如下:
每天15分钟JMeter入门篇(七):认识JMeter中的监听器_第2张图片
聚合报告中各个字段的解释如下:

  • lable 事务的名称,没有事务控制器的话,就是每一个取样器的名称
  • Samples:样本:在压测过程中一共执行了多少次取样器的操作。
  • Average:平均值。取样器的平均响应时间,单位是毫秒。在性能测试过程中平均值一般参考意义不大。
  • Median:中位值。将所给的取样响应时间从小到大或从大到小排列,奇数个数的话取中间的数字,偶数个数的话取中间两个数的平均数。这个值我看的一般也比较少,有时会用它和平均值比较,以判断是否有大量的极端值存在。
  • 90% Line:90%响应时间。这个是最重要的一个指标,我一般是用它来衡量事务的性能优劣
  • Min:最小响应时间
  • Max:最大响应时间
  • Error:出错率
  • Throughput:吞吐量,在有事务控制器时,吞吐量的含义是每秒完成的事务数,我一向把这个值作为性能测试结果的唯一标准。计算吞吐量的时候是不包含出错的样本的。
  • Received KB / sec 接收数据传输量,单位是KB
  • Sent KB/sec 发送的数据传输量,单位是KB。
    在聚合报告中一般关注的是90%响应时间、吞吐量、异常率,数据传输速率这几个指标。可以反映出一次性能测试结果的好坏。

后端监听器(Backend Listener)

后端监听器是一个异步监听器,支持将结果数据推送到数据库中,在开发自己的测试报告系统或者测试平台时,这个监听器会很有用

汇总图(Aggregate Graph)

Aggregate Graph监听器可以看到表格显示的结果与图形结果,如下图,图形结果记录的是响应时间,在性能测试过程中不建议开启

断言结果(Assertion Results)

查看断言结果,在结果查看树中也能查看断言结果,二者作用相同。在性能测试过程中不建议开启,因为比较耗资源

比较断言可视化器(Comparison Assertion Visualizer)

与断言配合使用的,可以在测试过程中看查看断言的结果,其实是一个很鸡肋的东西,因为断言的结果在结果查看器中也可以查看,并且还以树形的方式展现,非常直观。

生成概要结果(Generate Summary Results)

简单的说,就是在命令行中查看取样器的执行结果。有时候性能测试不得不在GUI模式下执行,为了避免资源耗费,可以启用该监听器来查看性能测试的结果你

图形结果(Graph Results)

JSR223 监听器(JSR223 Listener)

邮件观察仪(Mailer Visualizer)

在性能测试的执行过程中可以发送邮件给相关人员。可以设置事务数的阈值,在成功次数或者失败次数达到阈值时自动发送邮件

响应时间图(Response Time Graph)

以图形的形式显示取样器响应时间的结果,单位是毫秒。可以将图形保存成文件,界面如图:
每天15分钟JMeter入门篇(七):认识JMeter中的监听器_第3张图片

保存响应到文件(Save Responses to a file)

这个监听器用来存储服务器的响应数据。在性能测试过程中一般不启用这个监听器,特别是高并发的场景下,服务器返回的响应数据会比较多,会很影响性能。它主要是用于测试脚本的调试、试运行、接口自动化测试中。

简单数据写入器(Simple Data Writer)

作用是记录取样器的执行结果,在设置界面中可以指定给一个文件名,JMeter会把取样器的数据写入到该文件中,简单数据写入器的主要应用场景是非GUI方式执行时,可以提高执行效率,它的作用跟命令行下jmeter.sh -l的作用是相同的。
界面如下:
每天15分钟JMeter入门篇(七):认识JMeter中的监听器_第4张图片

用表格查看所有结果(View Results in Table)

会把取样器每次结果以表格的形式显示。支持结果保存到文件,在性能测试过程中不建议开启,因为比较耗费资源

BeanShell监听器(BeanShell Listener)

BeanShell监听器允许你访问JMeter的属性、变量、结果以及运行时变量,界面如下:
每天15分钟JMeter入门篇(七):认识JMeter中的监听器_第5张图片
界面字段一目了然,不再详细介绍。那么这个BeanShell监听器具体是干什么用的?很多文档语焉不详,包括官方文档。通过自己尝试,我的理解它最大的作用是允许你监听JMeter的属性和运行时变量,如果符合一定的条件,你可以做后续处理,首先拿它对比结果查看树,在结果查看树中你可以查看取样器的执行结果和运行信息,但是你无法做任何的后续处理,例如“如果结果查看器中取样器响应时间大于200毫秒则按照XX格式要求写入XX日志并存入数据库”这样的需求,你用结果查看器是无法实现的,这个时候BeanShell取样器就可以派上用场了。
首先你可以为HTTP取样器增加一个断言:断言持续时间,设置期望时间例如是200毫秒。
然后增加一个BeanShell监听器断言,并编写类似的代码:

import org.apache.jmeter.assertions.AssertionResult; 

AssertionResult[] results = sampleResult.getAssertionResults() ; 

for(int i =0 ; i<results.length;i++) { 
//将断言结果组织成你预期的格式,写入你的log文件或者数据库或者redis
}

简单的说,BeanShell监听器就是可以让你自定义JMeter的监听行为。其实在JMeter中有些监听器,本身就是一个BeanShell监听器实现

你可能感兴趣的:(#,从零开始JMeter,oracle)