• 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)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~闲谈莫论人非,静坐常思己过~~~~~~~~~~~~~~~~~~~~~~~~~~
  • 相关阅读:
    Search Insert Position(二分查找)
    c++基础题
    Divide Two Integers(模拟计算机除法)
    Swap Nodes in Pairs(链表操作)
    Letter Combinations of a Phone Number(带for循环的DFS,组合问题,递归总结)
    进程和程序的区别
    Add Two Numbers(链表)
    Longest Substring Without Repeating Characters
    02.友盟项目--原始日志数据生成
    01.友盟项目--nginx服务器配置
  • 原文地址:https://www.cnblogs.com/jaychang/p/5881525.html
Copyright © 2020-2023  润新知