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報告
第一個彙總報告
第二個詳細報告