JMeter簡單的使用(3.0 )-效能測試(壓力)

JMeter簡單的使用(3.0 )-效能測試(壓力)

JMeter簡單的效能測試使用介紹

工作需要,寫了一份JMeter簡單使用的文件,刪改部分工作相關的圖,應該沒大影響。

下載JMeter

下載原始Jmeter檔案

最新的3.1的下載地址如下

Windows下:

http://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-3.1.zip

Linux下:

http://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-3.1.tgz
下載後解壓檔案即可,注意JMeter需要java環境。

安裝必要外掛jmeter-plugins(windows下)

下載外掛管理器

http://www.jmeter-plugins.org/get/
將下載所得的jar包放在{jmeter}/bin/lib/ext目錄下

開啟GUI模式下的jmeter下載所需外掛

選擇選單欄中的“選項”,選擇“Plugings Manager”,如圖
這裡寫圖片描述

選擇所需外掛安裝

開啟外掛管理器後選擇Available Plugings,勾選3 Basic Graph 以及Custom Thread Groups,點選Apply Changes and Restart JMeter,等待下載完成重啟JMeter即可。
這裡寫圖片描述

安裝必要外掛jmeter-plugins(Linux下)

查詢並複製jar包

在windows的介面下,安裝好外掛後,根據上圖的Review Changes中的資訊,在{jmeter}/bin/lib/ext中找到新增jar包,複製到linux上。

使用JMeter測試

GUI模式下測試介面

新增執行緒組

在GUI模式,開啟JMeter。右鍵點選“測試計劃”,選擇“新增”→“Threads(Users)”→“執行緒組”,如圖所示:
這裡寫圖片描述

新增HTTP請求

執行緒組屬性不做修改,右鍵點選新新增的“執行緒組”,選擇“新增”→“Sampler”→“HTTP請求”,如圖所示:
這裡寫圖片描述

完成HTTP請求

根據請求資訊,完成“HTTP請求”:修改名稱;注意IP和埠號,在路徑欄補齊除ip埠號的剩餘路徑;Implementation使用httpClient4;使用https的協議需要在協議欄填寫https;選擇請求的方法,多數為POST或這GET;若請求體中含有中文,最好在content encoding中填寫utf-8;請求引數可以選擇Parameters或者Body Data,Parameters的引數更加直觀,Body Data的更加方便引數修改且引數以parameter1=value1&mmeter2=value2形式。

新增檢視結果數

右鍵點選“HTTP請求”,選擇“新增”→“監聽器”→“檢視結果樹”,如圖所示:
這裡寫圖片描述

新增證書檔案

協議為Https的請求還需要載入證書,如果為https協議,在沒有載入證書的情況下,進行了測試,最好儲存測試計劃,然後重啟JMeter,重啟後先載入證書,再進行測試,否則,報錯。選擇“選項”→“SSL管理器”,如圖所示:
這裡寫圖片描述

選擇pkcs12的證書檔案

使用pkcs12的證書檔案,jks直接用是不行的,需要java打包下

啟動測試

點選“啟動”按鈕,啟動測試,如圖所示
這裡寫圖片描述

輸入pcks12的密碼

啟動測試後,彈出“KeyStore Password”,輸入pcks12生成時用的密碼。
這裡寫圖片描述

測試後檢視結果樹

測試結束後,點選“檢視結果樹”,可以看到當前測試執行了一個例項,選中該結果,點選“響應資料”檢視響應的文字,檢查文字是否為正確的響應資料,JMeter會把所有響應碼200的回覆都當成成功,一些服務例如查詢等,可能會設定查詢失敗下返回提示語句但響應碼依舊是200。此時需要檢視響應文字中正確響應的關鍵詞,方便壓測時設定響應斷言。

GUI模式下建立壓力測試計劃

新增Concurrency Thread Group

可以新建一個測試計劃,也可以在原先介面測試的測試計劃上修改。本例直接修改原先的介面測試,右鍵“測試計劃”,選擇擇“新增”→“Threads(Users)”→“Concurrency Thread Group”,如圖所示:
這裡寫圖片描述

設定Concurrency Thread Group

根據需求完成執行緒組的設定,需要填寫“Target Concurrency”,為壓力測試預期的併發壓力(注意Jmeter採用執行緒模擬併發的策略,大併發意味著大量執行緒,測試機效能會大量消耗,甚至影響測試結果,所以需要大併發的情況下,建議採用分散式部署Jmeter進行測試);“Ramp Up Time”,為測試併發數啟動所需時間(注意測試並不是所有併發啟動後才執行,在啟動過程中,先啟動的執行緒會先執行請求);“Ramp Up Steps Counts”,為是否將啟動執行緒分階段的啟動,例如10即為分10次階段性的啟動一部分執行緒,可以為空;“Hold Target Rate Time”,為並發達到要求後再執行多久時間;“Time Unit”,時間單位,非常重要,有分和秒,不要選擇錯誤。
這裡寫圖片描述

新增Http請求

直接複製之前介面測試時的http請求,刪去檢視結果樹即可。

新增聚合報告

右鍵http請求,選擇“新增”→“監聽器”→“聚合報告”。如圖所示
這裡寫圖片描述

聚合報告中儲存測試資料

在聚合報告的“檔名”欄,填入./*-${__time(yyyyMMdd-HHmmss,)}.jtl,表示在當前目錄生成jtl(jmeter的資料檔案格式),${__time(yyyyMMdd-HHmmss,)}為jmeter的時間函式,生成測試的年月日分鐘秒,方便後期管理測試資料。
這裡寫圖片描述

新增響應斷言

右鍵http請求,選擇“新增”→“斷言”→“響應斷言”,如圖所示:
這裡寫圖片描述

配置響應斷言

不同請求配置不同的斷言。根據之前的介面測試,點選新增,輸入判斷文字,不同模式匹配規則,自行百度
這裡寫圖片描述

儲存測試計劃

刪除介面測試的執行緒組,點選“檔案”,選擇“儲存測試計劃為”,儲存測試計劃。壓測計劃建立完成。注意3.1版本“儲存測試計劃為”下面是“選中部分儲存為”,舊版就是“儲存為”,會儲存選中的部分,然後實際測試的時候因為測試計劃不完整是沒法跑測試的,會報Error in NonGUIDriver java.lang.RuntimeException: Could not find the TestPlan class!,這雷舊版很容易踩上。
這裡寫圖片描述

NO-GUI模式下啟動壓力測試

Windows下

開啟cmd,目錄切換到測試計劃(jmx)所在的目錄,證書放在同一目錄下,輸入{jmeter}/bin/jmeter -Djavax.net.ssl.keyStore=*.pkcs12 -Djavax.net.ssl.keyStorePassword=* -n -t *.jmx
{jmeter}為jmeter的安裝目錄
-Djavax.net.ssl.keyStore=**.pkcs12 是證書檔案
-Djavax.net.ssl.keyStorePassword=** 是證書檔案生成時的密碼
-n 為nogui模式
-t 後面為測試計劃檔案(jmx)

linux下(推薦)

目錄切換到測試計劃(jmx)所在的目錄,證書放在同一目錄下,輸入{jmeter}/bin/jmeter -Djavax.net.ssl.keyStore=*.pkcs12 -Djavax.net.ssl.keyStorePassword=* -n -t .jmx |tee -a .out
{jmeter}為jmeter的安裝目錄
-Djavax.net.ssl.keyStore=**.pkcs12 是證書檔案
-Djavax.net.ssl.keyStorePassword=** 是證書檔案生成時的密碼
-n 為nogui模式
-t 後面為測試計劃檔案(jmx)
tee -a 引數後為文字檔案,用於儲存測試時輸出summarize資料
若是為http的,Djavax.net.ssl.keyStore=*.pkcs12 -Djavax.net.ssl.keyStorePassword=* 直接省去

使用JMeter檢視資料

在GUI模式下

選擇報表

開啟Jmeter,右擊測試計劃,選擇“新增”→“監聽器”→“聚合報告”;“新增”→“監聽器”→“Response Times Over Time”;“新增”→“監聽器”→“Transactions per Second”(有其他圖表需要可以自行下載外掛安裝),如圖所示:
這裡寫圖片描述

載入資料

選擇聚合報告,點選檔名欄後的瀏覽,選擇jtl檔案,載入資料(其餘監聽器類似),如圖所示:
這裡寫圖片描述

其他:

http會產生cookie的,需要刪除或者其他操作的,需要新增cookie管理器。
預設jtl資料不儲存響應文字,需要儲存錯誤檔案的資訊,可以新增監聽器中的儲存響應到檔案,勾選Save Failed Responses only(不推薦有較多錯誤的情況去儲存文字,容易卡住)。
Bin目錄下有個templates資料夾,裡面有些JMeter用法的例子,可以看看。
NOGUI模式下可以使用jmeter -g result.jtl -o ./ResultReport生成一個html的報表(3.0版本以上)