文章目錄
JMeter - 核心組件以及自定義參數
1.JMeter核心組件
1.1 Thread Group線程組和Sample採樣器
這兩個組件我們在上一篇博客【JMeter - 揭開分佈式壓測的神祕面紗】中做過一個簡單的介紹,這裏我們再稍微過一遍。
這裏我們先通過測試計劃去添加一個setUp Thread Group
這裏我們修改幾個主要參數,
Name
:線程組名稱Number of Threads
:線程數,即虛擬用戶數。一個虛擬用戶佔用一個進程或線程。Ramp-up period
:準備時長,即多少秒內到達指定線程數。例如20個線程10秒啓動完成,則表示10秒內20個線程都需要啓動完成,每秒啓動2個。Loop Count
:循環次數,即每個線程發送次數,可勾選無限循環。
這裏我們再來新增一個HTTP請求
。
這裏我們也修改一些參數,大家應該一目瞭然就知道什麼意思,英文不好的同學可以中英文切換使用慢慢熟悉。
有了上一篇文章的基礎,我們這裏直接添加組件結果樹
。如下圖操作即可添加結果樹。
啓動之後可以看到結果樹中將我們每次請求的結果以及一些數據都展現了出來。這裏是我們GET
接口的一個操作,這裏我們還準備了一個POST
接口,我們來看下如何操作。
這裏我們按照之前的步驟新建一個用於POST
接口的採樣器和結果樹。這裏有幾個區別需要注意,Method
需要修改爲POST
,另POST
請求需要勾選Use multipart/from-data
。
運行之後,成功調用。
1.2 Assertion斷言
在我們實際開發中,當我們請求API成功響應正確Code碼,也不一定意味着結果符合我們的要求,我們可能還需要對其進行一系列的判斷驗證纔可以確定其最終正確性。在``JMeter`中就提供了斷言這一個功能,我們可以通過在請求時返回層面增加一層驗證機制以便提高接口測試的正確性。這裏我們主要介紹下我們平時使用最多的響應斷言。
1.2.1 Response Assertion(響應斷言)
這種斷言主要是在我們請求的響應中增加一系列驗證。這裏我們在之前
GET
請求上添加幾個斷言做示例。
首先在我們所需添加斷言的採樣器上選擇添加Assertions
->Response Assertion
。
下面這個界面就是響應斷言的主要界面,這裏我們這個斷言的意義就是會檢測響應文本中是否包含james
這個字符串,若包含則通過檢驗。這裏我們稍微介紹一下每個選項的含義。
模塊 | 選項 | 說明 |
---|---|---|
Name |
斷言名稱 | |
Comments |
斷言註釋 | |
Apply to |
斷言應用範圍,一般選擇默認Main sample only |
|
Main sample and sub-samples | 作用於父節點及其子節點取樣器 | |
Main sample only | 僅作用於父節點取樣器 | |
Sub-samples only | 僅作用於子節點取樣器 | |
Jmeter Variable Name to use | 作用於JMeter變量 | |
Field to Test |
測試屬性,這個選項需要根據具體需求選擇 | |
Text Response | 響應文本,即響應數據json文本等 | |
Response Code | 響應狀態碼,例:http code 200 404 500等 | |
Response Message | 響應信息,例:http OK Found | |
Response Headers | 響應頭 | |
Request Headers | 請求頭 | |
URL Sampled | URL鏈接 | |
Document(text) | 文檔內容 | |
Ignore Status | 一個請求配置多個響應斷言時,忽略當前斷言響應結果繼續執行下一個斷言 | |
Request Data | 請求數據 | |
Pattern Mactching Rules |
匹配規則 | |
Contains | 響應結果包括所指定的內容,支持正則匹配 | |
Matches | 響應結果與指定內容完全一致(不區分大小寫) | |
Equals | 響應結果與指定內容完全一致(區分大小寫) | |
Substring | 響應結果包括所指定結果的字符串,不支持正則匹配 | |
Not | 結果反轉化,若通過斷言則失敗,不通過則成功 | |
Patterns to Test |
需要匹配的正則表達式、字符串。可同時添加多項。若某項驗證失敗,則之後的匹配不會再進行驗證 | |
Custom failure Message |
自定義錯誤信息 |
上面我們添加了一個響應文本斷言,這裏我們再添加一個響應碼斷言。
這裏我們知道,當前接口我們響應內容爲{"kobe":99,"tracy":95,"nash":94}
,運行看一下結果。這裏可以看到我們所發送的請求被標紅了,並且可以查看到具體未通過的斷言。
這裏我們將球星名稱的斷言勾選NOT
反轉一下再運行驗證,請求通過斷言正確記錄結果樹。
另外這裏順帶再介紹一個,我們還可以添加一個斷言結果監聽器。這個監聽器可以將斷言產生的結果記錄下來並可以選擇是否需要持久化到某個文件上。
1.3 Summary Report(聚合報告分析)
之前我們所瞭解和操作的都沒有涉及到和性能相關的概念,這裏要介紹的聚合報告則是我們對壓測對象的數據統計分析,是一個指標性的報告。這裏我們同樣在之前採樣器上添加
Aggregate Resport
。
這裏我們不需要其他配置和操作,直接運行測試計劃。
這裏就可以看到一系列的數據報告,這裏我們做一個簡單的介紹。
Label
:Sample採樣器名稱Samples
:總共發送請求數Average
:平均響應時間Median
:中位數,50%用戶響應不超過該時間90%Line
:90%線,90%用戶響應不超過該時間95%Line
:95%線,95%用戶響應不超過該時間99%Line
:99%線,99%用戶響應不超過該時間Min
:最小響應時間Max
:最大響應時間Error
:錯誤請求率Throughput
:吞吐量,一般情況下可看做每秒完成請求數(和QPS類似)Received KB/Sec
:每秒從服務器端接收到的數據量Sent KB/sec
:每秒從客戶端發送的請求的數量
這裏還可以通過配置將聚合報告的結果保存到指定文件。聚合報告主要就是上面這些數據指標,通過這些數據我們可以對測試對象性能以及抗壓程度有一個清晰的瞭解啦。
1.4 JMX壓測腳本
這裏我們對jmx壓測腳本做一個簡單的介紹,爲什麼要了解這個呢?因爲我們之後在Linux服務器上進行壓測的時候是沒有現在我們使用的可視化界面的,所以我們需要通過修改jmx腳本文件去修改對應的配置。
我們之前已經進行了一系列的操作,現在去退出或者保存大家會發現在指定目錄下生成了一個jmx的腳本文件。這個文件裏面就是我們整個測試計劃中所添加的組件和配置的參數了。
SetupThreadGroup
:這個是我們配置的線程組,這裏面主要是配置線程數、準備時長以及循環次數等配置。
HTTPSamplerProxy
:Http採樣器,就是我們開始添加具體API接口相關信息的配置,包括接口url、端口、請求方式等。
ResultCollector ViewResultsFullVisualizer
:這個就是結果樹了,這裏可以配置我們獲取哪些請求和響應的屬性。
ResponseAssertion
:斷言,這裏就是我們開始配置的兩個響應斷言。這裏主要是修改斷言的類型以及各種自定義參數。
ResultCollector StatVisualizer
:聚合報告,這個就是我們所需要的一系列測試結果數據,平時除了修改保存文件路徑之外其他的一般不會經常改動。
2.自定義變量以及CSV可變參數
2.1 User Defined Variables(用戶自定義變量)
無論是在編程還是在其他軟件的使用過程中,我們都會有一個場景,那就是有很多配置都是同一個值。當我們需要修改則需要全部修改一遍,增加了極大的工作量。這裏我們就介紹下
JMeter
的用戶自定義變量,做到一處配置處處使用。
我們在之前球星列表採樣器上添加Config Element
->User Defined Variables
。
這裏我們添加了兩個變量ip
和port
。
接下來使用就非常簡單了,我們可以通過${}
方式在配置中引用我們自定義的變量。再去啓動,請求一切正常,大家可以查看請求數據包,都已經轉換成我們引用的變量值。
2.2 CSV Data Set Config(CSV可變參數)
在我們平時壓測過程中,我們大部分情況是需要根據不同參數去發送請求,這裏我們我們就可以利用CSV數據文件設置去達到這個目的。這裏我們在採樣器上添加
Config Element
->CSV Data Set Config
。
我們首先對之前POST請求接口做一個小調整。使其支持兩個參數的傳入。
@PostMapping("/getScore")
public Object getScore(String name,String msg){
HashMap<String, Integer> stars = getStars();
System.out.println("getScore...");
return stars.get(name) + msg;
}
這裏我們準備了一份CSV文件,內容如下。這裏我們保存的格式是默認的逗號分隔。
這裏我們首先需要選擇我們讀取的Filename
文件路徑、Variable Names
分隔後的變量名稱以及Delimiter
分隔符。這裏我們CSV默認的逗號這裏配置爲逗號即可。
配置好CSV數據設置之後,我們需要修改之前採樣器裏面的配置。這裏我們將CSV可變參數名配置到指定參數內容上即可。
運行之後,可以發現他會根據我們CSV文件中的切割變量去循環請求接口,這就達到了我們利用CSV文件去發送可變參數請求的目的。
另外這裏也支持txt
文件參數設置,這裏我們也準備了一份txt
格式的文件。
內容和之前csv
文件是一致,唯一的區別就是分隔符不同,這裏我們只需要修改文件路徑以及分隔符即可。CSV可變參數的設置大概就是這些需要注意的,十分簡單。