【JMeter】ant+jmeter生成html報告


源博文來自於  http://my.oschina.net/hellotest/blog/517518

主要應用於接口的回歸或者性能的簡單查看功能。操作為先在jmeter中寫好測試計划,保存為jmx文件,在cmd窗口對應路徑下執行ant命令,會完成jmx計划的執行和生成jtl文件,並將jtl文件轉化為html頁面進行查看。后續可擴展為接入jenkins集成,並郵件發送。

一 安裝ant

下載apache-ant,放到對應路徑下,然后進行環境變量配置。系統變量的CLASSPATH添加E:\Installation Pack\eclipse\apache-ant-1.9.6\lib;用戶變量的PATH添加:E:\Installation Pack\eclipse\apache-ant-1.9.6\bin。打開cmd,執行 ant,提示"Buildfile:build.xml does not exist! Build failed"則配置成功,ant命令可用。如下圖所示。

二 編寫一個測試計划:見jmeter的http請求。如baidu.jmx.

三 編寫build.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project name="ant-jmeter-test" default="all" basedir=".">
  <!--為生成的jtl和html文件加時間戳--> <tstamp> <format property="time" pattern="yyyyMMddhhmm" /> </tstamp>
   <!--更改為自己的jmeter路徑--> <property name="jmeter.home" value="E:\Installation Pack\jmeter" />
   <!--更改為自己的jtl文件結果存放路徑--> <property name="jmeter.result.jtl.dir" value="E:\Installation Pack\JmeterTest\resultLog\jtl" />
   <!--更改為自己的html文件結果存放路徑--> <property name="jmeter.result.html.dir" value="E:\Installation Pack\JmeterTest\resultLog\html" /> <!--生成的html報告的前綴--> <property name="ReportName" value="TestReport" />
   <!--jlt和html文件名稱--> <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" /> <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" /> <target name="all"> <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}">
       <!--改為自己的jmx文件所在路徑--> <testplans dir="E:\Installation Pack\jmeter\bin\examples" includes="*.jmx" /> </jmeter> </target> <target name="report">
     <!--使用jmeter自己的轉化文件:將jtl轉化為xsl文件,改為自己的xsl文件所在路徑--> <xslt in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl" /> <copy todir="${jmeter.result.html.dir}"> <fileset dir="${jmeter.home}/extras"> <include name="collapse.png" /> <include name="expand.png" /> </fileset> </copy> </target> </project>

四 結果

在對應的路徑下生成了jtl和html文件,如TestReport201511091118.html。在瀏覽器中打開html文件得到如下所示。

五 linux 下ant+jmeter的使用

1 安裝:離線和在線安裝兩種,我是選的離線安裝。

從http://ant.apache.org下載tar.gz版的ant,復制到usr路徑下

進行解壓:tar -xzvf apache-ant-1.9.6.tar.gz 

vi /etc/profile 編輯ANT_HOME路徑:

export ANT_HOME=/usr/apache-ant-1.9.2

export PATH=$PATH:$ANT_HOME/bin

source /etc/profile使配置生效,執行 ant -version,測試ant是否生效。

2 jmeter 將jmeter文件夾拷貝到linux機器,我放到/opt/soft/jmeter路徑,chmod 777 /opt/soft/jmeter/bin/jmeter.sh.   測試jmeter是否linux可用:

[root@bjdhj-120-215 bin]# sh jmeter.sh -n -t examples/AdTest.jmx -l result.jtl
Created the tree successfully using examples/AdTest.jmx
Starting the test @ Fri Nov 27 17:42:13 CST 2015 (1448617333572)
Waiting for possible shutdown message on port 4445
Tidying up ...    @ Fri Nov 27 17:42:14 CST 2015 (1448617334581)
... end of run

3 su jenkins用戶,執行ant,測試能否正確執行和生成對應文件。注意權限

六 問題

每次做點什么我都會遇到一大堆問題的,這次也不例外,總結一下,問題如下

1 生成的html報告中,Min Time和Max Time無值,顯示NaN,百度了下需要添加xalan.jar,serializer.jar兩個jar包放入ant的lib中,但是我放進去后日志報錯,serializer的,所以我只把xalan.jar包放到了ant的lib中,可正確運行且得到了Max和Min值

報錯信息如下:E:\Installation Pack\JmeterTest\resultLog\jtl\build.xml:16: The following error occurred while executing this line: E:\Installation Pack\JmeterTest\resultLog\jtl\build.xml:27: java.lang.IllegalAccessError: tried to access class org.apache.xml.serializer.ExtendedContentHandler from class org.apache.xalan.transformer.TransformerImpl at org.apache.xalan.transformer.TransformerImpl.createSerializationHandler(TransformerImpl.java:1152)

2 源文檔中說可以增加90%Line這個參數並且貼出了代碼,但是我實驗了不成功,覺得寫得不對。如下

<!--.......................其他內容略....................................-->
<!-- New add 90% line 這部分可不寫,直接在<xsl:template name="summary">中把position參數傳過去,position參數即count(/testResults/*)的值(總行數)-->
<xsl:variable name="allLineTime">
    <xsl:call-template name="line">
        <xsl:with-param name="nodes" select="/testResults/*/@t" />
        <xsl:with-param name="postion" select="$allPostion" /> 
    </xsl:call-template>
</xsl:variable>
<!--.......................其他內容略....................................-->
<!-- New add 90% line -->
<xsl:template name="line">
    <xsl:param name="nodes" select="/.." />
    <xsl:param name="postion" select="/.." />
    <xsl:choose>
        <xsl:when test="not($nodes)">LNaN</xsl:when>
        <xsl:otherwise>
            <xsl:for-each select="$nodes">
          <!--nodes得到的是響應時間列表,descending即按倒序排列,$position即得到的倒序后的最后一條,也就是第一條,所以並不是90%Line Time,我不大會寫xml,未完成這個問題的解決,試圖用公式沒有成功。--> <xsl:sort data-type="number" order="descending" /> <xsl:if test="position() =$postion">
            <!--number(.)即得到對應position的值。也就是指定記錄的響應時間--> <xsl:value-of select="number(.)" /> </xsl:if> </xsl:for-each> </xsl:otherwise> </xsl:choose> </xsl:template> <!--.......................其他內容略....................................-->

3 如果90%可加,那么qps怎么計算的?都是需要自己寫公式統計嗎。明天問下擅長xml的同事把問題2解決掉,后續再擴展功能

ps:好難過,我問一個同事問題,他看到我在用ant編譯,大大的鄙視了我一番,說現在都是maven啦,沒人用ant。哭

4 問題:taskdef class org.programmerplanet.ant.taskdefs.jmeter.JMeterTask cannot be found

解決:把jar包:ant-jmeter-1.0.9.jar放到ant的lib路徑中即可

5 linux下ant不能正確執行:

權限問題,把ant涉及到的所有目錄都改成jenkins權限就行了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM