Jmeter 使用笔记之 html 报告扩展(一)

题记:在用 loadrunner 的时候可以生成一个 HTML 的报告,并且里面包含各种图表,各种详细的数据。而在使用 Jmeter 测试完后并不能直接生成 Html 的报告(无论是用 GUI 还是命令行启动)。

经过查找资料发现 Jmeter 的 extras 目录下有生成 HTML 的 xsl 样式表,其实 Jenkins+ant+Jmeter 生成的 HTML 报告也是调用了这里的样式表生成的,于是

通过 xsltproc report.jtl > test.html,或者 ant 也可以。这个命令把Jmeter 的结果文件转换为 HTML 的报告。结果如下:

这里虽然能生成 HTML 报告了,但是这个报告太弱了,基本不能用,包含的参数太少。所以需要对这个报告进行扩展。因为 Jmeter 本身的聚合报告的数据还是比较全的,

因此打算按照那个报告的值进行扩展。

xsltproc,xlst介绍

XSL 指扩展样式表语言(EXtensible Stylesheet Language),把 XML 转换为HTML 用的就是 xls 编写的样式表,所以如果要扩展这个报告,首先要对 xls

熟悉,才能更改和扩展样式表。可以在http://www.w3school.com.cn/xsl/index.asp这里进行此语言的学习。

xsltproc 是一个快速 XSLT 引擎,它可以将通过 XSL 层叠样式表把 XML 转换为相应格式的文件,比如:HTML,XHTML,PDF

比如将 XML 转换为 HTML,使用格式如下:

xsltproc xsl-html.xsl hoto.xml -o html.html (这里还可以直接把样式表文件写入 jtl 文件的 href 属性中,直观的告诉这个 XML 用哪个样式表)

xls 中查找 XML 用的 xpath,因此还需要对 xpath 熟悉,xsltproc 这个引擎用的是 xpath1.0 版本,因此在样式表中使用 xpath 是不能使用 xpath2.0 的函数
和一些属性。
个人对 xpath 还算熟悉,但是对 xls 一点也不熟悉,没办法为了能够扩展报告,直接学习 xls 和 xpath。(关于 xls 会再写一遍博客介绍,顺便把使用过程中
的问题和经验汇总)

如果直接使用 ant 和 Jmeter 集成后也是可以直接生成的,但是 ant 转换 HTML 的引擎也是只支持 xpath1.0,后来经过了解大部分的引擎都不支持xpath2.0,所以
期中不能使用 xpath2.0 的函数。

90%Line 时间
为了能够显示 90%Line 的时间,首先要对这个指标熟悉,这个指标值得是一组数据,在 90% 的位置的数据的时间,所以我们扩展的时候只要知道了 90%
位置的索引,那么就能取得这个值了。
以下是部分关键代码

<xsl:variable name="allMedianTime">
                <xsl:call-template name="LineTime">
                    <xsl:with-param name="nodes" select="/testResults/*/@t" />
                    <xsl:with-param name="position" select="ceiling($allCount * 0.9)" />
                </xsl:call-template>
            </xsl:variable>

这里主要是获得时间元素的集合,以及 90%line 的位置,有了这两个参数后就可以进行后续的扩展了,扩展后的效果图如下:

因为 90%Line 和 95%Line,99%Line 计算原理都是一致的,因此只要计算出一个值其他的值也很好计算

QPS 扩展

Jmeter 的具合报告有 Throughput 这个值,这个在 loadrunner 中是表示为吞吐量的,这里可以表示 QPS 或者 TPS(在使用了事务的情况下),个人把这个称为 QPS,因为更直观。

和 %90Line 同样的道理,首先必须知道这个值是怎么计算出来,经过查找资料和官网的比较,发现这个值是通过如下的公式计算出来的:

官网的截图:

Throughput = (number of requests) / (total time)
total time = 测试结束时间 - 测试开始时间
测试结束时间 = MAX(请求开始时间 + Elapsed Time)
测试开始时间 = MIN(请求开始时间)

知道了公式,那么计算就容易了,以下是关键代码:

<xsl:variable name="nodeThroughput">
                <xsl:call-template name="throughput">
                    <xsl:with-param name="nodes" select="/testResults/*/@ts" />
                    <xsl:with-param name="count" select="$allCount" />
                </xsl:call-template>
            </xsl:variable>

扩展后的结果如下:

吞吐量扩展

在 loadrunner 中吞吐量就是 Throughput,在 Jmeter 的聚合报告中最后一列的值就是 loadrunner 中的 Throughput,为了便于区分,我把这里的值称为Throughput,

也就是吞吐量。

经过查找资料发现吞吐量的计算和 QPS 的计算公式是一样的,因为也就是如下的公式:

Throughput = (请求的总字节数) / (total time)

这里的 total time 计算和 QPS 是一样的,而总字节数直接把所有请求的加起来即可,关键代码如下:

<xsl:variable name="nodeKB">
                <xsl:call-template name="throughput">
                    <xsl:with-param name="nodes" select="/testResults/*/@ts" />
                    <xsl:with-param name="count" select="sum(/testResults/*/@by) div 1024" />
                </xsl:call-template>
            </xsl:variable>

因为这里显示的字节,最后的结果我打算以 KB 的单位显示,因此这里需要除以1024,扩展后的结果如下

TPS扩展

TPS 在 Jmeter 中虽然某些情况和 QPS 是一致的,但是还是有不一致的地方,因此这里也需要扩展,这样的结果看着更清晰明了。

首先和其他的参数扩展一样,需要知道计算公式,这里的计算公式和 QPS 也是一样的,只是数据的集合不一样,以下是扩展后的效果。

在扩展的过程中进一步发现 Jmeter 的聚合结果中最后的”总体“一行在某些情况下计算的数值是不准确的。如果脚本中不包含事务,那么这里的结果是准确的,如果都包含事务并且把

Generate parent sample 选中后这里的结果也是准确的,在脚本中有事务并且没有选中 Generate parent sample,或者有些有事务有些没有时,这时的结果就不准确了,因为查看计算

方式发现它把所有的请求都算进去了。

比如,一个 jtl 文件中即包含 HTTP 请求也包含事务,因为事务只是对之前请求的一个统计,本身是不发送请求的,所以计算总的吞吐量、QPS,TPS 时是不能这么算的。

所以在扩展的过程中分成了两个样式表,一个样式表处理包含事务,或者没有事务的情况,这时的结果以 QPS 衡量;一个样式表处理全都是事务的情况,这时候的结果以 TPS 衡量,这样

就准确了。

测试

扩展了好几个指标,这些指标的正确性如何呢?需要在多种情况下进行测试,经过测试后各个指标都是正确的。但是还没有在大的数据量级别下测试,如果测试后发现哪里会有问题,会及时

更改。

切记:由于样式表中是按照 lb 进行请求区分的,因此这里的 lable 不能重复,本身也不应该重复,包括 Jmeter 的聚合报告都是以 lable 进行区分的

PS:在扩展过程中的难点一是公式如何计算的,二是xls这个 指扩展样式表语言不是很熟悉,本身也有很多限制,会在下个博客中说明。但是用过后感觉还是很不错的既熟悉了 xpath 还熟悉了 xls。

三是需要对 Jmeter 的测试结果文件每个字段戴表什么意思熟悉,这样才能定制更多的指标,这个也会在单独的博客中说明

本文转自 OneAPM 官方博客

时间: 2024-11-05 08:22:06

Jmeter 使用笔记之 html 报告扩展(一)的相关文章

ORACLE性能诊断―学习statspack笔记(四)[扩展statspack收集服务器统计]

oracle|笔记|服务器|统计|性能 ORACLE性能诊断―学习statspack笔记(四)[扩展statspack收集服务器统计]   作者:刘颖博 时间:2004-3-22 mail:liuyingbo@126.com,请指正   转载请注明出处及作者   说明:由于STATSPACK并不能获取全面分析性能问题所需要的所有信息,所以需要扩展其收集服务器的统计信息.(本文环境REDHAT Linux7.2)   VMSTAT介绍 通过STATSPACK收集服务器信息,主要通过收集VMSTAT

WWDC 2014 Session笔记 - iOS 通知中心扩展制作入门

本文是我的 WWDC 2014 笔记 中的一篇,涉及的 Session 有 Creating Extensions for iOS and OS X, Part 1 Creating Extensions for iOS and OS X, Part 2 总览 扩展 (Extension) 是 iOS 8 和 OSX 10.10 加入的一个非常大的功能点,开发者可以通过系统提供给我们的扩展接入点 (Extension point) 来为系统特定的服务提供某些附加的功能.对于 iOS 来说,可以使

javascript框架设计读书笔记之字符串的扩展和修复_javascript技巧

1.repeat方法:将一个字符串重复自身n次.比如:repeat("chaojidan",2)   -> chaojidanchaojidan 方法1: 复制代码 代码如下: function repeat(str,n){ return Array.prototype.join.call({length:n+1},str);  //在类数组{length:n+1}上下文下执行join方法,并传入str.也就是用str来分隔类数组的选项,类数组是空,所以就有n个str分隔n+1个

javascript框架设计读书笔记之数组的扩展与修复_javascript技巧

1.indexOf和lastIndexOf方法: 因为IE7在数组对象上使用indexOf会报错,所以需要重写一个兼容性的. 复制代码 代码如下: Array.prototype.lastIndexOf(item,index){ var n = this.length,i = (index==null||index>n-1)?n-1:index; if(i < 0) i = n+i; for(;i>=0;i--) if(this[i] === item)   //全等判断,indexOf

nodePPT使用笔记(又一款好用的Web PPT)

一款好用的Web PPT 链接:https://github.com/ksky521/nodePPT 主要功能 支持Markdown语法 18种转场效果,4种渐显动画 方便的绘制表格功能 动画样式.看笔记.画笔.扩展宽度(用于表格).overview模式 多屏功能 图片全屏查看 代码引用高亮 1. 列表渐显动画 {:&.fadeIn} fadeIn  bounceIn moveIn zoomIn 2. 18种转场效果[slide data-transition="zoomin"

JMeter测试计划以及测试实施的注意点

1.测试场景的设计 JMeter压力测试计划作成的时候,需要事先进行Scenario设计,设想我们业务应用中的几种场景. 比如,考虑以下的这几种场景. Scenario1.多家经销商同时在做consumer的登录之后,大概20%的经销商在做整车登录,80%的经销商在做维修配件的登录. Scenario2.多家经销商同时在月末进行盘点作业的. Scenario3.多家经销商同时进行xxx功能的检索查询. 2.测试录制相关 使用JMeter的代理或是BadBoy进行录制的时候,特别是JMeter代理

开发者所需要知道的 iOS8 SDK 新特性

WWDC 2014 已经过去一个多月.最激动人心的莫过于 Swift 这门新语言的发布,我在之前已经写了一些关于这么语言的第一印象和一些初步的探索.在写这篇文章的时候,Swift 随着 beta 3 得到了重大的更新,而这门语言现在也还在剧烈的变化之中.对于 Swift,现在大家的探索才刚刚上路,很多背后的机制还并不是非常清楚,或者有可能发生巨大的变化,因此在这里和之后的几篇文章,直到稳定的 1.0 版本出现,我不再打算继续深入针对 Swift 写什么文章.这基本出于对未来可能的变化会容易误导读

物联网的时代 传感器的春天

博世亚太区市场总监严更真在演讲中提到了博世过去几年的市场情况(如下图所示).从图中可以看出:博世传感器的市场猛增始于2010年.众所周知,2010年是物联网概念产业化的第二年.作为传感器领域的领导企业,博世的出货量变化,给我们传递了一个关键信息:传感器在物联网中了迎来发展的春天. 除了博世之外,气体传感器领头羊汉威电子.光纤传感器代表企业铂珏传感也都分享了其在物联网时代的新际遇.比如汉威电子下属传感器公司苏州能斯达总经理王冉介绍说:"物联网代来了新的变革和挑战,现在是发展的好时候,我们计划追加资

PHP安装memcached扩展笔记

  这篇文章主要介绍了PHP安装memcached扩展笔记,本文讲解了安装服务端.launchpad.安装memcached扩展以及配置PHP.ini等内容,需要的朋友可以参考下 最近在服务器上部缓存系统,记录一下PHP安装memcached扩展. 代码如下: # 安装服务端 yum install memcached -y I. launchpad 请于https://launchpad.net/libmemcached/+download下载目前最新版的libmemcached(201505