Jenkins+Jmeter持續集成筆記(二:ANT執行Jmeter腳本)


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>
View Code

說明:

文件中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來做持續集成,請關注后續文章。

 


免責聲明!

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



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