天天看點

DRDS性能評估之Jmeter使用

<b>一. </b><b>jmeter</b><b>概述</b>

       apache jmeter是100%純java桌面應用程式,被設計用來測試用戶端/伺服器結構的軟體。它可以用來測試包括基于靜态和動态資源程式的性能,例如靜态檔案,java servlets,java 對象,資料庫,ftp伺服器等等。jmeter可以用來在一個伺服器、網絡或者對象上模拟重負載來測試它的強度或者分析在不同的負載類型下的全面性能。

       另外,jmeter能夠通過用斷言建立測試腳本來驗證我們的應用程式是否傳回了我們期望的結果,進而幫助我們回歸測試我們的程式。為了最大的靈活性,jmeter允許我們使用正規表達式建立斷言。

<b>測試計劃(test plan)</b>

測試計劃時jmeter測試腳本的根節點,用來描述一個性能測試,包含與本次性能測試所有相關的功能。也就是說本次性能測試的所有内容是基于一個計劃的。

<b></b>

<b>線程組(thread group)</b>

線程組,,可以看做一個虛拟使用者組,線程組中的每個線程都可以了解為一個虛拟使用者。線程組中包含的線程數量在測試執行過程中是不會發生改變的。

<b>取樣器(sampler)</b>

性能測試中向伺服器發送請求,記錄響應資訊,記錄響應時間的最小單元,jmeter 原生支援多種不同的sampler ,如 http request sampler 、 ftp request sample 、tcp request sample 、jdbc request sampler 等,每一種不同類型的 sampler 可以根據設定的參數向伺服器發出不同類型的請求。

<b> </b><b>邏輯控制器(logic controllers)</b>

包括兩類無件,一類是用于控制test plan 中 sampler 節點發送請求的邏輯順序的控制器,常用的有 如果(if)控制器

、switch controller 、runtime controller、循 環控制器等。另一類是用來組織可控制 sampler 來節點的,如 事務控制器、吞吐量控制器。

<b>監聽器(listenters)</b>

用來對測試結果資料進行處理和可視化展示的一系列元件。 圖行結果、檢視結果樹、聚合報告等都是我們經常用到的元件。

<b>配置元件(configuration elements)</b>

用于提供對靜态資料配置的支援。csv data set config 可以将本地資料檔案形成資料池(data pool),而對應于http request sampler和 tcp request sampler等類型的配制無件則可以修改sampler的預設資料。

例如,http cookie manager 可以用于對 http request sampler 的cookie 進行管理

<b>斷言(assertions)</b>

用于檢查測試中得到的相應資料等能否符合預期,斷言一般用來設定檢查點,用以保證性能測試過程中的資料互動能否與預期一緻。

<b>定時器(timers)</b>

用于操作之間設定等待時間,等待時間是性能測試中常用的控制用戶端qps的手端。類似于loadrunner裡面的“思考時間”

<b>前置處理器(pre-processors)</b>

用于在實際的請求發出之前對即将發出的請求進行特殊處理。例如,http url重寫修複符則可以實作url重寫,當rul中有sessionid 一類的session資訊時,可以通過該處理器填充送出請求的實際的sessionid 。

<b>後置處理器(post-processors)</b>

用于對sampler 送出請求後得到的伺服器響應進行處理。一般用來提取響應中的特定資料(類似loadrunner測試工具中的關聯概念)。

<b>二.jmeter安裝</b>

2.目前jmeter最新為3.2版本,下載下傳頁面位址為:

<a href="http://jmeter.apache.org/download_jmeter.cgi">http://jmeter.apache.org/download_jmeter.cgi</a>

DRDS性能評估之Jmeter使用

3.下載下傳後直接解壓,解壓後目錄如下:

DRDS性能評估之Jmeter使用
<b>目錄說明:</b> <b>bin</b> 包含啟動、配置等相關指令 <b>docs</b> 官方本地文檔目錄 <b>extras</b> 輔助庫 <b>lib</b> 核心庫,包含jmeter用到的各種基礎庫和插件 <b>licenses</b> 包含non-asf軟體的許可證 <b>printable_docs</b> 可列印版本文檔目錄 <b>license</b> jmeter許可說明 <b>notice</b> jmeter簡單資訊說明 <b>readme.md</b> jmeter官方基本介紹 <b>主要介紹bin目錄下我們最關注幾個檔案:</b> <b>jmeter.properties </b>jmeter核心配置檔案,各種配置基本在這完成 <b>log4j.conf</b> jmeter日志配置管理 <b>jmeter.log</b> jmeter運作日志記錄,什麼輸出資訊、警告、報錯都在這裡進行了記錄 <b>jmeter.bat</b> windows下jmeter啟動檔案 <b>shutdown.cmd</b> windows下jmeter關閉檔案 <b>jmeter-server.bat</b> windows下jmeter伺服器模式啟動檔案

4.另外drds測試必須下載下傳mysql的jdbc驅動程式包并放到jmeter的lib目錄中,下載下傳位址為:

<a href="https://dev.mysql.com/downloads/connector/j/">https://dev.mysql.com/downloads/connector/j/</a>

DRDS性能評估之Jmeter使用

下載下傳完成并解壓,拷貝驅動程式jar包到jmeter

lib目錄下:

DRDS性能評估之Jmeter使用

<a><b>三.jmeter配置與運作</b></a>

1.要運作jmeter, 運作 jmeter.bat (for windows) 或者 jmeter (for linux)

檔案。那些檔案在bin目錄下。稍微暫停後,jmeter gui會顯示出來。

在bin目錄你發現有些附加腳本很有用。windows腳本檔案(cmd檔案需要win2k或者更新):

jmeter.bat - 運作jmeter(預設在gui模式)

jmeter-n.cmd - 使用一個jmx檔案運作非gui測試

jmeter-n-r.cmd - 使用一個jmx檔案遠端運作一個非gui測試

jmeter-t.cmd - 在gui模式使用一個jmx檔案

jmeter-server.bat - 以伺服器模式啟動jmeter

2.目前jmeter程式預設程序記憶體大小設定512mb,往往不能滿足大并發壓力發起的需求,需要提高單機壓力機配置或部署jmeter壓測叢集。

DRDS性能評估之Jmeter使用

3.直接修改jmeter.properties配置檔案中heap變量,結合壓力機本身配置規格來進行設定,比如2c4g的雲服務我設定的jvm程序大小為3072m.<b></b>

DRDS性能評估之Jmeter使用

<b></b>4.另外,在大規模模拟壓測請求發起時,單機無論從cpu、mem、網絡等資源是無法滿足需求的,這個時候我們就需要部署壓測叢集。壓測叢集由一台控制機器和多台壓力發起機器組成:配置壓力機記憶體及啟動端口,端口配置在jmeter.properties

配置檔案中,修改server_port端口,可以使用預設1099

DRDS性能評估之Jmeter使用

5.運作jmeter-server.bat,以伺服器模式啟動jmeter,啟動完成後通過netstat –an|findstr 1099檢視端口是否啟動

DRDS性能評估之Jmeter使用

7.另外在壓力機上可以配置為開機啟動運作jmeter-server.bat腳本,然後通過生成自定義鏡像的方式,快速複制和部署壓力機。

最後需要配置控制機,打開jmeter.properties檔案修改remote_hosts變量,添加壓力機ip和端口

DRDS性能評估之Jmeter使用

8.在控制機上運作jmeter.bat以gui的方式運作jmeter,點選運作菜單-啟動遠端機,可以看到配置的遠端壓力機;

<b>四.建立drds壓測腳本和場景</b>

<b>1.</b><b>建立測試計劃</b>

DRDS性能評估之Jmeter使用

       一個測試計劃描述了一系列jmeter運作時要執行的步驟。一個完整的測試計劃包含一個或者多個線程組,邏輯控制器,取樣發生控制,監聽器,定時器,斷言和配置元件。

<b>2.</b><b>建立線程組</b>

開始來添加一個線程組:首先選擇這個測試計劃,點選滑鼠右鍵得到添加菜單,然後選擇添加--&gt;線程組。這時應該看到這個線程組已經在測試計劃下了,如果沒有看到,就點選測試計劃元件展開這個測試計劃樹。

DRDS性能評估之Jmeter使用
<b>線程數:</b>等同于并發使用者數 <b>循環次數:</b>一般在腳本調試的時候設定為1或多次,在正式壓測的時候選擇永遠,表示壓測如果沒有手工停止或執行時間未定線程會一直疊代循環執行。 <b>排程器:</b>一般在正式測試的時候會選有,比如測試計劃需要壓測十分鐘,需在持續時間輸入600s,如果需要計劃在固定的時間設定啟動和停止的時間

<a><b> </b></a>

首先選擇jdbc使用者元件,點選滑鼠右鍵,得到添加菜單,然後選擇添加--&gt;配置元件--&gt;jdbc連接配接配置。
DRDS性能評估之Jmeter使用
進入jdbc連接配接配置頁面:
DRDS性能評估之Jmeter使用

<b>綁定到池變量:</b> 這需要能夠唯一辨別這個配置。這是用來被jdbc取樣器識别這個配置來使用.

<b>資料庫url:</b> jdbc: mysql:// <b>ip</b><b>或域名位址</b> : <b>端口</b>/<b>庫名</b>

<b>jdbc驅動類:</b> <b>com.mysql.jdbc.driver</b>

<b>使用者名:</b> 資料庫使用者

<b>密碼: </b>資料庫密碼

線上程組元素上滑鼠右鍵添加jdbc請求采樣器:在jdbc請求采樣器中配置相關資訊:連接配接池資訊、sql執行類型、sql語句、sql參數等。
DRDS性能評估之Jmeter使用

       但有時候測試需要使用不同的變量表模拟不同的插入的記錄/或者查詢語句有不同的查詢條件,這個時候就需要使用到參數化來做,jmeter提供函數助手提供簡單的随機字元串或随機數,或者準備參數化檔案通過__csvread函數讀取檔案中的參數值

<b>随機數生成函數:</b>

DRDS性能評估之Jmeter使用

<b>随機字元串生成函數</b>

DRDS性能評估之Jmeter使用

<b>5.</b><b>壓測調試-添加結果樹、調試設定</b>

       調試運作的時候,需要對jdbc請求發送内容、響應内容和結果進行檢視,請求是否成功;這個時候需要添加察看結果樹:<b>右擊jdbc采樣器-添加-監聽器-察看結果樹</b>

DRDS性能評估之Jmeter使用
調試過程中将線程數和循環次數設定為比較小的值:
DRDS性能評估之Jmeter使用
 點選本機運作調整:
DRDS性能評估之Jmeter使用
調試完成後察看結果樹内容:
DRDS性能評估之Jmeter使用
調試運作結果後,我們可以看到運作結果,主要包含3塊内容:取樣器結果、請求詳細内容、響應詳細内容。
在運作測試之前需添加聚合報告監聽器到測試計劃元素或線程組元素之下,聚合報告主要提供壓測的彙總聚合方面的資料。

<b>點選線程組滑鼠右鍵—添加—監聽器—聚合報告:</b>

DRDS性能評估之Jmeter使用

點選線程組元素--設定壓測運作設定,按測試需求主要設定并發使用者數和壓測場景運作時間:

DRDS性能評估之Jmeter使用

禁用察看結果樹元素,此元素建議在正式壓測前禁用,在發起大力壓測時,此元素會記錄每一個請求的發送和接受資訊導緻控制台機器資源消耗比較大。

DRDS性能評估之Jmeter使用

壓測設定準備完成後,啟動場景:建議隻啟動遠端壓測機,不要啟動本地壓測程序,隻在本地運作控制端就可以;

DRDS性能評估之Jmeter使用

在場景運作期間可以點選聚合報告産看性能壓測名額資料:請求數、響應時間(平均、最大、最小、90%),請求失敗率、每秒請求數等

DRDS性能評估之Jmeter使用

如果運作期間需要手工停止場景可以點選停止運作:

DRDS性能評估之Jmeter使用

<b>7.</b><b>壓測場景按業務模型比例發起壓力</b>

        壓測的時候往往需要去模拟生産業務環境真實的壓力情況,而正是的生産各個業務的請求頻率是不一樣的,往往通過統計分析,我們會得到一個各業務比例的模型。

       在jmeter中我們可以通過吞吐量控制器來模拟,點選線程元素—右擊添加-控制器-吞吐量控制器,然後将需要控制的jdbc請求采樣器放置到吞吐量控制器元素之下,比如截圖中設定運作總次數的百分百為20,比如線程疊代運作腳本100次,這個吞吐量控制器下面的采樣器就運作20次。

DRDS性能評估之Jmeter使用

比如插入和查詢、更新sql語句需要按2:7:1的比例運作場景,就需要建立多個吞吐量控制器:

DRDS性能評估之Jmeter使用

運作測試,通過聚合報告我們可以看到運作的結果,通過請求總數和每秒請求數都可以看出比例是和之前設定的比例一直的。

DRDS性能評估之Jmeter使用