• jmeter+ant+jenkins+mac报告优化(二):添加90% Line和QPS


    • 一、优化内容

         1、Summary中只标红Failures数

         2、Pages页面按Average Time倒序排序

         3、Average Time超过2s标黄显示

         4、Pagelist 模块中针对错误和超长时间接口标色显示

         5、添加90% Line和QPS

         6、Failure Detail模块显示Response Data

         效果:

    • 二、具体实现

         1、 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>

         2、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"/>

        3、接口Average Time超过2s标黄显示:

    • 添加LongTime css
      .Failure {
                        font-weight:bold; color:red;
                    }
                    .LongTime {
                        font-weight:bold; color:#ff9900;
                    }

        4、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>
    • 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>
  • 相关阅读:
    弹框只弹一次(cookie)
    多个列表求笛卡尔积的几种方法
    mysqlrouter 8.0.17启动失败
    Eclipse启动项目成功,IDEA报错java.lang.ClassNotFoundException: javax.servlet.Filter
    java的回调机制,讲得很清楚
    Java 命令行 -D
    spring boot项目中,webservice生成客户端,wsdl可配置
    一个老项目的高并发改造,遇到的redis连接不释放问题。
    ExecuterService实现线程池
    子线程获取不到请求中变量的问题
  • 原文地址:https://www.cnblogs.com/chengchengla1990/p/6262196.html
Copyright © 2020-2023  润新知