Jmeter+Ant+Jenkins搭建持續集成的接口測試(推薦 Mark)


 

轉自:http://my.oschina.net/hellotest/blog/516079

 

一、Jmeter+ant

1、首先我們默認Jmeter腳本已經錄制好了,並測試通過,存在(查詢模塊.jmx)腳本 

2、將 JMeter所在目錄下extras子目錄里的ant-JMeter-1.1.1.jar復制到Ant所在目錄lib子目錄之下,這樣Ant運行時才能找 到"org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"這個類,從而成功觸發JMeter腳本      

3、jmeter默認保存的是.csv格式的文件,所以我們先要設置一下bin/jmeter.properties文件內容,保存

    jmeter.save.saveservice.output_format=xml

4、主要邏輯思路:運行D:\jemeterTest\script下面的.jmx腳本,生成.jtl文件放入 

      D:\jemeterTest\resultLog\jtl文件中,ant在將相應的文件轉換為對應的html文件放入D:\jemeterTest\resultLog\html中

   build.xml文件中的內容如下: 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<? xml  version = "1.0"  encoding = "utf-8" ?>
< project  name = "JmeterTest"  default = "all"  basedir = "." >
     < tstamp >
         < format  property = "time"  pattern = "yyyyMMddhhmm"  />
     </ tstamp >
     <!-- 需要改成自己本地的 Jmeter 目錄-->
     < property  name = "jmeter.home"  value = "D:\soft\apache-jmeter-2.9"  />
     <!-- jmeter生成jtl格式的結果報告的路徑-->
     < property  name = "jmeter.result.jtl.dir"  value = "D:\jemeterTest\resultLog\jtl"  />
     <!-- jmeter生成html格式的結果報告的路徑-->
     < property  name = "jmeter.result.html.dir"  value = "D:\jemeterTest\resultLog\html"  />
     <!-- 生成的報告的前綴 -->
     < property  name = "ReportName"  value = "TestReport"  />
     < 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"  />
     <!-- 接收測試報告的郵箱 -->
     < property  name = "mail_to"  value = "LIUCHAO448@pingan.com.cn"  />
     <!-- 電腦地址 -->
     < property  name = "ComputerName"  value = "jkqsh-l0285"  />
     < 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"指包含此目錄下的所有jmeter腳本 -->
             < testplans  dir = "D:\jemeterTest\script"  includes = "*.jmx"  />
         </ jmeter >
     </ target >
     < target  name = "report" >
         < xslt  in = "${jmeter.result.jtlName}"  out = "${jmeter.result.htmlName}"  style = "${jmeter.home}/extras/jmeter-results-detail-report_90Line.xsl"  />
         <!-- 因為上面生成報告的時候,不會將相關的圖片也一起拷貝至目標目錄,所以,需要手動拷貝 -->
         < copy  todir = "${jmeter.result.html.dir}" >
             < fileset  dir = "${jmeter.home}/extras" >
                 < include  name = "collapse.png"  />
                 < include  name = "expand.png"  />
             </ fileset >
         </ copy >
     </ target >
     <!-- 發送郵件 -->
</ project >

 

 

        

        切換到D:\jemeterTest目錄下,輸入ant查看運行結果

        

         

         運行前

                

        運行后

            

        瀏覽器打開HTML文件,顯示正確

             

           

 

二、Jmeter+ant+Jenkins

        1、下載Jenkins安裝

        2、命令行切換到jenkins.war的根目錄,輸入 java -jar jenkins.war

                

        3、瀏覽器輸入地址http://localhost:8080/顯示界面,安裝成功

         

            4、新建一個任務並配置

            

         

        5、配置參數

                

          舊的構建保存了你在一次構建中的所有臨時文件,如果構建沒有保留的必要,就勾選丟棄舊的構建,同時設置保持構建天使和保持構建的最大個數兩個參數。

          注意:三個設置必須同時設置,否則無效

        6、設置定時運行間隔,這里,設置間隔時間為15分鍾運行一次

                    

        7、設置invoke ant,完成后點擊保存

                        

        8、點擊立即構建,就可以調用ant,執行打包過程。在這里,也就是執行生成測試報告的步驟

         

                

    

三、Tomcat配置虛擬目錄

    在tomcat文件夾的conf/Catalina/localhost(對於Tomcat6版本及其以上,需要自己創建catalina和localhost這兩個文件夾)下新建一個xml文件。

    內容為:

?
1
2
3
4
5
<? xml  version = "1.0"  encoding = "UTF-8" ?> 
< Context 
     docBase = "換成你的路徑" 
     reloadable = "true"
</ Context >

    文件名改成你自己的譬如http://localhost:8080/infces ,文件名就為infces.xml

    其他配置:

    打開 Tomcat/conf/web.xml 文件,找到:

    <init-param>

    <param-name>listings</param-name>

    <param-value>false</param-value>

    </init-param>

    把false設成true保存,重啟Tomcat,讓tomcat支持文件列表顯示

    輸入地址:http://localhost:8080/infces/

    顯示如下:

 

 

前期條件:存在Jmeter聚合測試報告TestReport201510100244.jtl

    1、Ant安裝

                 下載ant地址

                 配置環境變量

                 

                 命令行窗口輸入ant

                 

                安裝成功

   2、將Jmeter保存的xml格式的聚合報告TestReport201510100244.jtl,放到相應的文件夾中

            文件夾目錄結構:

            D:\jemeterTest

            

    3、編輯build.xml文件

        

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<? xml  version = "1.0"  encoding = "utf-8" ?>
< project  name = "JmeterTest"  default = "all"  basedir = "." >
     <!-- 需要改成自己本地的 Jmeter 目錄-->
     < property  name = "jmeter.home"  value = "D:\soft\apache-jmeter-2.9"  />
     <!-- jmeter生成jtl格式的結果報告的路徑-->
     < property  name = "jmeter.result.jtl.dir"  value = "D:\jemeterTest\resultLog\jtl"  />
     <!-- jmeter生成html格式的結果報告的路徑-->
     < property  name = "jmeter.result.html.dir"  value = "D:\jemeterTest\resultLog\html"  />
     <!-- jtl文件-->
     < property  name = "jmeter.result.jtlName"  value = "${jmeter.result.jtl.dir}/TestReport201510100244.jtl"  />
     <!-- 生成HTML文件 -->
     < property  name = "jmeter.result.htmlName"  value = "${jmeter.result.html.dir}/TestReport201510100244.html"  />
     < target  name = "all" >
         < antcall  target = "report"  />
     </ target >
     < target  name = "report" >
         < xslt  in = "${jmeter.result.jtlName}"  out = "${jmeter.result.htmlName}" >
         <!-- Jmeter自帶的XSLT樣式表在目錄extras下面--> style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl" /&gt;</ xslt >
     </ target >
</ project >

4、切換到D:\jemeterTest目錄下,輸入ant查看運行結果在D:\jemeterTest\resultLog\html目錄下生成TestReport201510100244.html文件

    

            

            

5、打開TestReport201510100244.html文件

        

6、發現Min Time和Max Time盡然沒有顯示出來顯示的Nan

            這個問題比較奇葩,我的初步定為思路如下

            1)首先我先看一下Jmeter自帶的XSLT樣式表問題

                  將TestReport201510100244.jtl文件的第二行加入

                    <?xml-stylesheet type="text/xsl" href="D:/soft/apache-jmeter-2.9/extras/jmeter-results-detail-report_21.xsl"?>

                    用瀏覽器打開顯示正常,初步排除了XSLT樣式表問題

                            

                    

        2)編寫java程序,用程序去調取jmeter-results-detail-report_21.xsl,運行,發現報錯,提示

                致命錯誤: "無法編譯樣式表", 

      從網上找到了解決方案,要下載一個xalan.jar,serializer.jar包放到項目中即可解決這個問題

        3)將這兩個jar包入ant的lib再次切換到D:\jemeterTest目錄下,輸入ant查看運行結果,在D:\jemeterTest\resultLog\html目錄下生成TestReport201510100244.html文件,使用瀏覽器查看,OK,顯示了!

            

7、拓展顯示功能

        我們發現在界面上沒有顯示,90%line,這個性能指標項,在這里我們需要修改XSLT樣式表,jmeter-results-detail-report_21.xsl增加部分內容后的文件如下:

        

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<!--.......................其他內容略....................................-->
<!-- New add 90% line -->
< 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" >
                 < xsl:sort  data-type = "number"  order = "descending"  />
                 < xsl:if  test = "position() =$postion" >
                     < xsl:value-of  select = "number(.)"  />
                 </ xsl:if >
             </ xsl:for-each >
         </ xsl:otherwise >
     </ xsl:choose >
</ xsl:template >
<!--.......................其他內容略....................................-->

 

 

        注:90%Line邏輯(網上找的釋疑)

                一組數由小到大進行排列,找到他的第90%個數(假如是10),那么這個數組中有90%的數將小於等於120

                用在性能測試的響應時間也將非常有意義,也就是90%用戶響應時間不會超過12 

    1)修改build.xml文件中的內容style="${jmeter.home}/extras/jmeter-results-detail-report_90Line.xsl" 然后切換到D:\jemeterTest目錄下,輸入ant查看運行結果,在 

           D:\jemeterTest\resultLog\html目錄下生成TestReport201510100244.html文件,成功了!

 

             

 

 

准備工作:

1.java的運行環境正常,及運行java -version、javac -version能正常輸出java版本;

2.ant的運行環境正常,使用ant需要配置環境變量,編輯/etc/profile,在結尾處添加:

export ANT_HOME="/export/servers/ant"

 

export PATH="/export/servers/ant/bin":$PATH

保存退出后,執行命令source /etc/profile使環境變量即可生效。

3.將JMeter所在目錄下extras子目錄里的ant-JMeter- 1.1.1.jar復制到Ant所在目錄lib子目錄之下,這樣Ant運行時才能找 到"org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"這個類,從而成功觸發JMeter腳本

配置build.xml:

將本猿編寫的jmetertool.tar.gz上傳到服務器並解壓,編輯其中的build.xml:

 

Xml代碼   收藏代碼
  1. <project name="autotest" default="all" basedir=".">     
  2.         <!-- 需要改成自己本地的 Jmeter 目錄-->  
  3.         <property name="jmeter.home" value="/export/servers/jmeter"/>  
  4.         <!-- jmeter生成jtl格式的結果報告的路徑-->  
  5.         <property name="jmeter.result.jtl.dir" value="${basedir}/jtl" />  
  6.         <!-- jmeter生成html格式的結果報告的路徑-->  
  7.         <property name="jmeter.result.html.dir" value="${basedir}/html" />  
  8.         <!-- jmeter生成csv格式的結果報告的路徑-->  
  9.         <property name="jmeter.result.csv.dir" value="${basedir}/csv" />  
  10.         <!-- 編譯后class文件目錄 -->  
  11.         <property name="classes" value="${basedir}/classes"/>  
  12.         <!-- 生成的報告的前綴-->  
  13.         <property name="ReportName" value="TestTomNgx"/>  
  14.         <!-- 參數-->  
  15.         <property name="threads1" value="5" />  
  16.         <property name="threads2" value="5" />  

 修改其中的jmeter目錄一定要修改成你本地所在的目錄,根據需要修改ReportName以及線程數。

 

 

Xml代碼   收藏代碼
  1. <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl"><testplans dir="${basedir}" includes="test.jmx"/>  

 上傳被測的jmx文件到當前目錄,並修改build.xml中的jmx文件名。

 

為了能夠動態修改壓測的線程數,我們使用vi命令打開被測的jmx文件:

 

Xml代碼   收藏代碼
  1. <stringProp name="ThreadGroup.num_threads">${__P(request.threads1)}</stringProp>  

 將線程數設置項改為該參數,名字與build.xml中的對應即可。

 

 

Xml代碼   收藏代碼
  1. <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl">  
  2.                 <testplans dir="${basedir}" includes="testbaidu.jmx"/>  
  3.                 <property name="jmeter.save.saveservice.output_format" value="csv"/>  
  4.              <property name="jmeter.save.saveservice.response_message" value="false" />  
  5.                 <jvmarg value="-Xincgc"/>  
  6.                 <jvmarg value="-Xms1024m"/>  
  7.                 <jvmarg value="-Xmx1024m"/>  
  8.                 <property name="request.threads1" value="${threads1}"/>  
  9.                 <property name="request.threads2" value="${threads2}"/>  

參數 ${threads1}、${threads2}當前默認值是5個線程,可自行修改。

 

開始壓測:

做完上面的工作,運行命令ant或者ant -Dthreads=8 -Dthreads=3即可,會自動啟動jmeter進行壓測,jmeter運行完畢后,會自動執行將生成的jtl文件分析為csv文件的工作,執行完畢后會有類似如下輸出:



 同時當前目錄會自動創建jtl、html、csv三個文件夾:



 

查看結果:

那么問題來了,我們怎么查看壓測的結果呢?很簡單,在當前機器上配置一個tomcat,將當前的目錄(我的是/export/servers/jmeter/script)配置為tomcat的虛擬目錄,在tomcat的web.xml中找到

<init-param>
            <param-name>listings</param-name>
            <param-value>true</param-value>
</init-param>

設置為true以開啟目錄瀏覽功能。好了,我們訪問該tomcat即可,http://ip:port/html。



 每執行一次測試,都會自動建立一個文件夾,點進相應的文件夾,有幾個接口就會html,點擊相應的html我們就可以看到圖表方式的TPS、響應時間等。



 

 

批量定時運行:

使用linux的crontab命令即可,crontab -e 每行添加一條ant命令例如:

30 1 11 * * ant -Dthreads1=8 Dthreads2=6

30 2 11 * * ant -Dthreads1=16 Dthreads2=12

或者使用at命令也很方便,從此再也不用因為加班到很晚而得罪老婆大人了,第二天早上來打開瀏覽器看結果就行。

 

如果需要多機負載的話,在<jmeter jmeterhome="${jmeter.home}" runremote="true" resultlog="${jmeter.result.jtl.dir}/${ReportNam

e}${time}.jtl">

然后修改jmeter/bin目錄下的jmeter.propties即可


免責聲明!

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



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