zoukankan      html  css  js  c++  java
  • Jmeter Html 报告优化

    转载自南风_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>
  • 相关阅读:
    MIne FirstBlog
    P6563 [SBCOI2020]一直在你身旁
    P6563 [SBCOI2020]一直在你身旁
    T122085 [SBCOI2020]时光的流逝
    LC 918. Maximum Sum Circular Subarray
    1026 Table Tennis
    LC 1442. Count Triplets That Can Form Two Arrays of Equal XOR
    LC 1316. Distinct Echo Substrings
    LC 493. Reverse Pairs
    1029 Median (二分)
  • 原文地址:https://www.cnblogs.com/ceshi2016/p/6033239.html
Copyright © 2011-2022 走看看