Jmeter Html 报告优化

本文档详细介绍了如何优化JMeter生成的HTML报告,包括解决邮件发送时的中文乱码问题、调整报告样式以突出失败请求及响应时间较长的情况、增加90%线和QPS等关键性能指标,并展示了如何在失败详情中展示响应数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载自南风_real博客园:http://www.cnblogs.com/jaychang/p/5881525.html

但是最近在查阅相关资料时,发现基本都是重复一篇文章Jmeter使用笔记之html报告扩展(一),而且有很多看不明白的地方,于是根据自己需求,在报告中修改了一些,现在整理分享出来。

优化后效果图:

 

1. 邮件发送html报告有中文时,显示乱码:

修改encoding为“GBK”

<xsl:output method="html" indent="yes" encoding="GBK" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" />

2. Summary中的只标红Failures数:

  • 屏蔽Summary中class属性

            <!--            
                <xsl:attribute name="class">
                    <xsl:choose>
                        <xsl:when test="$allFailureCount &gt; 0">Failure</xsl:when>
                    </xsl:choose>
                </xsl:attribute> 
                -->
  • 修改allFailureCount

            <td align="center"> <xsl:value-of select="$allSuccessCount" /> </td> <xsl:choose> <xsl:when test="$allFailureCount &gt; 0"> <td align="center" style="font-weight:bold"> <font color="red"> <xsl:value-of select="$allFailureCount" /> </font> </td> </xsl:when> <xsl:otherwise> <td align="center"> <xsl:value-of select="$allFailureCount" /> </td> </xsl:otherwise> </xsl:choose>

3. Pages页面按Average Time倒序排序:

在Pagelist模板中for-each下添加

<xsl:for-each select="/testResults/*[not(@lb = preceding::*/@lb)]"  >
            <!-- 按平均时间排序 -->
            <xsl:sort select="sum(../*[@lb = current()/@lb]/@t) div count(../*[@lb = current()/@lb])" data-type="number" order="descending"/>

4. 接口Average Time超过2s标黄显示:

  • 添加LongTime css
                .Failure {
                    font-weight:bold; color:red;
                }
                .LongTime {
                    font-weight:bold; color:#ff9900; } 
  • Pagelist 模块中针对错误和超长时间接口标色显示
            <tr valign="top"> <xsl:choose> <!-- 失败用例标红显示 --> <xsl:when test="$failureCount &gt; 0"> <xsl:attribute name="class"> <xsl:choose> <xsl:when test="$failureCount &gt; 0">Failure</xsl:when> </xsl:choose> </xsl:attribute> </xsl:when> <!-- 平均时间超过2s,标色显示 --> <xsl:when test="$averageTime &gt; 2000"> <xsl:attribute name="class"> <xsl:choose> <xsl:when test="$averageTime &gt; 2000">LongTime</xsl:when> </xsl:choose> </xsl:attribute> </xsl:when> </xsl:choose>

5. 添加90% Line和QPS:

  • 添加90 %lineTime模板
<xsl:template name="max"> <xsl:param name="nodes" select="/.." /> <xsl:choose> <xsl:when test="not($nodes)">NaN</xsl:when> <xsl:otherwise> <xsl:for-each select="$nodes"> <xsl:sort data-type="number" order="descending" /> <xsl:if test="position() = 1"> <xsl:value-of select="number(.)" /> </xsl:if> </xsl:for-each> </xsl:otherwise> </xsl:choose> </xsl:template> <!-- 90% line time --> <xsl:template name="lineTime"> <xsl:param name="nodes" select="/.." /> <xsl:choose> <xsl:when test="not($nodes)">NaN</xsl:when> <xsl:otherwise> <xsl:for-each select="$nodes"> <xsl:sort data-type="number" /> <!-- last() 返回当前上下文中的最后一个节点位置数 --> <!-- ceiling(number) 返回大于number的最小整数 --> <!-- floor(number) 返回不大于number的最大整数 --> <!-- position() 返回当前节点位置的数字 --> <!-- number(object) 使对象转换成数字 --> <xsl:choose> <!-- 当只有一个节点时,向上取整 --> <xsl:when test="last() = 1"> <xsl:if test="position() = ceiling(last()*0.9)"> <xsl:value-of select="number(.)" /> </xsl:if> </xsl:when> <xsl:otherwise> <xsl:if test="position() = floor(last()*0.9)"> <xsl:value-of select="number(.)" /> </xsl:if> </xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:otherwise> </xsl:choose> </xsl:template>
  • 添加display-qps模板
 

<xsl:template name="display-qps">
  <xsl:param name="value" />
  <xsl:value-of select="format-number($value,'0.000 /s')" />
</xsl:template>

  • Sunmary中添加标题
        <tr valign="top"> <th># Samples</th> <th>Success</th> <th>Failures</th> <th>Success Rate</th> <th>Average Time</th> <th>Min Time</th> <th>Max Time</th> <th>90% Line</th> <th>QPS</th> </tr>
  • Summary中添加allLineTime和qps变量
            <xsl:variable name="allMaxTime"> <xsl:call-template name="max"> <xsl:with-param name="nodes" select="/testResults/*/@t" /> </xsl:call-template> </xsl:variable> <!-- New add 90% line --> <xsl:variable name="allLineTime"> <xsl:call-template name="lineTime"> <xsl:with-param name="nodes" select="/testResults/*/@t" /> </xsl:call-template> </xsl:variable> <!-- 将毫秒转换成秒 --> <xsl:variable name="qps" select="$allCount * 1000 div $allTotalTime"/>
  • Summary中调用allLineTime和qps变量
            <td align="center"> <xsl:call-template name="display-time"> <xsl:with-param name="value" select="$allMaxTime" /> </xsl:call-template> </td> <td align="center"> <xsl:call-template name="display-time"> <xsl:with-param name="value" select="$allLineTime" /> </xsl:call-template> </td> <td align="center"> <xsl:call-template name="display-qps"> <xsl:with-param name="value" select="$qps" /> </xsl:call-template>
  • pagelist中添加标题
<xsl:template name="pagelist"> <h2>Pages</h2> <table align="center" class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> <tr valign="top"> <th>URL</th> <th># Samples</th> <th>Success</th> <th>Failures</th> <th>Success Rate</th> <th>Average Time</th> <th>Min Time</th> <th>Max Time</th> <th>90% Line</th> <th>QPS</th> <th></th> </tr>
  • pagelist中添加allLineTime和qps变量
            <xsl:variable name="maxTime"> <xsl:call-template name="max"> <xsl:with-param name="nodes" select="../*[@lb = current()/@lb]/@t" /> </xsl:call-template> </xsl:variable> <!-- new add 90% line time --> <xsl:variable name="nintyTime"> <xsl:call-template name="lineTime"> <xsl:with-param name="nodes" select="../*[@lb = current()/@lb]/@t" /> </xsl:call-template> </xsl:variable> <xsl:variable name="qpsTime" select="$count * 1000 div $totalTime"/>
  • pagelist中调用allLineTime和qps变量
                <td align="center"> <xsl:call-template name="display-time"> <xsl:with-param name="value" select="$maxTime" /> </xsl:call-template> </td> <!-- Page页面添加90% LineTime --> <td align="center"> <xsl:call-template name="display-time"> <xsl:with-param name="value" select="$nintyTime" /> </xsl:call-template> </td> <td align="center"> <xsl:call-template name="display-qps"> <xsl:with-param name="value" select="$qpsTime" /> </xsl:call-template> </td>

6.Failure Detail模块显示Response Data:

  • 设置showData为‘y’
<!-- Defined parameters (overrideable) -->
<xsl:param    name="showData" select="'y'"/> <xsl:param name="titleReport" select="'Interface Test Results'"/> <xsl:param name="dateReport" select="'date not defined'"/> 
  • 替换内容
                <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> <tr valign="top"> <th align="center">Response</th> <th align="center">Failure Message</th> <xsl:if test="$showData = 'y'"> <th align="left">Response Data</th> </xsl:if> </tr> <xsl:for-each select="/testResults/*[@lb = current()/@lb][attribute::s='false']"> <tr> <td><xsl:value-of select="@rc | @rs" /> - <xsl:value-of select="@rm" /></td> <td><xsl:value-of select="assertionResult/failureMessage" /></td> <xsl:if test="$showData = 'y'"> <td><xsl:value-of select="responseData" /></td> </xsl:if> </tr> </xsl:for-each>

7.添加Host

<xsl:template name="pageHeader"> <h1><xsl:value-of select="$titleReport" /></h1> <table width="100%"> <tr> <!-- 获取requestHeader数据 --> <xsl:variable name="URL" select="/testResults/httpSample/requestHeader" /> <!-- 从获取的URL中截取数据,第二代表起始位置,第三位代表长度 --> <xsl:variable name="newURL" select="substring($URL, 94, 40)" /> <!-- 已换行符来截取,before代表换行符之前的数据 --> <xsl:variable name="remaining" select="substring-before($newURL, '&#xA;')" /> <td align="left">Date report: <xsl:value-of select="$dateReport" /></td> <td align="center">Host: <xsl:value-of select="$remaining" /></td> <td align="right"><a href="./TestLog.html">测试日志</a></td> </tr> </table>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值