你真的了JMeter解聚合报告么?
1.背景
大家在使用JMeter进行性能测试时,聚合报告(Aggregate Report)可以说是必用的监听器,但是你真的了解聚合报告么?
2.目的
本次笔者跟大家聊聊聚合报告(Aggregate Report)常用误区。
3.常见误区
说明:本次笔者采用的JMeter版本为5.1.1
- 误区一:90%、95%、99百分位的理解
经常有的同学理解成平均90%、95%、99%请求的交易耗时,包括一些做了很久的老测人员试竟然也是这么理解的(其实笔者最开始也是这么理解的),出现这个问题根本原因是对百分位的概念理解错误(换句话说:你数学是体育老师教的吧!),那么正确该怎么理解呢?
我们来看一张聚合报告图:

正解:90%百分位值为230ms,在发送100笔请求过程中,聚合报告会实时给请求耗时进行由小到大行排序,排序后的第90个请求耗时为230ms,也就是说前90笔请求中耗时最长的是230ms(其余90%百分位,95%百分位道理类似就不占篇赘述了),聚合报告平均值要与百分位值结合来看。
说明:90%、95%、99%值是支持自定义在jmeter.properties修改:

- 误区二:把吞吐量值当TPS值
经常有的同学直接把聚合报告中的吞吐量当作TPS来看(网上还有一种说法是把请求放在事务控制器里,吞吐量就可以看成TPS,经笔者验证并不可以),这种做法是相当不严谨的。那么聚合报告中的吞吐量什么情况下可以看成TPS?
老规矩还是用实际操作来验证:

没错,还是上面聚合报告的图,笔者把100.jtl文件中的请求全部改成false,再来看下聚合报告结果:

然后再用聚合报告打开100.jtl结果文件,聚合报告各项数据没有任何改变(笔者就不放图了,不然就一张图用了3遍),笔者这种做法是比较极端的(或者可以说笔者把现象放大了),此时再把吞吐量看成TPS就出事了。。。。请求全失败了,TPS应该是0吧?????
给大家举个栗子,大家都看过赵本山大叔的《钟点工》小品,里面有个经典的问题:把大象关进冰箱需要几步?相信大家都知道答案。我们换种思维:假如我们把这个操作看成一个事务,如果找不到大象,或者没有冰箱,这个事务都是无法完成的,也就是说这个事务最终会失败(事务只有两种状态要么成功要么失败)。
那么什么时候吞吐量可以成TPS,从严格意义来讲就是交易成功率为100%;还有一种情况是:交易失败率在你可以接受的范围内(对当前测试整体结果影响不大,到了可以忽略的程度)。
我们再来验证下网上说的方法吧:把请求放在事务控制器里
脚本结构图:

有的同学可以能会问:事务控制器为啥不放多个请求,其实从本质上看是没这个必要的,放多个请求也不影响最终结果。

笔者还是用之前的操作把100_2.jtl中的请求全部改成false,再来看下聚合报告结果:

聚合报告结果图(为什么会总体样本会是200,笔者觉得问题出在逆向解析过程中会把JTL结果文件中所有的样本解析出来):

吞吐量的值还是没有变,此时吞吐量值预期结果应该是零,进而证明网上的所谓的套路不靠谱(感觉网上说的增加事务控制器的,目的更偏向与如何把多个请求组装成一个事务,这也是事务控制的作用)。
4.JMeter聚合报告源码优化
针对以上问题,笔者查看了聚合报告底层源码,总结下:聚合报告是无状态的(状态是样本的状态),只负责统计数据(就是个计数器),统计时只认Sampler的Label,笔者个人感觉源生的聚合报告,不是十分合适OLTP。
笔者优化了:统计计算公式,支持GUI页面控制(默认勾选统计tps,如果不勾选则还是统计吞吐量)

效果:

笔者手动改下100.jtl改成只失败1笔,执行结果如下:

你真的了JMeter解聚合报告么?的更多相关文章
- Jmeter默认报告优化
一.本文目的: 之前写了两篇文章搭建持续集成接口测试平台(Jenkins+Ant+Jmeter)和ANT批量执行Jmeter脚本,功能实现上都没有什么问题,但是最后生成的报告有一点小问题,虽然不影响使 ...
- Jmeter html 报告中添加90% line time
转载南风_real博客园:http://www.cnblogs.com/jaychang/p/5784882.html 首先上效果图: 其次明白几个原理: 90% Line的意思是:一组数由小到大进行 ...
- Jmeter 聚合报告---测试结果分析
当我们测试完后,最关心就是结果数据了,下面一起来分析Jmeter聚合报告数据. 首先来看下Jmeter的help是如何解释这些含义的. 1.Label - The label of the sampl ...
- jmeter(十五)Jmeter默认报告优化
一.本文目的: 之前写了两篇文章搭建持续集成接口测试平台(Jenkins+Ant+Jmeter)和ANT批量执行Jmeter脚本,功能实现上都没有什么问题,但是最后生成的报告有一点小问题,虽然不影响使 ...
- jmeter生成报告指示板
JMeter支持仪表板图表和报告生成 数据从一个测试计划. 这一章描述了如何配置和使用生成器. 概述 JMeter的仪表板生成器是一个模块化的扩展. 它的缺省行为是读取和处理样本 CSV文件生成HTM ...
- Jmeter Html 报告优化
转载自南风_real博客园:http://www.cnblogs.com/jaychang/p/5881525.html 但是最近在查阅相关资料时,发现基本都是重复一篇文章Jmeter使用笔记之htm ...
- 理解 JMeter 聚合报告(Aggregate Report)
Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为“聚合报告”.今天再次有同行问到这个报告中的各项数据表示什么意思,顺便在这里公布一下,以备大家查阅. 如果 ...
- 转: 理解 JMeter 聚合报告(Aggregate Report)
Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为“聚合报告”.今天再次有同行问到这个报告中的各项数据表示什么意思,顺便在这里公布一下,以备大家查阅. 如果 ...
- jenkins+ant+jmeter html报告文件作为附件发送(ant-jmeter支持javamail)
前言:由于ant-jmeter目前的版本不支持javamail,也就是说发送邮件时只能借助jenkins自带的发送邮件插件来发送报告. 但是jenkins发送邮件支持发送邮件内容(且有价值.有营养的内 ...
随机推荐
- Web API POST [FromBody] string value 接受参数
网上看到很多关于这这个问题的解决方案,但是都不正确,我也恰巧遇到这个问题,所有把正确的解决方案写出来,希望给后来人参考,如有不同意见欢迎指正 namespace WebApi.Controllers ...
- SpringBoot热部署报错(BeanCreationException: Error creating bean with name 'classPathFileSystemWatcher' d)
springboot热部署配置方法 http://blog.csdn.net/pyfysf/article/details/78791292 异常信息如下 org.springframework.be ...
- 详解svm和smo的出现
SupportVector Machines are learning models used forclassification: which individuals in a population ...
- python函数基础-参数-返回值-注释-01
什么是函数 函数就是有特定功能的工具 # python中有内置函数(python解释器预先封装好的)与自定义函数(用户自定义封装的)之分 为什么要用函数 # 可以减少代码冗余,增加代码复用性 # 使代 ...
- linux初学者-正则表达式
在windows中,是没有办法批量处理文件的,但是在linux系统中,可以通过命令直接处理一系列文件,这些文件的处理就需要用到正则表达式.这同样可以应用与目录. 1.处理多个文件 正则表达式中批量 ...
- springboot-rabbitMQ
作者:纯洁的微笑出处:http://www.ityouknow.com/ 版权所有,欢迎保留原文链接进行转载:) RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息 ...
- SSD+HDD 安装ubuntu16.04+win7双系统
本人电脑是联想天逸100 前段时间把光驱拆了加了一个128G的SSD 顺便把SSD装上了win7 机械硬盘500G放资料和一般软件之类的 后来想要用到ubuntu 就在官网下载ubuntu1 ...
- Github上fork的项目如何merge原Git项目
问题场景 小明在Github上fork了一个大佬的项目,并clone到本地开发一段时间,再提交merge request到原Git项目,过了段时间,原作者联系小明,扔给他下面这幅截图并告知合并处理冲突 ...
- 用scrapy爬取搜狗Lofter图片
用scrapy爬取搜狗Lofter图片 # -*- coding: utf-8 -*- import json import scrapy from scrapy.http import Reques ...
- 用mongodb 固定集合实现只保留固定数量的记录,自动淘汰老旧数据
在一个保存report记录的场景中,我们使用MongoDB进行数据存储 example: db: report Collection: daily_report 创建db: use report; ...