搭建持續集成接口測試平臺(Jenkins+Ant+Jmeter)

1、環境準備:

一、JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.htmlphp

二、Jmeter:http://jmeter.apache.org/download_jmeter.cgihtml

三、Ant:http://ant.apache.org/bindownload.cgijava

四、Jenkins:http://jenkins-ci.org/node

具體可參見我另外一篇博客:http://www.cnblogs.com/puresoul/p/4808416.htmlexpress

  

2、Jemter腳本準備:apache

一、腳本目錄:D:\B_TOOLS\apache-jmeter-2.13\demooracle

二、腳本內容:都是簡單的訪問百度或google首頁post

baidu.jmx                      google.jmx測試

 

 

3、ANT的build.xml代碼準備:優化

build3.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 
 8     <property environment="env"/>
 9     <property name="ReportName" value="TestReport" />
10     <!-- 須要改爲本身本地的 Jmeter 目錄--> 
11     <property name="jmeter.home" value="D:\B_TOOLS\apache-jmeter-2.13" />
12     <!-- jmeter生成jtl、html格式的結果報告的路徑--> 
13     <property name="jmeter.result.dir" value="${env.WORKSPACE}/results/${env.BUILD_ID}" />
14     <!-- 生成的報告的前綴-->  
15     <property name="jmeter.result.jtlName" value="${jmeter.result.dir}/${ReportName}.jtl" />
16     <property name="jmeter.result.htmlName" value="${jmeter.result.dir}/${ReportName}.html" />
17     
18     <target name="run">
19         <echo message="start..."/>
20         <antcall target="clean" />
21         <antcall target="test" />
22         <antcall target="report" />
23     </target>
24     
25     <target name="clean">
26         <mkdir dir="${env.WORKSPACE}/results/${env.BUILD_ID}" />
27     </target>
28         
29     <target name="test">
30         <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
31         <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
32             <!-- 聲明要運行的腳本"*.jmx"指包含此目錄下的全部jmeter腳本-->
33             <testplans dir="D:\B_TOOLS\apache-jmeter-2.13\demo" includes="*.jmx" />
34             
35             <property name="jmeter.save.saveservice.output_format" value="xml"/>
36         </jmeter>
37     </target>
38         
39     <target name="report">
40         <xslt in="${jmeter.result.jtlName}"
41               out="${jmeter.result.htmlName}"
42               style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl" />
43         <!-- 由於上面生成報告的時候,不會將相關的圖片也一塊兒拷貝至目標目錄,因此,須要手動拷貝 --> 
44         <copy todir="${jmeter.result.dir}">
45             <fileset dir="${jmeter.home}/extras">
46                 <include name="collapse.png" />
47                 <include name="expand.png" />
48             </fileset>
49         </copy>
50     </target>
51 </project>
複製代碼

  

4、配置Jenkins Job並運行:

一、job配置以下:

二、job運行結果: 

複製代碼
 1 Started by user anonymous
 2 Building in workspace D:\B_TOOLS\jenkins\jobs\TestJenkins\workspace
 3 [demo] $ cmd.exe /C '"ant.bat -file build3.xml run && exit %%ERRORLEVEL%%"'
 4 Buildfile: build3.xml
 5 
 6 run:
 7      [echo] start...
 8 
 9 clean:
10     [mkdir] Created dir: D:\B_TOOLS\jenkins\jobs\TestJenkins\workspace\results\15
11 
12 test:
13    [jmeter] Executing test plan: D:\B_TOOLS\apache-jmeter-2.13\demo\baidu.jmx ==> D:\B_TOOLS\jenkins\jobs\TestJenkins\workspace\results\15\TestReport.jtl
14    [jmeter] Creating summariser <summary>
15    [jmeter] Created the tree successfully using D:\B_TOOLS\apache-jmeter-2.13\demo\baidu.jmx
16    [jmeter] Starting the test @ Tue Sep 22 15:50:33 CST 2015 (1442908233010)
17    [jmeter] Waiting for possible shutdown message on port 4445
18    [jmeter] summary +      1 in     1s =    2.0/s Avg:   254 Min:   254 Max:   254 Err:     0 (0.00%) Active: 1 Started: 1 Finished: 0
19    [jmeter] summary +      5 in     1s =    7.3/s Avg:   131 Min:    96 Max:   196 Err:     0 (0.00%) Active: 0 Started: 1 Finished: 1
20    [jmeter] summary =      6 in   1.2s =    5.0/s Avg:   151 Min:    96 Max:   254 Err:     0 (0.00%)
21    [jmeter] Tidying up ...    @ Tue Sep 22 15:50:34 CST 2015 (1442908234310)
22    [jmeter] ... end of run
23    [jmeter] Executing test plan: D:\B_TOOLS\apache-jmeter-2.13\demo\google.jmx ==> D:\B_TOOLS\jenkins\jobs\TestJenkins\workspace\results\15\TestReport.jtl
24    [jmeter] Creating summariser <summary>
25    [jmeter] Created the tree successfully using D:\B_TOOLS\apache-jmeter-2.13\demo\google.jmx
26    [jmeter] Starting the test @ Tue Sep 22 15:50:35 CST 2015 (1442908235240)
27    [jmeter] Waiting for possible shutdown message on port 4445
28    [jmeter] summary +      1 in     1s =    1.9/s Avg:   253 Min:   253 Max:   253 Err:     1 (100.00%) Active: 1 Started: 1 Finished: 0
29    [jmeter] summary +      5 in   1.1s =    4.4/s Avg:   209 Min:    97 Max:   420 Err:     0 (0.00%) Active: 0 Started: 1 Finished: 1
30    [jmeter] summary =      6 in     2s =    3.6/s Avg:   216 Min:    97 Max:   420 Err:     1 (16.67%)
31    [jmeter] Tidying up ...    @ Tue Sep 22 15:50:36 CST 2015 (1442908236992)
32    [jmeter] ... end of run
33 
34 report:
35      [xslt] Processing D:\B_TOOLS\jenkins\jobs\TestJenkins\workspace\results\15\TestReport.jtl to D:\B_TOOLS\jenkins\jobs\TestJenkins\workspace\results\15\TestReport.html
36      [xslt] Loading stylesheet D:\B_TOOLS\apache-jmeter-2.13\extras\jmeter-results-detail-report_21.xsl
37      [copy] Copying 2 files to D:\B_TOOLS\jenkins\jobs\TestJenkins\workspace\results\15
38 
39 BUILD SUCCESSFUL
40 Total time: 5 seconds
41 [workspace] $ cmd /c call D:\Users\heman793\AppData\Local\Temp\hudson4765606743104861298.bat
42 
43 D:\B_TOOLS\jenkins\jobs\TestJenkins\workspace>echo D:\B_TOOLS\jenkins\jobs\TestJenkins\workspace 
44 D:\B_TOOLS\jenkins\jobs\TestJenkins\workspace
45 
46 D:\B_TOOLS\jenkins\jobs\TestJenkins\workspace>echo 15 
47 15
48 
49 D:\B_TOOLS\jenkins\jobs\TestJenkins\workspace>cd results 
50 
51 D:\B_TOOLS\jenkins\jobs\TestJenkins\workspace\results>cd 15 
52 
53 D:\B_TOOLS\jenkins\jobs\TestJenkins\workspace\results\15>exit 0 
54 Finished: SUCCESS
複製代碼

三、在job的workspace目錄下會生成結果報告:

四、TestReport.html:

更新補充:

  上面生成的報告有以下兩個問題,解決辦法參見Jmeter自帶報告優化(一)

  一、Date report這裏的時間沒有正確顯示出來

  二、Summary裏的字段Min Time和Max Time顯示的是NaN,沒有顯示正確的時間。

 

5、配置發送郵件功能

 一、自已寫一個發送郵件的功能並打成sendmail.jar包,放在job的workspace目錄中

 二、jenkins增長構建步驟

  a)進入到測試報告的目錄

  b) 調用sendmail.jar命令發送郵件

 說明:

  一、由build3.xml的第十二、13行可知,報告文件生成目錄爲:${env.WORKSPACE}/results/${env.BUILD_ID},因此這裏我要先cd到具體執行的那個build_id目錄下。

   二、咱們也能夠把上面的兩行命令寫在成一個批處理文件,例如我第1步有個sendmail.bat文件就是的,而後調用時直接寫sendmail.bat就行了。

 

另外,我本文全部腳本都在我本地,其實更好的辦法是使用SVN統一管理,這裏就不介紹了,感受的能夠本身研究下。

做者:Glen.He 
出處:http://www.cnblogs.com/puresoul/ 
本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。

 

Jmeter默認報告優化

 

1、本文目的:

  以前寫了兩篇文章搭建持續集成接口測試平臺(Jenkins+Ant+Jmeter)ANT批量執行Jmeter腳本,功能實現上都沒有什麼問題,可是最後生成的報告有一點小問題,雖然不影響使用,但老是感受不夠完美,具體問題以下:

  一、Date report這裏的時間沒有正確顯示出來

  二、Summary裏的字段Min Time和Max Time顯示的是NaN,沒有顯示正確的時間。

本文主要解決上述兩個問題,具體報告如何生成可參考上面提到的兩篇文章。

 

2、Jmeter+Ant報告生成原理:

  在解決問題以前,讓咱們先弄清楚Jmeter+Ant是生成報告的原理,知道原理後咱們就能夠很從容的解決問題了。另外,若是後續咱們想定製報告也就很容易了。

  一、在Jmeter的extras目錄下,官方已經爲咱們提供了一個現成的實例,咱們只須要在該目錄下執行ant命令就能夠生成一個數據文件Test.jtl和一個報告Test.html(PS:若是沒有安裝ant須要先去安裝,不會用ant的自行百度)。

  二、知道了上一步後,接下來咱們研究的重點就是extras目錄下的build.xml文件了,具體研究細節就不在此細說了,由於這就部份內容屬於ant的範圍,有須要的能夠自行補充下ant的知識。

 

3、解決問題:

一、找到extras目錄下build.xml文件內容的以下部分:它的做用就是把生成的.jtl數據文件轉換爲.html格式的報告

具體屬性的含義:

  • in:生成的.jtl文件的路徑
  • out:生成的.html文件的路徑
  • style:從.jtl轉換成.html所使用的樣式,這些文件也在extras目錄下,這個是最重要的部分,若是咱們想定製報告能夠自行定義這個文件或者從網上找一些合適的文件。
  • param:參數,這幾個參數能夠在style中使用,下面會講到。
  • path:添加jar包的路徑,在下面的target中有引用到(下面第9行)。
複製代碼
 1     <path id="xslt.classpath">//jar的路徑
 2         <fileset dir="${lib.dir}" includes="xalan*.jar"/>
 3         <fileset dir="${lib.dir}" includes="serializer*.jar"/>
 4     </path>
 5    //把生成的.jtl數據文件轉換成.html格式的報告
 6     <target name="xslt-report" depends="_message_xalan">
 7         <tstamp><format property="report.datestamp" pattern="yyyy/MM/dd HH:mm"/></tstamp>
 8         <xslt
 9             classpathref="xslt.classpath"
10             force="true"
11             in="${testpath}/${test}.jtl"
12             out="${testpath}/${test}.html"
13             style="${basedir}/jmeter-results-detail-report${style_version}.xsl">
14             <param name="showData" expression="${show-data}"/>
15             <param name="titleReport" expression="${report.title}"/>
16             <param name="dateReport" expression="${report.datestamp}"/>
17         </xslt>
18     </target>
複製代碼

二、經過上面的分析,style 文件是整成報告轉換的關鍵,那咱們就打開jmeter-results-detail-report_21.xsl這個文件看看,找到以下幾行,這裏也定義了三個參數跟build.xml文件中同樣,由此可猜想,咱們只要在build.xml文件中定義dateReport這個參數和值,在style中就能夠按以下方式使用,通過測試證實猜想是正確的,那麼第一個問題就解決了:

1 <xsl:param    name="showData" select="'n'"/>
2 <xsl:param    name="titleReport" select="'Load Test Results'"/>
3 <xsl:param    name="dateReport" select="'date not defined'"/>

三、對於第二個問題,其實把第1步中的代碼複製到咱們本身的build.xml文件中後,能夠一併解決這兩個問題。解決第二個老是的關鍵代碼是第9行和第10行:

  classpathref="xslt.classpath"

  force="true"

而第9行又引用了第1~4行

四、到此,兩個問題都解決了,最終修改後的build.xml文件以下,標黃是解決老是添加的代碼:

複製代碼
<?xml version="1.0" encoding="UTF-8"?>
<project name="ant-jmeter-test" default="run" basedir=".">
    <!-- 須要改爲本身本地的 Jmeter 目錄-->  
    <property name="jmeter.home" value="/Users/Tools/Jmeter" />
    <property name="report.title" value="接口測試"/>
    <!-- jmeter生成jtl格式的結果報告的路徑--> 
    <property name="jmeter.result.jtl.dir" value="/Users/Desktop/jmx/report" />
    <!-- jmeter生成html格式的結果報告的路徑-->
    <property name="jmeter.result.html.dir" value="/Users/Desktop/jmx/report" />
    <!-- 生成的報告的前綴-->  
    <property name="ReportName" value="TestReport" />
    <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}.jtl" />
    <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}.html" />

    <target name="run">
        <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="/Users/Desktop/jmx" includes="*.jmx" />
            
            <property name="jmeter.save.saveservice.output_format" value="xml"/>
        </jmeter>
    </target>
        
    <path id="xslt.classpath">
        <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
        <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
    </path>


    <target name="report">
        <tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp>
        <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}"/>
       </xslt>

                <!-- 由於上面生成報告的時候,不會將相關的圖片也一塊兒拷貝至目標目錄,因此,須要手動拷貝 --> 
        <copy todir="${jmeter.result.html.dir}">
            <fileset dir="${jmeter.home}/extras">
                <include name="collapse.png" />
                <include name="expand.png" />
            </fileset>
        </copy>
    </target>

</project>
複製代碼

五、修改後的報告:

 

做者:Glen.He 
出處:http://www.cnblogs.com/puresoul/ 
本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。

Jmeter報告優化之New XSL stylesheet

 Jmeter默認的報告展現的信息比較少,若是出錯了,不是很方便定位問題。由Jmeter默認報告優化這篇文章可知,其實由.jtl格式轉換爲.html格式的報告過程當中,style文件起了很關鍵的做用。下面介紹另外一種style文件的使用方法:

一、下載style文件:jmeter.results.shanhe.me.xsl

二、把下載的文件放到jmeter的extras目錄下。

三、修改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
複製代碼

四、修改build.xml文件,以下第7行style的值修改成新下載的xsl文件名:

複製代碼
 1 <target name="report" depends="_message_xalan">
 2   <xslt
 3     classpathref="xslt.classpath"
 4     force="true"
 5       in="${testpath}/${test}.jtl"
 6       out="${testpath}/${test}.html"
 7       style="${basedir}/jmeter-results-shanhe-me.xsl">
 8     <param name="showData" expression="${show-data}"/>
 9   </xslt>
10 </target>
複製代碼

五、執行腳本,生成報告以下,明顯感受展現的內容比以前的報告多不少,定位問題也比較方便直觀:

 

參考:

https://testerhome.com/topics/3773

http://shanhe.me/node/18/314


做者:Glen.He 
出處:http://www.cnblogs.com/puresoul/ 本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。

相關文章
相關標籤/搜索