Ant是一個(gè)可以把代碼從某個(gè)地方拿來,編譯,再拷貝到某個(gè)地方去的構(gòu)建工具。一時(shí)沖動(dòng)學(xué)習(xí)一下,順便王婆賣瓜嘗試著處理jmeter的腳本,于是,采坑之旅也從此開始。本文省略ant安裝步驟和ant腳本說明,直接寫遇到的問題以及解決的方法。
首先,谷歌"ant批量處理jmeter腳本",以賀滿博客為主(其實(shí)寫得都差不多)
<?xml version="1.0" encoding="UTF-8"?>
<project name="ant-jmeter-test" default="all" basedir=".">
<!--為生成的jtl和html文件加時(shí)間戳-->
<tstamp>
<format property="time" pattern="yyyyMMddhhmm" />
</tstamp>
<!--更改為自己的jmeter路徑-->
<property name="jmeter.home" value="D:apache-jmeter-3.0_slave" />
<!--更改為自己的jtl文件結(jié)果存放路徑-->
<property name="jmeter.result.jtl.dir" value="D:apache-jmeter-3.0_slaveapache-jmeter-3.0_slave" />
<!--更改為自己的html文件結(jié)果存放路徑-->
<property name="jmeter.result.html.dir" value="D:apache-jmeter-3.0_slaveapache-jmeter-3.0_slave" />
<!--生成的html報(bào)告的前綴-->
<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="D:apache-jmeter-3.0_slaveapache-jmeter-3.0_slavein" includes="*.jmx" />
</jmeter>
</target>
<target name="report">
<!--使用jmeter自己的轉(zhuǎn)化文件:將jtl轉(zhuǎn)化為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>
初版大致如上,幸運(yùn)指數(shù)的話,cmd進(jìn)入ant目錄,輸入ant會(huì)直接生成如下圖.html格式的測(cè)試報(bào)告
不幸的話繼續(xù)看:
問題1:unexpected text “ ”
解決辦法:隱藏所有注釋前面的空格
問題2:jmeter-results-detail-report_21.xsl doesn’t exist
解決辦法:下載jmeter-results-detail-report_21源碼,jmeter3.0沒有這個(gè)文件,jmeter-results-detail-report_21和jmeter-results-detail-report是兩個(gè)不同文件。將下載的源碼格式從.xml改為.xsl,投機(jī)取巧直接改后綴行,放在jmeterextras文件下
問題3:測(cè)試報(bào)告NaN
解決辦法:從jmeter的lib包里復(fù)制一份xalan-2.7.2.jar和serializer-2.7.2.jar 到Ant的lib包,并且在build.xml添加如下代碼
<path id="xslt.classpath">
<fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
<fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
</path>
問題4:測(cè)試報(bào)告沒有標(biāo)題信息,添加如下代碼,可能遇到的type param is undefined
<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}"/>
<param name="titleReport" expression="${report.title}${report.datestamp}"/>
</xslt>
解決方法:注意style標(biāo)簽結(jié)尾沒有反斜杠
后,無比同情的恭喜你成功了
build.xml完整如下:
<?xml version="1.0" encoding="UTF-8"?>
<project name="ant-jmeter-test" default="all" basedir=".">
<!--為生成的jtl和html文件加時(shí)間戳-->
<tstamp>
<format property="time" pattern="yyyyMMddhhmm"/>
</tstamp>
<!--更改為自己的jmeter路徑-->
<property name="jmeter.home" value="D:apache-jmeter-3.0_slaveapache-jmeter-3.0_slave"/>
<property name="report.title" value="XXXX接口測(cè)試"/>
<!--更改為自己的jtl文件結(jié)果存放路徑-->
<property name="jmeter.result.jtl.dir" value="D:apache-jmeter-3.0_slaveapache-jmeter-3.0_slave"/>
<!--更改為自己的html文件結(jié)果存放路徑-->
<property name="jmeter.result.html.dir" value="D:apache-jmeter-3.0_slaveapache-jmeter-3.0_slave"/>
<!--生成的html報(bào)告的前綴-->
<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>
<path id="xslt.classpath">
<fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
<fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
</path>
<target name="test">
<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"/>
<jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
<!--改為自己的jmx文件所在路徑-->
<testplans dir="D:apache-jmeter-3.0_slaveapache-jmeter-3.0_slavein" includes="0222TestT.jmx"/>
</jmeter>
</target>
<target name="report">
<tstamp>
<format property="report.datestamp" pattern="yyyy/MM/dd HH:mm"/>
</tstamp>
<!--使用jmeter自己的轉(zhuǎn)化文件:將jtl轉(zhuǎn)化為xsl文件,改為自己的xsl文件所在路徑-->
<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}"/>
<param name="titleReport" expression="${report.title}${report.datestamp}"/>
</xslt>
<copy todir="${jmeter.result.html.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png"/>
<include name="expand.png"/>
</fileset>
</copy>
</target>
</project>
注:批量處理jmeter腳本的話,只需改成includes="*.jmx"