一、本文目的: 之前寫(xiě)了兩篇文章搭建持續(xù)集成接口測(cè)試平臺(tái)(Jenkins+Ant+Jmeter)和ANT批量執(zhí)行Jmeter腳本,,功能實(shí)現(xiàn)上都沒(méi)有什么問(wèn)題,,但是最后生成的報(bào)告有一點(diǎn)小問(wèn)題,雖然不影響使用,,但總是感覺(jué)不夠完美,,具體問(wèn)題如下: 1、Date report這里的時(shí)間沒(méi)有正確顯示出來(lái) 2,、Summary里的字段Min Time和Max Time顯示的是NaN,,沒(méi)有顯示正確的時(shí)間。 本文主要解決上述兩個(gè)問(wèn)題,,具體報(bào)告如何生成可參考上面提到的兩篇文章,。 二、Jmeter+Ant報(bào)告生成原理: 在解決問(wèn)題之前,,讓我們先弄清楚Jmeter+Ant是生成報(bào)告的原理,,知道原理后我們就可以很從容的解決問(wèn)題了。另外,,如果后續(xù)我們想定制報(bào)告也就很容易了,。 1,、在Jmeter的extras目錄下,官方已經(jīng)為我們提供了一個(gè)現(xiàn)成的實(shí)例,,我們只需要在該目錄下執(zhí)行ant命令就可以生成一個(gè)數(shù)據(jù)文件Test.jtl和一個(gè)報(bào)告Test.html(PS:如果沒(méi)有安裝ant需要先去安裝,,不會(huì)用ant的自行百度)。 2,、知道了上一步后,,接下來(lái)我們研究的重點(diǎn)就是extras目錄下的build.xml文件了,具體研究細(xì)節(jié)就不在此細(xì)說(shuō)了,,因?yàn)檫@就部分內(nèi)容屬于ant的范圍,,有需要的可以自行補(bǔ)充下ant的知識(shí)。 三,、解決問(wèn)題: 1,、找到extras目錄下build.xml文件內(nèi)容的如下部分:它的作用就是把生成的.jtl數(shù)據(jù)文件轉(zhuǎn)換為.html格式的報(bào)告 具體屬性的含義:
1 <path id="xslt.classpath">//jar的路徑 2 <fileset dir="${lib.dir}" includes="xalan*.jar"/> 3 <fileset dir="${lib.dir}" includes="serializer*.jar"/> 4 </path> 5 //把生成的.jtl數(shù)據(jù)文件轉(zhuǎn)換成.html格式的報(bào)告 6 <target name="xslt-report" depends="_message_xalan"> 7 <tstamp><format property="report.datestamp" pattern="yyyy/MM/dd HH:mm"/></tstamp> 8 <xslt 9 classpathref="xslt.classpath"10 force="true"11 in="${testpath}/${test}.jtl"12 out="${testpath}/${test}.html"13 style="${basedir}/jmeter-results-detail-report${style_version}.xsl">14 <param name="showData" expression="${show-data}"/>15 <param name="titleReport" expression="${report.title}"/>16 <param name="dateReport" expression="${report.datestamp}"/>17 </xslt>18 </target> 2、通過(guò)上面的分析,,style 文件是整成報(bào)告轉(zhuǎn)換的關(guān)鍵,,那我們就打開(kāi)jmeter-results-detail-report_21.xsl這個(gè)文件看看,找到如下幾行,,這里也定義了三個(gè)參數(shù)跟build.xml文件中一樣,,由此可猜測(cè),我們只要在build.xml文件中定義dateReport這個(gè)參數(shù)和值,,在style中就可以按如下方式使用,,經(jīng)過(guò)測(cè)試證明猜測(cè)是正確的,那么第一個(gè)問(wèn)題就解決了: 1 <xsl:param name="showData" select="'n'"/>2 <xsl:param name="titleReport" select="'Load Test Results'"/>3 <xsl:param name="dateReport" select="'date not defined'"/> 3,、對(duì)于第二個(gè)問(wèn)題,,其實(shí)把第1步中的代碼復(fù)制到我們自己的build.xml文件中后,可以一并解決這兩個(gè)問(wèn)題,。解決第二個(gè)總是的關(guān)鍵代碼是第9行和第10行: classpathref="xslt.classpath" force="true" 而第9行又引用了第1~4行 4,、到此,兩個(gè)問(wèn)題都解決了,最終修改后的build.xml文件如下,,標(biāo)黃是解決總是添加的代碼: <?xml version="1.0" encoding="UTF-8"?> <project name="ant-jmeter-test" default="run" basedir="."> <!-- 需要改成自己本地的 Jmeter 目錄--> <property name="jmeter.home" value="/Users/Tools/Jmeter" /> <property name="report.title" value="接口測(cè)試"/> <!-- jmeter生成jtl格式的結(jié)果報(bào)告的路徑--> <property name="jmeter.result.jtl.dir" value="/Users/Desktop/jmx/report" /> <!-- jmeter生成html格式的結(jié)果報(bào)告的路徑--> <property name="jmeter.result.html.dir" value="/Users/Desktop/jmx/report" /> <!-- 生成的報(bào)告的前綴--> <property name="ReportName" value="TestReport" /> <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}.jtl" /> <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}.html" /> <target name="run"> <antcall target="test" /> <antcall target="report" /> </target> <target name="test"> <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" /> <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}"> <!-- 聲明要運(yùn)行的腳本"*.jmx"指包含此目錄下的所有jmeter腳本--> <testplans dir="/Users/Desktop/jmx" includes="*.jmx" /> <property name="jmeter.save.saveservice.output_format" value="xml"/> </jmeter> </target> <path id="xslt.classpath"> <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/> <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/> </path><target name="report"> <tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp> <xslt classpathref="xslt.classpath" force="true" in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl"> <param name="dateReport" expression="${report.datestamp}"/> </xslt> <!-- 因?yàn)樯厦嫔蓤?bào)告的時(shí)候,,不會(huì)將相關(guān)的圖片也一起拷貝至目標(biāo)目錄,所以,,需要手動(dòng)拷貝 --> <copy todir="${jmeter.result.html.dir}"> <fileset dir="${jmeter.home}/extras"> <include name="collapse.png" /> <include name="expand.png" /> </fileset> </copy> </target> </project> 5,、修改后的報(bào)告:
|
|