Jenkins+Ant+Git+Jmeter接口自動化

 1、服務器分別安裝JKD、Jenkins、Ant、Git、Jmeterphp

一、JKD安裝參考:https://www.cnblogs.com/xiaoxitest/p/6168045.htmlhtml

二、Jenkins安裝參考:https://www.cnblogs.com/xiaoxitest/p/11947309.htmlshell

三、Ant安裝參考:https://www.cnblogs.com/xiaoxitest/p/11947205.htmlexpress

四、Git安裝參考:https://www.cnblogs.com/xiaoxitest/p/10106302.htmlapache

五、Jmeter安裝參考:https://www.cnblogs.com/xiaoxitest/p/6208940.htmlvim

2、Ant配置安全

一、將jmeter的extras目錄下ant-jmeter-1.1.1.jar文件拷貝到ant的lib目錄下bash

二、建立存放測試報告目錄:/opt/apache-jmeter-5.1.1/report/html 和 /opt/apache-jmeter-5.1.1/report/jtl服務器

三、因爲默認的報告內容不夠豐富,下載style文件:jmeter.results.shanhe.me.xsl,把下載的文件放到jmeter的extras目錄下測試

四、修改jmeter.properties文件以下部分,這樣執行完腳本後就會保存這些結果到.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 # Only available with HttpClient4 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 # Only available with HttpClient4 #jmeter.save.saveservice.sent_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文件:vim /opt/apache-jmeter-5.1.1/report/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="yyyy-MM-dd_HHmm" />
 6     </tstamp>
 7     <!-- 須要改爲本身本地的 Jmeter 目錄-->  
 8     <property name="jmeter.home" value="/opt/apache-jmeter-5.1.1" />
 9     <!-- jmeter生成jtl格式的結果報告的路徑--> 
10     <property name="jmeter.result.jtl.dir" value="/opt/apache-jmeter-5.1.1/report/jtl" />
11<!-- jmeter生成html格式的結果報告的路徑-->
12     <property name="jmeter.result.html.dir" value="/opt/apache-jmeter-5.1.1/report/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     <target name="run">
19         <antcall target="test" />
20         <antcall target="report" />
21     </target>
22     
23     <target name="test">
24         <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
25         <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
26              <!-- 聲明要運行的腳本。"*.jmx"指包含此目錄下的全部jmeter腳本-->
27             <testplans dir="/opt/apache-jmeter-5.1.1/test" includes="*.jmx" />
28             <property name="jmeter.save.saveservice.output_format" value="xml"/>
29         </jmeter>
30     </target>
31     
32     <path id="xslt.classpath">
33         <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
34         <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
35     </path> 
36     
37     <target name="report">
38         <tstamp><format property="report.datestamp" pattern="yyyy/MM/dd HH:mm"/></tstamp>
39         <xslt 40               classpathref="xslt.classpath"
41  force="true"
42  in="${jmeter.result.jtlName}"
43  out="${jmeter.result.htmlName}"
44  style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl">
45 
46               
47               <param name="dateReport" expression="${report.datestamp}"/>
48         </xslt>
49                 <!-- 由於上面生成報告的時候,不會將相關的圖片也一塊兒拷貝至目標目錄,因此,須要手動拷貝 --> 
50         <copy todir="${jmeter.result.html.dir}">
51             <fileset dir="${jmeter.home}/extras">
52                 <include name="collapse.png" />
53                 <include name="expand.png" />
54             </fileset>
55         </copy>
56     </target>
57 </project>

 3、jenkins配置

下載插件 HTML Publisher Plugin
下載插件 email extension plugin(可選)、performance plugin

 一、新建job

二、選擇構建記錄要保留的天數或個數

 三、配置多套測試環境

 四、配置Git,從Git拉取最新腳本

 五、定時構建,當前設置爲:每週一至週五,早上10點至下午18點,每隔1小時構建一次

 六、爲方便查看,這裏選擇把將時間戳添加到控制檯輸出

 七、在/opt/apache-jmeter-5.1.1/test目錄下建立3個不一樣的shell腳本文件,分別爲test1,test2和test3,目的是更改jmeter腳本文件中用戶定義的變量啓用和禁用來切換環境,根據本身設置的名稱填寫

 

vim /opt/apache-jmeter-5.1.1/test/test1

sed -i 's/testname="用戶定義的變量-test1" enabled="false"/testname="用戶定義的變量-test1" enabled="true"/g' /opt/apache-jmeter-5.1.1/test/test.jmx sed -i 's/testname="用戶定義的變量-test2" enabled="true"/testname="用戶定義的變量-test2" enabled="false"/g' /opt/apache-jmeter-5.1.1/test/test.jmx sed -i 's/testname="用戶定義的變量-test3" enabled="true"/testname="用戶定義的變量-test3" enabled="false"/g' /opt/apache-jmeter-5.1.1/test/test.jmx

 

vim /opt/apache-jmeter-5.1.1/test/test2

sed -i 's/testname="用戶定義的變量-test1" enabled="true"/testname="用戶定義的變量-test1" enabled="false"/g' /opt/apache-jmeter-5.1.1/test/test.jmx sed -i 's/testname="用戶定義的變量-test2" enabled="false"/testname="用戶定義的變量-test2" enabled="true"/g' /opt/apache-jmeter-5.1.1/test/test.jmx sed -i 's/testname="用戶定義的變量-test3" enabled="true"/testname="用戶定義的變量-test3" enabled="false"/g' /opt/apache-jmeter-5.1.1/test/test.jmx

 

vim /opt/apache-jmeter-5.1.1/test/test3

sed -i 's/testname="用戶定義的變量-test1" enabled="true"/testname="用戶定義的變量-test1" enabled="false"/g' /opt/apache-jmeter-5.1.1/test/test.jmx sed -i 's/testname="用戶定義的變量-test2" enabled="true"/testname="用戶定義的變量-test2" enabled="false"/g' /opt/apache-jmeter-5.1.1/test/test.jmx sed -i 's/testname="用戶定義的變量-test3" enabled="false"/testname="用戶定義的變量-test3" enabled="true"/g' /opt/apache-jmeter-5.1.1/test/test.jmx

 

八、新建兩個shell文件,刪除舊的報告,只保留最新的10個

vim /opt/apache-jmeter-5.1.1/report/rm_html

#!/bin/bash #保留文件數 ReservedNum=10 FileDir=/opt/apache-jmeter-5.1.1/report FileNum=$(ls -l  $FileDir/*.html |grep ^- |wc -l) while(( FileNum > ReservedNum)) do OldFile=$(ls -rt $FileDir/*.html| head -1) echo "Delete File:" $OldFile rm -f $OldFile let "FileNum--" done

 

vim /opt/apache-jmeter-5.1.1/report/rm_jtl

#!/bin/bash #保留文件數 ReservedNum=10 FileDir=/opt/apache-jmeter-5.1.1/report FileNum=$(ls -l  $FileDir/*.jtl |grep ^- |wc -l) while(( FileNum > ReservedNum)) do OldFile=$(ls -rt $FileDir/*.html| head -1) echo "Delete File:" $OldFile rm -f $OldFile let "FileNum--" done

九、增長構建步驟,執行shell,刪除舊的測試報告和根據選擇的環境,執行不一樣的shell腳本

十、增長構建步驟,Execute system Groovy script(報告顯示非HTML格式時配置該選項)

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")

十一、增長構建步驟,invoke Ant,選擇本身配置的ant和build.xml文件路徑

 十二、增長構建步驟,再次選擇執行shell,由於不管報告結果是否正確,jenkins都會認爲構建成功,咱們斷言執行結果的jtl文件,若是存在斷言失敗,就認爲構建失敗

內容以下,根據本身路徑填寫:

#!/bin/bash file=$(ls -t /opt/apache-jmeter-5.1.1/report/jtl/*.jtl | head -1) if grep -qE "<failure>true</failure>" $file ;then echo "Build Fail" exit 1 else echo "Build Success" exit 0 fi

1三、增長構建後操做,用來查看測試報告

 1四、配置釘釘通知,只在構建失敗時通知。因爲前面設置過,若是斷言失敗就當作構建失敗處理,因此若是構建失敗,就存在接口執行不經過,須要關注接口不經過緣由,不須要每次執行經過也要去看。

 

附:釘釘access token查看

進入釘釘羣,選擇添加機器人-自定義-添加-複製Webhook連接(釘釘通知只填寫access_token=後面部分)-安全設置(選擇自定義關鍵字:構建)-完成

 

1五、接口測試不經過,發送通知

 

1六、生成多個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="detail" value="_detail" /> <property name="jmeter.result.jtlNamedetail" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" /> <property name="jmeter.result.htmlNamedetail" value="${jmeter.result.html.dir}/${ReportName}${time}${detail}.html" />

另在原先報告下新增一個xslt標籤

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

        <xslt classpathref="xslt.classpath" force="true"
              in="${jmeter.result.jtlNamedetail}" out="${jmeter.result.htmlNamedetail}" style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl">
             <param name="dateReport" expression="${report.datestamp}"/>
        </xslt>

運行成功後會生成兩個html報告

 

 第一個彙總報告

 

第二個詳細報告

 

相關文章
相關標籤/搜索