源博文來自於 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權限就行了。
