jenkins+ant+jmeter實現自動化集成 for mac
一、jmeter
今天來學習jmeter+ant+jenkins自動化環境部署,網上提供了很多教程介紹,Windows版本的,mac版的,很多。每一篇都大概看了,也跟着操作但還是會卡在某個環節,可能是我比較笨吧,感覺很多教程介紹的不是很詳細,有些步驟略過了,導致我部署環境遇到了很多問題。記錄下來,邊學習邊鞏固,而且之後會用到的。
1.jmeter安裝
到jmeter官網:https://jmeter.apache.org/ 下載jmeter zip包
下載比較簡單,下載好後解壓。我放在了application目錄下
之後打開.bash_profile文件來配置環境變量,終端/iTerm執行
open /Users/xws/.bash_profile(換成你的路徑名)
配置jmeter的環境變量,之後就可以任意訪問jmeter
export JMETER=/Applications/apache-jmeter-5.1.1#(換成你的路徑名)
export CLASSPATH=$JMETER/lib/ext/ApacheJMeter_core.jar:$JMETER/lib/jorphan.jar:$JMETER/lib/logkit-2.0.jar:$CLASSPATH
export PATH=$PATH:$JMETER/bin
終端/iTerm輸入jmeter -v看到下面這個就代表配置成功啦
看,之後啓動只要在終端輸入jmeter回車就可以啓動了(懶人必備?)
iTerm或終端中輸入:jmeter
啓動jmeter的GUI mode
二、ant運行 jmeter腳本
首先還是要下載好ant,如何下載自行百度。下載好之後跟着我的步驟來操作。
配置
1)將 jmeter的extras目錄中ant-jmeter-1.1.1.jar包拷貝至ant安裝目錄下的lib目錄中,該包相當於是ant和jmeter連接的橋樑,作用是使Ant運行時能夠找到"org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"這個類,從而成功觸發JMeter腳本
2)修改Jmeter的bin目錄下jmeter.properties文件的配置:jmeter.save.saveservice.output_format=xml
作用是使Jmeter報告輸出文件格式爲xml
3)在jmeter安裝目錄下新建文件夾demo,在demo下新建文件夾report,report下再新建jtl和html文件夾,html和jtl文件夾的作用:
html文件夾:用於保存html的結果報告
jtl文件夾:用於保存jmeter的測試腳本
(一開始jtl和html文件夾下都是空的,我這截圖有,是因爲我執行了ant命令之後生成的)
4)安裝驗證,終端輸入
ant -version
build.xml:Ant根據該文件運行jmeter腳本(關鍵文檔,需要配置正確)
它的作用就是把生成的.jtl數據文件轉換爲.html格式的報告
具體屬性的含義:
in:生成的.jtl文件的路徑
out:生成的.html文件的路徑
style:從.jtl轉換成.html所使用的樣式,這些文件也在extras目錄下,這個是最重要的部分,如果我們想定製報告可以自行定義這個文件或者從網上找一些合適的文件。
build.xml通用模版如下:
<?xml version="1.0" encoding="UTF-8"?>
<project name="ant-jmeter-test" default="run" basedir=".">
<tstamp>
<format property="time" pattern="yyyyMMddHHmm" />
</tstamp>
<!-- 需要改成自己本地的Jmeter目錄-->
<property name="jmeter.home" value="/Applications/apache-jmeter-5.1.1" />
<!-- jmeter生成jtl格式的結果報告的路徑-->
<property name="jmeter.result.jtl.dir" value="/Applications/apache-jmeter-5.1.1/demo/report/jtl" />
<!-- jmeter生成html格式的結果報告的路徑-->
<property name="jmeter.result.html.dir" value="/Applications/apache-jmeter-5.1.1/demo/report/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" />
<!-- 輸出生成的報告名稱和存放路徑-->
<echo message="${jmeter.result.jtlName}"/>
<echo message="${jmeter.result.htmlName}"/>
<echo message="${jmeter.result.html.dir}"/>
<target name="run">
<antcall target="test"/>
<antcall target="report"/>
</target>
<!-- 指定ant-jmeter-1.1.1.jar 的位置 -->
<path id="jmeter.classpath">
<fileset dir="${jmeter.home}/extras">
<include name="ant-jmeter-1.1.1.jar"/>
</fileset>
</path>
<!--加載jar包,解決顯示時間問題-->
<path id="xslt.classpath">
<fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
<fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
</path>
<target name="test">
<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
<jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
<!-- 聲明要運行的腳本。"*.jmx"指包含此目錄下的所有jmeter腳本,比如test*。jmx表示以test開頭的所有.jmx文件-->
<testplans dir="/Applications/apache-jmeter-5.1.1/demo" includes="*.jmx" />
<!-- 聲明ant執行jmeter時,傳入jmeter的屬性值,可以自定義必須是xml格式 -->
<property name="jmeter.save.saveservice.output_format" value="xml"/>
</jmeter>
</target>
<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">
<!--jmeter-results-detail-report_21.xsl這裏的文件名可以換成你想要的報告效果-->
<!--顯示dateReport的時間-->
<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>
根據個人環境的不同,上述需要修改的模版參數爲:
這個build.xml文件的配置比較重要,我一開始配置錯了,一直build failed。後來發現網上覆制的build.xml模板缺漏,我補上了這一段最後才成功
<!-- 指定ant-jmeter-1.1.1.jar 的位置 -->
<path id="jmeter.classpath">
<fileset dir="${jmeter.home}/extras">
<include name="ant-jmeter-1.1.1.jar"/>
</fileset>
</path>
5)準備要要運行的項目,放在demo目錄下
6) 運行。我的build.xml文件放在demo目錄下,所以先終端切換到該目錄
# 終端cd到demo目錄
cd /Applications/apache-jmeter-5.1.1/demo
# 之後運行
ant
# 或者
ant run
二、jenkins部署
1.安裝jenkins
可參考我的這篇文章jenkins下載安裝
2.安裝後,新建一個自由風格的項目
源碼管理
因爲需要用到ANT和JDK,所以需要在jenkins中添加插件,選擇點擊“系統管理”,之後在Global Tool Configuration的界面看到ant和jdk選項,然後將自己本地的ANT和JDK地址填寫上
填寫你本地的ant_home(若忘記了的童鞋可以打開你的系統變量配置哦,mac 用open .bash_profile在終端打開,可看到你配置的路徑,複製過來即可)
構建Ant,調用ant的build.xml配置文件
之後點擊”增加構建後操作步驟”(要安裝HTML publish插件)沒有安裝點擊時看不到此插件,如下
找到manage jenkins -->Global Tool Configuration
在插件過濾篩選,安裝即可
安裝後可以看見Publish HTML report
之後在項目點擊build now
生成的報告如下
前面提到,build.xml文件中可以修改報告的樣式模板。如圖,以下是更爲詳細的報
告,增加了TPS和90%用戶體驗數據。
- TPS:每秒事務數=執行請求的總數/執行的總時間
執行的總時間=最後一個請求開始的時間-第一個請求開始的時間+最後一個請求的執行時間即(endTime-startTime+lastTime) - 用戶體驗數據的算法規則:將所有統計的響應時間從小到大排列,選取對應比例位置的數據
當一組數升序排列好後,選出第9X%位,那就意味着前9X%個數字都小於等於它,也就代表着改組數據中有9X%的數小於等於該數字。
因此:
- 90%line就代表該組數據中有90%的數字小於等於該值
- 95%line就代表該組數據中有95%的數字小於等於該值
- 99%line就代表該組數據中有99%的數字小於等於該值
因此用在性能測試上,將顯得十分的有意義。
比如:在響應時間中,代表着一組請求中,9X%請求響應不會超過該值。可以有效的進行性能評估。
最終的報告樣式
這樣的報告能更好地滿足我們對性能分析的要求了
用jmeter打開jtl文件,可以對比生成的html報告,可以發現兩者對應字段的數據是一致的。
是不是有點亞子了呢?
jmeter-results-detail-report_22.xsl文件請戳
還有更好看的報告樣式呢,請看我的這篇
接下來主要講講我在整個過程中遇到的問題,執行過程中沒有遇到問題的童鞋,恭喜你,你真的很不錯???
因爲粗心或是不熟悉的原因難免在寫jmeter-report-detail-result_文件時犯了很多小錯誤,在控制檯會輸出哪裏錯誤,但我還是找了很久,在這裏把我所犯的錯貼出來,興許會有和我一樣迷糊的童鞋,能幫助你快速找到錯誤原因。
在構建過程中,控制檯輸出以下的錯
然而我其他的都是用小寫的,大家要注意檢查一下
好吧,我忘記在文件中添加display-tps的格式了,這是我自定義的,然而卻沒有把這個格式也添加好,報錯了
解決方法:添加這一段代碼:
<!-- add new display-tps格式 -->
<xsl:template name="display-tps">
<xsl:param name="value" />
<xsl:value-of select="format-number($value,'0.00 /sec')" />
</xsl:template>
添加在哪裏呢?看我截圖,可以幫助你定位到準確的位置
最坑的就是這個錯了,找了好久
根據控制檯輸出的還是很能幫助我們定位到問題所在的。
好了,希望本文能幫到你~