JMeter:一個簡單的測試計劃怎么做?
一、JMeter概述
▲ JMeter簡介
Apache JMeter?是Apache組織開發的一款開源軟件,是典型的純Java開發的應用程序,可以在不同平臺比如Windows、Linux或macOS系統上進行軟件測試。JMeter主要用于應用程序的功能負載測試以度量軟件的性能,也可以用于其他類型的測試比如接口測試、API測試等。
▲ JMeter版本
JMeter不同的版本,功能有所差異,對JDK的支持也不盡相同。新的JMeter版本有些功能會逐漸改進完善,還會引入新的功能組件,性能也會逐步提升。因此在JMeter官方網站的最佳實踐中,建議用戶無論如何最好使用最新的JMeter版本。
最新版本下載頁面鏈接:
https://jmeter.apache.org/download_jmeter.cgi。
這里以JMeter5.2.1版本進行介紹。
▲ JMeter與Loadrunner區別
▲JMeter GUI界面
當JMeter以GUI模式運行時,窗口主要由三部分構成:
1、功能區
上方菜單欄,下方工具欄。菜單欄展示了JMeter提供的功能菜單,而工具欄中的圖標是常見功能的快捷方式。
2、視圖區
以樹狀結構呈現JMeter元素,其中“Test Plane”是樹的根節點,每一個節點就是一個JMeter元素。在此區域可以添加、刪除節點或者通過拖曳調整節點的位置。
3、內容區
當在視圖區選中一個JMeter元素節點時,內容區則會相應地顯示該元素的內容。這時可以對其內容進行查看、設置等操作。
二、JMeter測試組成
JMeter構建測試類似于組裝一臺智能電子設備,比如智能手機。智能手機由CPU、內存、輸入輸出設備(比如USB接口,攝像頭等)、屏幕、電池等一系列物理部件構成的。
JMeter測試也是由一系列JMeter元素組合起來構成的,JMeter提供了構建測試的所有元素,你可以隨心所欲的將這些元素組裝起來完成你想要的測試。
JMeter元素有以下四種類型的測試元素:
- 測試計劃。
- 線程組。
- 組件:包含配置元件、前置處理器、定時器、后置處理器、斷言與監聽器。
- 控制器:包括取樣器、邏輯控制器與測試片段。
(1)測試計劃
測試計劃描述了JMeter測試在運行時執行的一系列步驟。完整的測試計劃由一個或多個線程組、邏輯控制器、取樣器、監聽器、定時器、斷言和配置元件組成。
測試計劃元素是JMeter測試樹的根節點,是唯一的,所有的測試元素節點都位于根節點之下。
(2)線程組
在手工測試中,測試用例由測試工程師手動執行完成。而性能測試與自動化測試的測試用例由選擇的測試工具代替測試工程師來執行。JMeter執行測試的任務是由線程組來完成的。打個比方,線程組相當于手工測試中執行測試用例的測試工程師。
線程組控制JMeter用來執行測試的線程數。要模擬多少個用戶(稱之為虛擬用戶)來執行測試,可以通過修改線程組的線程數來實現。比如將線程數設置為10,表示模擬10個用戶執行測試。
所有的取樣器與邏輯控制器都必須位于線程組下,從這個角度理解,JMeter測試計劃真正開始于線程組。其他元素,例如監聽器,可以直接放在測試計劃下,在這種情況下,它們將作用于所有的線程組。一個測試計劃下可以有多個線程組,在測試計劃中可以配置以并行或順序方式啟動多個線程組。
(3) 組件
JMeter中最基本的元素為元件,元件是JMeter測試中的最小功能單元,每個元件都具有某種特定的功能。比如“Regular Expression Extractor”元件,可以實現利用正則表達式提取響應數據的功能。
JMeter提供了很多元件,為了方便用戶使用與管理眾多的元件,JMeter將多個功能類似或邏輯上相關的元件歸為一類,稱為組件。JMeter包含六大組件: 配置元件、前置處理器、定時器、后置處理器、斷言與監聽器。
配置元件
配置元件與取樣器密切相關。類似于配置文件之于軟件,軟件配置文件可以影響軟件的行為;同樣通過配置元件可以新增或修改請求內容,實現對請求的自定義。
前置處理器
前置處理器在進行取樣器請求之前執行一些操作。
如果前置處理器附加到取樣器元素,那么它將在該取樣器元素運行之前執行。
前置處理器經常用于在運行之前修改取樣器請求的設置,或更新未從響應文本中提取的變量。
定時器
默認情況下,JMeter線程按順序執行取樣器而不會出現暫停的情況。通過將定時器添加到線程組來指定延遲。如果不加延遲,JMeter可能會在很短的時間內發送過多的請求到服務器,導致服務器負載過重而崩潰。
定時器可以使在其作用范圍內的每個取樣器執行前延遲一段時間。
后置處理器
后置處理器在取樣器請求完成后執行一些操作。
如果后置處理器附加到取樣器元素,那么它將在該取樣器元素運行之后執行。
后處理器通常用于處理響應數據,從中提取需要的值。
斷言
斷言用于驗證取樣器請求或對應的響應是否返回了期望的結果。
JMeter測試是否執行成功,結果是否預期,都可以通過添加斷言來進行驗證。
監聽器
監聽器可以在JMeter執行測試的過程中搜集相關的數據,并將這些數據不同的形式,比如樹、圖、報告等呈現出來。
比如,“圖形結果”監聽器繪制響應時間的曲線圖,“查看結果樹”監聽器顯示取樣器請求和響應的詳細信息等。
此外,有些監聽器還可以將搜集到的測試數據保存到文件中以供以后使用。
(4)控制器
取樣器
取樣器用于構建發給服務器處理的請求,即告訴JMeter怎樣將請求發送到服務器。例如,若要發送HTTP請求,可以選擇“HTTP Request”取樣器,同時還可以通過添加配置元件來自定義請求。
邏輯控制器
取樣器請求默認是以先后順序依次執行的,某些情況下滿足了復雜的業務/場景需求。通過邏輯控制器可以控制JMeter發送請求的邏輯,來實現復雜的業務/場景。比如有選擇性執行某些請求,循環執行請求,整體執行邏輯上有依賴關系的請求,交替執行請求等等,都可以使用相應的邏輯控制來實現。
測試片段
測試片段元素是一種特殊類型的控制器,與線程組元素同級。它與線程組的區別在于,除非被Module Controller或Include Controller引用,否則它不會執行。
測試片段主要用于測試腳本的重用。
三、一個簡單的JMeter測試計劃
以訪問百度為例(www.baidu.com)。
按照如下步驟完成測試計劃:
1.在Test Plan節點上右鍵,選擇Add->Threads(users)->Thread Group。
- 在Tread Properties項下,設置“Number of Threads(users)”為1。
2.在Thread Group節點上右鍵,選擇Add->Sampler->HTTP Request。
- 在Web Server項下,設置“Server Name or IP”為www.baidu.com。
- 在HTTP Request項下,設置“Path”為/。
3.在HTTP Request節點上右鍵,選擇Add->Assertions->Response Assertion。
- 在Field to Test項下,選擇“Response Code”。
- 在“Patterns to Test”項下,點擊“Add”,輸入200。
4.繼續在HTTP Request節點上右鍵,選擇Add->Listener->View Results Tree。
5.點擊“Save”快捷按鈕,然后輸入測試計劃文件名,保存。
6.點擊“Start”快捷按鈕執行測試,可以在“View Results Tree”中查看測試結果。
JMeter測試查看結果樹顯示如下: