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

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

    优化后效果图:

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

    修改encoding为“UTF-8”

    <xsl:output method="html" indent="yes" encoding="UTF-8" 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>
    
    
    • 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="req" select="/testResults/httpSample/requestHeader" />
    			<!-- 从获取的URL中截取数据,以Host:分割,取后半部分 -->
    			<xsl:variable name="remaining" select="substring-after($req,'Host:')" /> 	
    			<!-- 已换行符来截取,before代表换行符之前的数据 -->
    			<xsl:variable name="host" select="substring-before($remaining, '&#xA;')" /> 
    			<td align="left">Date report: <xsl:value-of select="$dateReport" /></td>
    			<td align="center">Host: <xsl:value-of select="$host" /></td>
    			<td align="right"><a href="./TestLog.html">测试日志</a></td>
    		</tr>
    	</table>
    	<hr size="1" />
    </xsl:template>
    
    
    ### 8.文件下载:[jmeter-results-detail-report_30.xsl](https://pan.baidu.com/s/1gfvIVNt)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~闲谈莫论人非,静坐常思己过~~~~~~~~~~~~~~~~~~~~~~~~~~
  • 相关阅读:
    start tag, end tag issues in IE7, particularly in xslt transformation
    用SandCastle为注释生成chm文档
    Firebug
    架构的重点
    Linux Shell常用技巧(十) 管道组合
    Linux JDK升级
    Linux Shell常用技巧(十二) Shell编程
    Packet Tracer 5.0实验(一) 交换机的基本配置与管理
    Linux Shell常用技巧(六) sort uniq tar split
    Linux Shell常用技巧(二) grep
  • 原文地址:https://www.cnblogs.com/jaychang/p/5881525.html
Copyright © 2011-2022 走看看