DRDS性能評估之Jmeter使用
一. Jmeter概述
1.Jmeter介紹
Apache JMeter是100%純java桌麵應用程序,被設計用來測試客戶端/服務器結構的軟件(例如HTTP/FTP應用程序或者數據庫)。它可以用來測試包括基於靜態和動態資源程序的性能,例如靜態文件,Java Servlets,Java 對象,數據庫,FTP 服務器等等。JMeter可以用來在一個服務器、網絡或者對象上模擬重負載來測試它的強度或者分析在不同的負載類型下的全麵性能。
另外,JMeter能夠通過用斷言創建測試腳本來驗證我們的應用程序是否返回了我們期望的結果,從而幫助我們回歸測試我們的程序。為了最大的靈活性,JMeter允許我們使用正則表達式創建斷言。
2.Jmeter常用術語
測試計劃(Test Plan)
測試計劃時Jmeter測試腳本的根節點,用來描述一個性能測試,包含與本次性能測試所有相關的功能。也就是說本次性能測試的所有內容是基於一個計劃的。
線程組(Thread Group)
線程組,,可以看做一個虛擬用戶組,線程組中的每個線程都可以理解為一個虛擬用戶。線程組中包含的線程數量在測試執行過程中是不會發生改變的。
取樣器(Sampler)
性能測試中向服務器發送請求,記錄響應信息,記錄響應時間的最小單元,JMeter 原生支持多種不同的sampler ,如 HTTP Request Sampler 、 FTP Request Sample 、TCP Request Sample 、JDBC Request Sampler 等,每一種不同類型的 sampler 可以根據設置的參數向服務器發出不同類型的請求。
邏輯控製器(Logic Controllers)
包括兩類無件,一類是用於控製test plan 中 sampler 節點發送請求的邏輯順序的控製器,常用的有 如果(If)控製器 、switch Controller 、Runtime Controller、循 環控製器等。另一類是用來組織可控製 sampler 來節點的,如 事務控製器、吞吐量控製器。
監聽器(Listenters)
用來對測試結果數據進行處理和可視化展示的一係列元件。 圖行結果、查看結果樹、聚合報告等都是我們經常用到的元件。
配置元件(Configuration Elements)
用於提供對靜態數據配置的支持。CSV Data Set config 可以將本地數據文件形成數據池(Data Pool),而對應於HTTP Request Sampler和 TCP Request Sampler等類型的配製無件則可以修改Sampler的默認數據。
例如,HTTP Cookie Manager 可以用於對 HTTP Request Sampler 的cookie 進行管理
斷言(Assertions)
用於檢查測試中得到的相應數據等能否符合預期,斷言一般用來設置檢查點,用以保證性能測試過程中的數據交互能否與預期一致。
定時器(Timers)
用於操作之間設置等待時間,等待時間是性能測試中常用的控製客戶端QPS的手端。類似於LoadRunner裏麵的“思考時間”
前置處理器(Pre-Processors)
用於在實際的請求發出之前對即將發出的請求進行特殊處理。例如,HTTP URL重寫修複符則可以實現URL重寫,當RUL中有sessionID 一類的session信息時,可以通過該處理器填充發出請求的實際的sessionID 。
後置處理器(Post-Processors)
用於對Sampler 發出請求後得到的服務器響應進行處理。一般用來提取響應中的特定數據(類似LoadRunner測試工具中的關聯概念)。
二.Jmeter安裝
首選需要安裝Java運行環境,請參考: https://jingyan.baidu.com/article/ab69b270c01a4d2ca7189f8c.html
目前Jmeter最新為3.2版本,下載頁麵地址為:
https://jmeter.apache.org/download_jmeter.cgi
下載後直接解壓,解壓後目錄如下:
目錄說明:
bin 包含啟動、配置等相關命令
docs 官方本地文檔目錄
extras 輔助庫
lib 核心庫,包含JMeter用到的各種基礎庫和插件
licenses 包含non-ASF軟件的許可證
printable_docs 可打印版本文檔目錄
LICENSE JMeter許可說明
NOTICE JMeter簡單信息說明
README.md JMeter官方基本介紹
主要介紹bin目錄下我們最關注幾個文件:
jmeter.properties JMeter核心配置文件,各種配置基本在這完成
log4j.conf JMeter日誌配置管理
jmeter.log JMeter運行日誌記錄,什麼輸出信息、警告、報錯都在這裏進行了記錄
jmeter.bat windows下jmeter啟動文件
shutdown.cmd windows下jmeter關閉文件
stoptest.cmd windows下jmeter測試停止文件
jmeter-server.bat windows下jmeter服務器模式啟動文件
注:每一個.cmd文件都對應一個.sh文件,.sh是Linux下的對應功能的文件
另外DRDS測試必須下載Mysql的JDBC驅動程序包並放到Jmeter的Lib目錄中,下周地址為:
https://dev.mysql.com/downloads/connector/j/
下載完成並解壓,拷貝驅動程序Jar包到Jmeter
Lib目錄下:
要運行JMeter, 運行 jmeter.bat (for Windows) 或者 jmeter (for Linux) 文件。那些文件在bin目錄下。稍微暫停後,JMeter GUI會顯示出來。
在bin目錄你發現有些附加腳本很有用。Windows腳本文件(CMD文件需要Win2K或者更新):
|
目前Jmeter程序默認進程內存大小設置512Mb,往往不能滿足大並發壓力發起的需求,需要提高單機壓力機配置或部署Jmeter壓測集群。
直接修改jmeter.properties配置文件中HEAP變量,結合壓力機本身配置規格來進行設置,比如2C4G的雲服務我設置的JVM進程大小為3072M.
另外,在大規模模擬壓測請求發起時,單機無論從CPU、MEM、網絡等資源是無法滿足需求的,這個時候我們就需要部署壓測集群。壓測集群由一台控製機器和多台壓力發起機器組成:
配置壓力機內存及啟動端口,端口配置在jmeter.properties 配置文件中,修改server_port端口,可以使用默認1099
運行jmeter-server.bat,以服務器模式啟動JMeter,啟動完成後通過netstat –an|findstr 1099查看端口是否啟動
另外在壓力機上可以配置為開機啟動運行jmeter-server.bat腳本,然後通過生成自定義鏡像的方式,快速複製和部署壓力機。
最後需要配置控製機,打開jmeter.properties文件修改remote_hosts變量,添加壓力機IP和端口
在控製機上運行jmeter.bat以GUI的方式運行Jmeter,點擊運行菜單-啟動遠程機,可以看到配置的遠程壓力機;
四.創建DRDS壓測腳本和場景
1.創建測試計劃
一個測試計劃描述了一係列Jmeter運行時要執行的步驟。一個完整的測試計劃包含一個或者多個線程組,邏輯控製器,取樣發生控製,監聽器,定時器,斷言和配置元件。
2.創建線程組
處理每個JMeter測試計劃的第一步就是添加線程組元件。這個線程組會告訴JMeter想要模擬的用戶數量,用戶應該發送請求的頻率和應該發送的數量。
開始來添加一個線程組:首先選擇這個測試計劃,點擊鼠標右鍵得到添加菜單,然後選擇添加-->線程組。這時應該看到這個線程組已經在測試計劃下了,如果沒有看到,就點擊測試計劃元件展開這個測試計劃樹。
線程數:等同於並發用戶數
循環次數:一般在腳本調試的時候設置為1或多次,在正式壓測的時候選擇永遠,表示壓測如果沒有手工停止或執行時間未定線程會一直迭代循環執行。
調度器:一般在正式測試的時候會選有,比如測試計劃需要壓測十分鍾,需在持續時間輸入600s,如果需要計劃在固定的時間設置啟動和停止的時間
3.添加JDBC連接池配置元件
首先選擇JDBC用戶元件,點擊鼠標右鍵,得到添加菜單,然後選擇添加-->配置元件-->JDBC連接配置。
進入JDBC連接配置頁麵:
- 綁定到池變量: 這需要能夠唯一標識這個配置。這是用來被JDBC取樣器識別這個配置來使用.
- 數據庫URL: jdbc: mysql:// IP或域名地址 : 端口/庫名
- JDBC驅動類: com.mysql.jdbc.Driver
- 用戶名: 數據庫用戶
- 密碼: 數據庫密碼
4.添加JDBC采樣器
在線程組元素上鼠標右鍵添加JDBC請求采樣器:
在JDBC請求采樣器中配置相關信息:連接池信息、SQL執行類型、SQL語句、SQL參數等。
但有時候測試需要使用不同的變量表模擬不同的插入的記錄/或者查詢語句有不同的查詢條件,這個時候就需要使用到參數化來做,Jmeter提供函數助手提供簡單的隨機字符串或隨機數,或者準備參數化文件通過__CSVRead函數讀取文件中的參數值
隨機數生成函數:
隨機字符串生成函數
5.壓測調試-添加結果樹、調試設置
調試運行的時候,需要對JDBC請求發送內容、響應內容和結果進行查看,請求是否成功;這個時候需要添加察看結果樹:右擊JDBC采樣器-添加-監聽器-察看結果樹
調試過程中將線程數和循環次數設置為比較小的值:
點擊本機運行調整:
調試完成後察看結果樹內容:
調試運行結果後,我們可以看到運行結果,主要包含3塊內容:取樣器結果、請求詳細內容、響應詳細內容。
6.壓測運行-添加集合報告、運行設置
在運行測試之前需添加聚合報告監聽器到測試計劃元素或線程組元素之下,聚合報告主要提供壓測的匯總聚合方麵的數據。
點擊線程組鼠標右鍵—添加—監聽器—聚合報告:
點擊線程組元素--設置壓測運行設置,按測試需求主要設置並發用戶數和壓測場景運行時間:
禁用察看結果樹元素,此元素建議在正式壓測前禁用,在發起大力壓測時,此元素會記錄每一個請求的發送和接受信息導致控製台機器資源消耗比較大。
壓測設置準備完成後,啟動場景:建議隻啟動遠程壓測機,不要啟動本地壓測進程,隻在本地運行控製端就可以;
在場景運行期間可以點擊聚合報告產看性能壓測指標數據:請求數、響應時間(平均、最大、最小、90%),請求失敗率、每秒請求數等
如果運行期間需要手工停止場景可以點擊停止運行:
7.壓測場景按業務模型比例發起壓力
壓測的時候往往需要去模擬生產業務環境真實的壓力情況,而正是的生產各個業務的請求頻率是不一樣的,往往通過統計分析,我們會得到一個各業務比例的模型。
在Jmeter中我們可以通過吞吐量控製器來模擬,點擊線程元素—右擊添加-控製器-吞吐量控製器,然後將需要控製的JDBC請求采樣器放置到吞吐量控製器元素之下,比如截圖中設置運行總次數的百分百為20,比如線程迭代運行腳本100次,這個吞吐量控製器下麵的采樣器就運行20次。
比如插入和查詢、更新SQL語句需要按2:7:1的比例運行場景,就需要創建多個吞吐量控製器:
運行測試,通過聚合報告我們可以看到運行的結果,通過請求總數和每秒請求數都可以看出比例是和之前設置的比例一直的。
最後更新:2017-07-19 16:02:48