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 取样器的基本使用
为了演示监听器的效果,简单的完成一个性能测试脚本,设置10线程并发,执行60分钟。要注意监听器需要放在测试计划节点或者线程组节点下,性能测试时一般是放在测试计划根节点下。
可以查看每个取样器的执行结果,在运行性能测试时不建议开启。
界面如下:
以表格的形式显示取样器结果,支持结果的保存。汇总报告和聚合报告的作用类似,比聚合报告占用内存少,但是缺少90%响应时间,因此对于性能测试的分析和度量没有太大意义。
聚合报告恐怕是性能测试过程中使用最频繁的监听器组件了。通过聚合报告可以轻松获得90%响应时间、TPS、异常率统计等。使用聚合报告需要和事务控制器一起使用,没有事务控制器的话相当于每一个HTTP请求都会进行统计,例如登录操作可能会涉及到多个http请求:访问静态图片、访问静态CSS文件、发送登录登录等,对于性能测试来说,统计“登录”的性能更重要,而不是统计下载静态图片、CSS文件,就像数据库中的事务概念类似,一组操作形成了一个事务,我们要度量的就是这个事务的性能,因此需要把这一组操作放到事务控制器里,然后在聚合报告里查看。
聚合报告的界面如下:
聚合报告中各个字段的解释如下:
后端监听器是一个异步监听器,支持将结果数据推送到数据库中,在开发自己的测试报告系统或者测试平台时,这个监听器会很有用
Aggregate Graph监听器可以看到表格显示的结果与图形结果,如下图,图形结果记录的是响应时间,在性能测试过程中不建议开启
查看断言结果,在结果查看树中也能查看断言结果,二者作用相同。在性能测试过程中不建议开启,因为比较耗资源
与断言配合使用的,可以在测试过程中看查看断言的结果,其实是一个很鸡肋的东西,因为断言的结果在结果查看器中也可以查看,并且还以树形的方式展现,非常直观。
简单的说,就是在命令行中查看取样器的执行结果。有时候性能测试不得不在GUI模式下执行,为了避免资源耗费,可以启用该监听器来查看性能测试的结果你
在性能测试的执行过程中可以发送邮件给相关人员。可以设置事务数的阈值,在成功次数或者失败次数达到阈值时自动发送邮件
以图形的形式显示取样器响应时间的结果,单位是毫秒。可以将图形保存成文件,界面如图:
这个监听器用来存储服务器的响应数据。在性能测试过程中一般不启用这个监听器,特别是高并发的场景下,服务器返回的响应数据会比较多,会很影响性能。它主要是用于测试脚本的调试、试运行、接口自动化测试中。
作用是记录取样器的执行结果,在设置界面中可以指定给一个文件名,JMeter会把取样器的数据写入到该文件中,简单数据写入器的主要应用场景是非GUI方式执行时,可以提高执行效率,它的作用跟命令行下jmeter.sh -l的作用是相同的。
界面如下:
会把取样器每次结果以表格的形式显示。支持结果保存到文件,在性能测试过程中不建议开启,因为比较耗费资源
BeanShell监听器允许你访问JMeter的属性、变量、结果以及运行时变量,界面如下:
界面字段一目了然,不再详细介绍。那么这个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监听器实现