搭建這個效能測試框架是希望能夠讓每個人(開發人員、測試人員)都能快速的進行效能測試,而不需要關注效能測試環境搭建過程。因為,往往配置一個效能環境可能需要很長的時間。
1、效能測試流程
該效能測試框架工作的流程主要有:觸發測試–>部署測試指令碼–>部署被測系統–>Jmeter打壓–>被測系統日誌分析,5個階段。
體現在Jenkins上,就是下面這個jenkins 的MultiJob Project——Performance-test-jobs:
注意:在選擇Performance-test-jobs的構建步驟時,要選擇Conditional steps(multiple)。
下面對該效能測試框架搭建的過程進行詳細的介紹。
2、環境需求
整個測試框架需要以下機器:
1)jenkins master:用於管理測試機、建立效能測試job、啟動效能測試、展示效能測試結果。
2)Load generator:用來給被測試伺服器傳送請求,當一臺Load generator傳送的併發請求數達不到測試要求時,可能需要配置多臺。Setup ENV階段的Performance-test-script-deployment以及Run test階段的job都是執行在這機器上的。
3)被測試伺服器:用於安裝被測試服務的機器,分析被測試服務的log的job也是執行在這個機器上的。
其中,Load generator和被測試伺服器都是作為slave節點掛載在jenkins master上的。
3、安裝必要軟體
3.1、安裝Jenkins及外掛
安裝Jenkins的步驟,這裡不展開講了。這裡主要介紹一下與效能測試有關的jenkins外掛——Performance Plugin。這個外掛的作用是解析Jmeter生成的測試報告,直觀的展示出來。
安裝外掛的方法很簡單,登陸Jenkins,在Manage Plugins介面搜尋“Performance Plugin”點選安裝即可。
如果安裝正確,在效能測試job的配置頁面的 “Add post-build action” 步驟裡面能夠看到 “Publish Performance Test Result Report” 選項。
3.2、Jmeter安裝及配置
在效能測試壓力機上,下載並安裝Jmeter(下載地址:http://jmeter.apache.org/download_jmeter.cgi),解壓到目錄/usr/local。[下載二進位制的]
之後,下載jmeter-plugins外掛JMeterPlugins-Standard-1.2.0.zip(下載地址http://jmeter-plugins.org/downloads/all/)。
解壓後將其中的jar包拷貝至jmeter安裝目錄/lib/ext/目錄(如果沒有則建立之)下即可。
這個外掛的作用是,當通過no-GUI方式執行測試之後,將生成的測試結果檔案*.jtl解析成圖片的形式,比較直觀。
3.3、安裝系統資源監控外掛
為了監控被測伺服器的系統資源,需要在被測試機上安裝ServerAgent,下載ServerAgent-2.2.1.zip(下載地址http://jmeter-plugins.org/downloads/all/),並在被測試機上啟動startAgent.sh。該外掛能夠對伺服器的 CPU、記憶體、Swap、磁碟 I/O、網路 I/O 進行監控!
4、Jmeter GUI上制定測試計劃
我們的測試執行實在Jenkins中通過非GUI方式執行Jmeter壓力測試的。在JmeterGUI上制定測試計劃的目的是,將測試計劃儲存成.jmx檔案,以便能夠在Jmeter的非GUI模式下執行測試。
4.1、建立Thread Group
有三個必須設定的屬性(見下圖紅框部分),這裡採用函式__P()設定屬性名和預設值的形式設定這三個屬性,以方便在使用no-GUI模式啟動Jmeter進行測試時,使用–jmeterproperty選項對屬性值進行賦值。
4.2、新增HTTP Request
由於我們的測試是傳送HTTP請求給Serving伺服器,因此這裡選擇新增的Sampler是HTTP Request。
這裡需要新增被測伺服器的域名或者網址,這裡也採用函式__P()設定屬性名和預設值的形式設定這個屬性。
另外,還要設定請求的具體地址Path。由於我們測試過程中請求的網址是不一樣的。因此需要需要對這個Path進行引數化,指定為變數${path}。又由於我們請求的網址是存放到一個叫作path.log的檔案中的。因此,引數化的方法適宜採用CSV Data Set Config。這裡Filename我們設定為屬性UrlFile,該屬性可以在使用no-GUI模式啟動Jmeter進行測試時,使用–jmeterproperty選項指定具體的檔案。
4.3、新增Listener
在TestPlan上右擊,Add–>Listener–>Aggregate Report。
另外,新增了PerfMon Metrics Collector的Listner,來收集被測試機的CPU,memory資訊。
可以指定將report儲存到某個檔案,如上圖中所示儲存到jtl檔案,在非GUI模式下執行Jmeter這是非常必要的。
4.4、生成測試計劃jmx檔案
一切設定妥當之後,點選選單欄上的File->Save Test Plan As.
此步驟可以將該Test Plan儲存為.jmx格式的檔案。該檔案用來進行non-GUI方式進行Jmeter測試。
5、non-GUI方式執行Jmeter
non-GUI方式執行Jmeter的命令:
jmeter.sh -n -t test.jmx -l result.jtl \ --jmeterproperty threadCount=${CONCURRENCY} \ --jmeterproperty LoopCount=${LOOPCOUNT} \ --jmeterproperty adclient=${SERVER} \ --jmeterproperty UrlFile=path.log \ --jmeterproperty RampUp=${RAMPUP} \ --jmeterproperty throughput=${THROUGHPUT}
說明:
-n 非 GUI 模式 -> 在非 GUI 模式下執行 JMeter
-t 測試檔案 -> 要執行的 JMeter 測試指令碼檔案
-l 日誌檔案 -> 記錄結果的檔案
–jmeterproperty設定test.jmx中的屬性(見“Jmeter GUI上制定測試計劃”部分)
6、生成報告圖表
我們可以通過Jenkins上安裝的JMeterPlugins-Standard外掛來將測試結果檔案.jtl格式的檔案解析成圖表。
$JMETEREXT= /usr/local/apache-jmeter-2.13/lib/ext java -jar $JMETEREXT/CMDRunner.jar --tool Reporter \ --generate-png ResponseTimesOverTime.png --input-jtl result.jtl --plugin-type ResponseTimesOverTime java -jar $JMETEREXT/CMDRunner.jar --tool Reporter \ --generate-png CPU.png --input-jtl cpu.jtl --plugin-type PerfMon java -jar $JMETEREXT/CMDRunner.jar --tool Reporter \ --generate-png MEM.png --input-jtl mem.jtl --plugin-type PerfMon java -jar $JMETEREXT/CMDRunner.jar --tool Reporter \ --generate-png TransactionsPerSecond.png --input-jtl trans.jtl --plugin-type TransactionsPerSecond
7、job shell設定
Jenkins的job中通過引數傳遞給jmeterproperty中的變數中。
Execute shell的內容:
source /etc/profile THROUGHPUT=`expr 60 \* ${QPS}` RUNFOLDER=/usr/local/jmeter-demo/src/test/jmeter JMETERBIN=/usr/local/apache-jmeter-2.13/bin JMETEREXT=/usr/local/apache-jmeter-2.13/lib/ext RESULTJTL=$RUNFOLDER/result.jtl CPUJTL=$RUNFOLDER/cpu.jtl MEMJTL=$RUNFOLDER/mem.jtl TRANSJTL=$RUNFOLDER/trans.jtl rm -f $RUNFOLDER/path.log rm -f $RUNFOLDER/*.jtl rm -f $RUNFOLDER/*.png rm -f $WORKSPACE/*.png rm -f $WORKSPACE/*.jtl cd /usr/local/jmeter-demo/src/test/jmeter && python appending.py ${APPENDING} cd /usr/local/jmeter-demo/src/test/jmeter && $JMETERBIN/jmeter.sh -n -t test.jmx -l result.jtl \ --jmeterproperty threadCount=${CONCURRENCY} \ --jmeterproperty LoopCount=${LOOPCOUNT} \ --jmeterproperty adclient=${SERVER} \ --jmeterproperty UrlFile=path.log \ --jmeterproperty RampUp=${RAMPUP} \ --jmeterproperty throughput=${THROUGHPUT} java -jar $JMETEREXT/CMDRunner.jar --tool Reporter --generate-png ${RESULTJTL%.*}_ResponseTimesOverTime.png --input-jtl $RESULTJTL --plugin-type ResponseTimesOverTime java -jar $JMETEREXT/CMDRunner.jar --tool Reporter --generate-png ${CPUJTL%.*}_CPU.png --input-jtl $CPUJTL --plugin-type PerfMon java -jar $JMETEREXT/CMDRunner.jar --tool Reporter --generate-png ${MEMJTL%.*}_MEM.png --input-jtl $MEMJTL --plugin-type PerfMon java -jar $JMETEREXT/CMDRunner.jar --tool Reporter --generate-png ${TRANSJTL%.*}_TransactionsPerSecond.png --input-jtl $TRANSJTL --plugin-type TransactionsPerSecond cp /usr/local/jmeter-demo/src/test/jmeter/*.png $WORKSPACE cp /usr/local/jmeter-demo/src/test/jmeter/result.jtl $WORKSPACE
本文轉自:http://blog.csdn.net/liuchunming033/article/details/52186157 感謝分享