閱讀672 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

16ef6831adc433d59699af8c9716d7d2a1a51597

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

f701ca258fbff653458b7abd870533890ae5fa7e

目錄說明:

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/

5a7d8474d2f8cf18441cb8068350f3e6863bd624
下載完成並解壓,拷貝驅動程序Jar包到Jmeter Lib目錄下:

975599cd4f6fcf1a137cb9c6009475c752c7f710

三.Jmeter配置與運行

要運行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

     目前Jmeter程序默認進程內存大小設置512Mb,往往不能滿足大並發壓力發起的需求,需要提高單機壓力機配置或部署Jmeter壓測集群。

ca70a49fda4d450e5743434059b7c2929b51da49

     直接修改jmeter.properties配置文件中HEAP變量,結合壓力機本身配置規格來進行設置,比如2C4G的雲服務我設置的JVM進程大小為3072M.

f2b2f858414b7d3b515c9fd80d43ec4658f787e7

     另外,在大規模模擬壓測請求發起時,單機無論從CPU、MEM、網絡等資源是無法滿足需求的,這個時候我們就需要部署壓測集群。壓測集群由一台控製機器和多台壓力發起機器組成:

      配置壓力機內存及啟動端口,端口配置在jmeter.properties 配置文件中,修改server_port端口,可以使用默認1099

72c26ec95e345dfd8f8770480e7e3c1bd358a7cf

運行jmeter-server.bat,以服務器模式啟動JMeter,啟動完成後通過netstat –an|findstr 1099查看端口是否啟動

acb25f084e900cb89ed85c13b55ded4cacd6cb96

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

最後需要配置控製機,打開jmeter.properties文件修改remote_hosts變量,添加壓力機IP和端口

853917aae342e79626f4e7e6f7b8689bf2fae571

在控製機上運行jmeter.bat以GUI的方式運行Jmeter,點擊運行菜單-啟動遠程機,可以看到配置的遠程壓力機;

四.創建DRDS壓測腳本和場景

1.創建測試計劃

a1b6ca06d71aeeea3549d8001cf6955ec3c8187f

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

2.創建線程組

處理每個JMeter測試計劃的第一步就是添加線程組元件。這個線程組會告訴JMeter想要模擬的用戶數量,用戶應該發送請求的頻率和應該發送的數量。

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

e530cdc4f1b9b253c286da0b855ebce034cec809

線程數:等同於並發用戶數

循環次數:一般在腳本調試的時候設置為1或多次,在正式壓測的時候選擇永遠,表示壓測如果沒有手工停止或執行時間未定線程會一直迭代循環執行。

調度器:一般在正式測試的時候會選有,比如測試計劃需要壓測十分鍾,需在持續時間輸入600s,如果需要計劃在固定的時間設置啟動和停止的時間

3.添加JDBC連接池配置元件

首先選擇JDBC用戶元件,點擊鼠標右鍵,得到添加菜單,然後選擇添加-->配置元件-->JDBC連接配置。

 1143954976c3ee5b41134ad7e734d13d8b288f49

 

進入JDBC連接配置頁麵:

478ee2e22e704649da03f172b1852d3574025de1

  • 綁定到池變量: 這需要能夠唯一標識這個配置。這是用來被JDBC取樣器識別這個配置來使用.
  • 數據庫URL: jdbc: mysql://  IP或域名地址 : 端口/庫名
  • JDBC驅動類: com.mysql.jdbc.Driver
  • 用戶名: 數據庫用戶
  • 密碼: 數據庫密碼

4.添加JDBC采樣器

在線程組元素上鼠標右鍵添加JDBC請求采樣器:


在JDBC請求采樣器中配置相關信息:連接池信息、SQL執行類型、SQL語句、SQL參數等。

 44fff9a24d9bd1a0cdc2809d652299c48c7f6c8e

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

隨機數生成函數:

398e60836b95c4734af95671d40738e5d36f611c

隨機字符串生成函數

79d3e46587629399fe4eda01dfcdbf6d06ae09ad

5.壓測調試-添加結果樹、調試設置

調試運行的時候,需要對JDBC請求發送內容、響應內容和結果進行查看,請求是否成功;這個時候需要添加察看結果樹:右擊JDBC采樣器-添加-監聽器-察看結果樹

4aafa657eef2baa9350fce74ae1c30ad0146d98c

調試過程中將線程數和循環次數設置為比較小的值:

1bcf779f01441161d085fc9434fcd5ba08d431b2

點擊本機運行調整:

44c1b57022fa509220bf0927c8184b256fb4fee2

調試完成後察看結果樹內容:

9d827fe52b90d71cec0eed9bc619a5fe4fe84534

調試運行結果後,我們可以看到運行結果,主要包含3塊內容:取樣器結果、請求詳細內容、響應詳細內容。

6.壓測運行-添加集合報告、運行設置

在運行測試之前需添加聚合報告監聽器到測試計劃元素或線程組元素之下,聚合報告主要提供壓測的匯總聚合方麵的數據。

點擊線程組鼠標右鍵—添加—監聽器—聚合報告:

1163a44b023669a23f53efc57adbd1a44bca6523

點擊線程組元素--設置壓測運行設置,按測試需求主要設置並發用戶數和壓測場景運行時間:

d7f9bec960beac9eff8f4c3725a54d5d2abe2f54

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

4aafa657eef2baa9350fce74ae1c30ad0146d98c

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

c7041dda918bda06eb0d93df09dbb61c526b226b

在場景運行期間可以點擊聚合報告產看性能壓測指標數據:請求數、響應時間(平均、最大、最小、90%),請求失敗率、每秒請求數等

d00df91e762ba972e49cba84b97e0afaa0a287f0

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

2450d01b2343f46bd0543d3de1040d7544e78693

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

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

在Jmeter中我們可以通過吞吐量控製器來模擬,點擊線程元素—右擊添加-控製器-吞吐量控製器,然後將需要控製的JDBC請求采樣器放置到吞吐量控製器元素之下,比如截圖中設置運行總次數的百分百為20,比如線程迭代運行腳本100次,這個吞吐量控製器下麵的采樣器就運行20次。

b32cdf23ba0ae71af9cac61f1619ff54990eedee

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

58a706747309dcaf7ba963ed7384ef9559853324

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

90800a8b2f286d24b513baaf227175e3f88e05a3

最後更新:2017-07-19 16:02:48

  上一篇:go  智慧城市的背後是大數據的深度挖掘和利用
  下一篇:go  雲計算的綠色節能與智能PDU有關?