JMeter:一個簡單的測試計劃怎么做?

一、JMeter概述
▲ JMeter簡介
Apache JMeter?是Apache組織開發(fā)的一款開源軟件,是典型的純Java開發(fā)的應用程序,可以在不同平臺比如Windows、Linux或macOS系統(tǒng)上進行軟件測試。JMeter主要用于應用程序的功能負載測試以度量軟件的性能,也可以用于其他類型的測試比如接口測試、API測試等。
▲ JMeter版本
JMeter不同的版本,功能有所差異,對JDK的支持也不盡相同。新的JMeter版本有些功能會逐漸改進完善,還會引入新的功能組件,性能也會逐步提升。因此在JMeter官方網(wǎng)站的最佳實踐中,建議用戶無論如何最好使用最新的JMeter版本。
最新版本下載頁面鏈接:
https://jmeter.apache.org/download_jmeter.cgi。
這里以JMeter5.2.1版本進行介紹。
▲ JMeter與Loadrunner區(qū)別

▲JMeter GUI界面
當JMeter以GUI模式運行時,窗口主要由三部分構成:
1、功能區(qū)
上方菜單欄,下方工具欄。菜單欄展示了JMeter提供的功能菜單,而工具欄中的圖標是常見功能的快捷方式。
2、視圖區(qū)
以樹狀結構呈現(xiàn)JMeter元素,其中“Test Plane”是樹的根節(jié)點,每一個節(jié)點就是一個JMeter元素。在此區(qū)域可以添加、刪除節(jié)點或者通過拖曳調整節(jié)點的位置。
3、內(nèi)容區(qū)
當在視圖區(qū)選中一個JMeter元素節(jié)點時,內(nèi)容區(qū)則會相應地顯示該元素的內(nèi)容。這時可以對其內(nèi)容進行查看、設置等操作。

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




























