题记:在用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的测试结果文件每个字段戴表什么意思熟悉,这样才能定制更多的指标,这个也会在单独的博客中说明

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

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

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

  2. DuiLib学习笔记(二) 扩展CScrollbar属性

    DuiLib学习笔记(二) 扩展CScrollbar属性 Duilib的滚动条滑块默认最小值为滚动条的高度(HScrollbar)或者宽度(VScrollbar).并且这个值默认为16.当采用系统样式 ...

  3. odoo开发笔记 -- 搜索视图继承扩展

    odoo开发笔记 -- 搜索视图继承扩展

  4. jmeter+ant+jenkins生产的报告乱码

    jmeter+ant+jenkins生产的报告乱码 问题:生产报告会乱码的问题,一般是有编码格式引起的.我遇到的问题是,jmeter需要读取csv的数据作为参数.但是我们并不知道csv保存是什么编码格 ...

  5. Jmeter学习笔记(二十三)——生成HTML性能报告

    有时候我们写性能报告的时候需要一些性能分布图,JMeter是可以生成HTML性能报告的.这篇博客,简单介绍下在利用jmeter进行性能测试时,是如何生成HTML的可视化测试报告的 一.准备工作 1:j ...

  6. Jmeter学习笔记(八)——监听器元件之聚合报告

    1.聚合报告添加 聚合报告是常用的监听器之一,添加路径: 点击线程组->添加->监听器->聚合报告 2.聚合报告界面及说明 Label:请求的名称,就是我们在进行测试的httpreq ...

  7. Jmeter使用笔记1

    1.简介 jmeter 是一款专门用于功能测试和压力测试的轻量级测试开发平台.多数情况下是用作压力测试,该测试工具在阿里巴巴有着广泛的使用. 2.安装 下载apache-jmeter-3.1.rar; ...

  8. Jmeter学习笔记(二十一)——Concurrency Thread Group阶梯式加压测试

    一.先安装jmeter的插件管理工具 1.下载地址:jmeter-plugins.org 点击plugins-manager.jar下载. 2.安装 把下载下来的文件plugins-manager.j ...

  9. jmeter接口测试笔记

    1.接口测试基础 API:Application Programming Interface,即调用应用程序的通道. 接口测试遵循点 接口的功能性实现:检查接口返回的数据与预期结果的一致性. 测试接口 ...

随机推荐

  1. Linux 小知识翻译 - 「如何成为 Linux 内核开发者」

    新年的开始,聊聊「怎么做才能成为Linux内核开发者」. Linux内核的开发都是由志愿开发者们完成的.他们并不属于某些特定的企业. 因此,你也有参加Linux内核开发的资格.不用说,卓越的编码技术以 ...

  2. Linux 与 Unix 到底有什么不同?区别在哪?

    Linux 与 Unix 到底有什么不同?区别在哪? 如果你是一名20多岁或30多岁的软件开发人员,那么你已成长在一个由Linux主导的世界中.数十年来,它一直是数据中心的重要参与者,尽管很难找到明确 ...

  3. vue 数据绑定实现的核心 Object.defineProperty()

    vue深入响应式原理 现在是时候深入一下了!Vue 最独特的特性之一,是其非侵入性的响应式系统.数据模型仅仅是普通的 JavaScript 对象.而当你修改它们时,视图会进行更新.这使得状态管理非常简 ...

  4. 用golang chromedp 操作已经打开的chrome浏览器

    win7 环境,主要是一开始想在代码中先用exec.Command启动chrome,但始终不能成功监听9222端口,折腾了很长时间, 需要先手工启动chrome监听端口,具体写在代码注释中了. 然后再 ...

  5. 强化学习(四)—— DQN系列(DQN, Nature DQN, DDQN, Dueling DQN等)

    1 概述 在之前介绍的几种方法,我们对值函数一直有一个很大的限制,那就是它们需要用表格的形式表示.虽说表格形式对于求解有很大的帮助,但它也有自己的缺点.如果问题的状态和行动的空间非常大,使用表格表示难 ...

  6. 【vue】vue中引入jquery

    简洁版: 第一步:首先在package.json中输入"jquery":"^3.2.1",其中“3.2.1”为jquery版本号,按需修改 注:package. ...

  7. 六、Oracle 存储过程

    一.存储过程1语法:create procedure 名字is|as 声明变量begin 代码块end; 2.执行存储过程打开命令窗口,输入:exec 过程名字 3.打开输出命令:set server ...

  8. 6.oop-类和对象

    一.如何抽象对象1.创建一个类2.给该描述属性 属性就是java中所有的数据类型3.给该类定义行为方法 方法的签名是:public void 方法名(){方法体} 公共的 无返回类型 二.如何使用类和 ...

  9. 二维数组遍历的方式(for普通循环遍历、foreach循环遍历、toString方式遍历)

    package com.Summer_0421.cn; import java.lang.reflect.Array; import java.util.Arrays; /** * @author S ...

  10. Jenkins Pipeline高级用法-ShareLibrary

    1.Github配置 1.1 上传jenkinsfile到github https://github.com/zeyangli/ShareLibrary-jenkins.git 2.Jenkins配置 ...