Jmeter接口測試腳本運行后生成的是jtl(xml)格式的文件,這些文件不具備可讀性,所以我們要把他轉化為可以閱讀的html格式報告。
Ant是一個功能強大的打包編譯工具。我們使用他的目的是將xml文件轉化為html格式的文件。
1、安裝ANT
(1)下載ANT安裝包到/usr/ant目錄
wget https://mirrors.cnnic.cn/apache/ant/binaries/apache-ant-1.9.9-bin.tar.gz
(上傳ant目錄不存在時提前創建)
(2)解壓安裝
tar -xvf apache-ant-1.9.9-bin.tar.gz
(3)新建ant環境變量
# vim /etc/profile
在文件末尾添加如下內容
export ANT_HOME=/usr/ant/apache-ant-1.9.9
export PATH=$PATH:$JAVA_HOME/bin:$ANT_HOME/bin
使添加的內容生效
# source /etc/profile
(4)檢查是否安裝成功
# ant -version
重要配置:
1)將 jmeter的extras目錄中ant-jmeter-1.1.1.jar包拷貝至ant安裝目錄下的lib目錄中
這一步操作使Ant運行時能夠找到"org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"這個類,從而成功觸發JMeter腳本
2)修改Jmeter的bin目錄下jmeter.properties文件的配置:jmeter.save.saveservice.output_format=xml
這一步操作使Jmeter報告輸出文件格式為xml
2、准備Jmeter測試腳本
請參見我關於jmeter腳本編寫的其他文章 http://www.cnblogs.com/LiangHu/tag/Jmeter/
我的測試腳本如下圖所示:test_token.jmx
3、用Ant執行腳本
(1)在jmeter安裝目錄下新建兩個文件夾
TestReport文件夾:用於保存html的結果報告;
TestScrip文件夾:用於保存jmeter的測試腳本。
(2)ant執行jmeter腳本原理
ant工具主要是根據build.xml文件來進行工作的,官方給出的默認文件在Jmeter的安裝目錄下extras文件夾中。
你可以在該目錄下直接輸入命令ant看一下效果:
構建時,ant執行的是該目錄下Test.jmx腳本,執行完畢后把輸出的報告Test.jtl文件轉化為Test.html文件
從圖上可以看出生成了這兩個測試報告文件。希望可以從這個過程中能夠大概了解ant執行jmeter腳本的原理。
測試報告使用默認的樣式,如下圖所示:
(3)修改build.xml文件

1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <project name="ant-jmeter-test" default="run" basedir="."> 4 <tstamp> 5 <format property="time" pattern="yyyyMMddHHmm" /> 6 </tstamp> 7 <!-- 需要改成自己本地的 Jmeter 目錄--> 8 <property name="jmeter.home" value="/usr/jmeter/apache-jmeter-3.3" /> 9 <!-- jmeter生成jtl格式的結果報告的路徑--> 10 <property name="jmeter.result.jtl.dir" value="/usr/jmeter/apache-jmeter-3.3/TestReport/testToken/jtl" /> 11 <!-- jmeter生成html格式的結果報告的路徑--> 12 <property name="jmeter.result.html.dir" value="/usr/jmeter/apache-jmeter-3.3/TestReport/testToken/html" /> 13 <!-- 生成的報告的前綴--> 14 <property name="ReportName" value="TestReport" /> 15 <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" /> 16 <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" /> 17 <!-- 輸出生成的報告名稱和存放路徑--> 18 <echo message="${jmeter.result.jtlName}"/> 19 <echo message="${jmeter.result.htmlName}"/> 20 <echo message="${jmeter.result.html.dir}"/> 21 22 <target name="run"> 23 <antcall target="test"/> 24 <antcall target="report"/> 25 </target> 26 27 <!--加載jar包,解決顯示時間問題--> 28 <path id="xslt.classpath"> 29 <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/> 30 <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/> 31 </path> 32 33 <target name="test"> 34 <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" /> 35 <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}"> 36 <!-- 聲明要運行的腳本。"*.jmx"指包含此目錄下的所有jmeter腳本--> 37 <testplans dir="/usr/jmeter/apache-jmeter-3.3/TestScrip" includes="test_token.jmx" /> 38 39 <property name="jmeter.save.saveservice.output_format" value="xml"/> 40 </jmeter> 41 </target> 42 43 <target name="report"> 44 <tstamp> <format property="report.datestamp" pattern="yyyy-MM-dd HH:mm" /></tstamp> 45 <xslt 46 classpathref="xslt.classpath" 47 force="true" 48 49 in="${jmeter.result.jtlName}" 50 out="${jmeter.result.htmlName}" 51 style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl"> 52 <!--顯示dateReport的時間--> 53 <param name="dateReport" expression="${report.datestamp}"/> 54 </xslt> 55 <!-- 因為上面生成報告的時候,不會將相關的圖片也一起拷貝至目標目錄,所以,需要手動拷貝 --> 56 <copy todir="${jmeter.result.html.dir}"> 57 <fileset dir="${jmeter.home}/extras"> 58 <include name="collapse.png" /> 59 <include name="expand.png" /> 60 </fileset> 61 </copy> 62 </target> 63 </project>
說明:
文件中style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl"指的是測試報告采用的樣式。讀者可以在jmeter安裝目錄下extras文件夾里看到前綴類似jmeter-results-report的文件,不妨挨個替換進style的值,執行完測試腳本后看一下輸出的測試報告樣式。
jmeter.results.shanhe.me.xsl該樣式是我從網上下載的,默認的報告樣式展示的信息比較少不適合我的項目而已,下載好上傳到extras文件夾即可。
(這個build.xml文件基本可以作為模板使用,只要你按照自己當前的環境改一下文件中少量配置即可。)
(4)上傳測試腳本test_token.jmx和build.xml文件到TestScrip目錄下
(5)ant命令執行測試腳本
進入TestScrip目錄,輸入:ant run(run為build.xml中的target的name名)
(6)查看測試報告
根據bulid.xml文件中定義的測試報告路徑,進入相應目錄即可找到測試報告文件。
<!-- jmeter生成html格式的結果報告的路徑--> <property name="jmeter.result.html.dir" value="/usr/jmeter/apache-jmeter-3.3/TestReport/testToken/html" />
在這里可以看到報告中的request和response兩項沒有數據。修改jmeter/bin目錄下jmeter.properties文件如下部分,我這里都修改成true,這樣執行完腳本后就會保存這些結果到.jtl文件里面:
jmeter.save.saveservice.data_type=true
jmeter.save.saveservice.label=true
jmeter.save.saveservice.response_code=true
# response_data is not currently supported for CSV output
jmeter.save.saveservice.response_data=true
# Save ResponseData for failed samples
jmeter.save.saveservice.response_data.on_error=false
jmeter.save.saveservice.response_message=true
jmeter.save.saveservice.successful=true
jmeter.save.saveservice.thread_name=true
jmeter.save.saveservice.time=true
jmeter.save.saveservice.subresults=true
jmeter.save.saveservice.assertions=true
jmeter.save.saveservice.latency=true
jmeter.save.saveservice.connect_time=true
jmeter.save.saveservice.samplerData=true
jmeter.save.saveservice.responseHeaders=true
jmeter.save.saveservice.requestHeaders=true
jmeter.save.saveservice.encoding=false
jmeter.save.saveservice.bytes=true
jmeter.save.saveservice.url=true
jmeter.save.saveservice.filename=true
jmeter.save.saveservice.hostname=true
jmeter.save.saveservice.thread_counts=true
jmeter.save.saveservice.sample_count=true
jmeter.save.saveservice.idle_time=true
接下來將介紹如何把以上的操作使用jenkins來做持續集成,請關注后續文章。