JMeter簡介
JMeter
的特性:
對於多種協議的功能測試和效能測試
- Web - HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, …)
- SOAP / REST Webservices
- FTP
- Database via JDBC
- LDAP
- Message-oriented middleware (MOM) via JMS
- Mail - SMTP(S), POP3(S) and IMAP(S)
- Native commands or shell scripts
- TCP
- Java Objects
- 提供了測試錄製
- 提供
CLI
模式 - 提供
HTML
報告 - 完全的可移植性和百分百的純
Java
- 提供多執行緒支援,模擬多使用者
高擴充套件性 >這一節內容譯自
JMeter
首頁:https://jmeter.apache.org/index.html筆者實驗環境
JMeter是Java語言的實現,也就是純Java應用,所以JMeter理論上可以執行於任何對應的Java環境可用的環境上。 |型別|值| |:—-|:—-| |Java版本|java version “1.8.0_181” (要求Java8及以上)| |JMeter版本|5.4.1| |作業系統|Ubuntu 20.04(GNOME 3.36.5)| |核心版本|Linux version 5.8.0-43-generic|
下載
本文主要介紹 JMeter
的快速入門,故其它環境由讀者自行準備
- 進入官網頁面(https://jmeter.apache.org/download_jmeter.cgi)選擇合適的映象源,下載二進位制分發檔案;
- 將壓縮檔案解壓到本地後,
JMeter
解壓後得到的目錄的路徑稱為JMETER_HOME
;
JMeter檔案簡單介紹
檔案路徑(相對於 JMETER_HOME 目錄) | 檔案描述 |
---|---|
bin | 資料夾,裡面存放可執行檔案 |
docs | 幫助文件目錄 |
extras | 擴充套件外掛目錄,目錄下的檔案提供了對ant的支援 |
lib | JMeter用到的jar包 |
bin/jmeter | 在linux和unix系統中啟動JMeter客戶端的可執行檔案(本身是shell指令碼) |
bin/jmeter-server | 在linux和unix系統中啟動JMeter服務程式的可執行檔案(本身是shell指令碼) |
bin/jmeter.properties | JMeter的配置檔案 |
bin/jmeter.bat | Windows下啟動JMeter客戶端的可執行檔案 |
bin/jmeter-server.bat | Windows下啟動JMeter服務程式的可執行檔案 |
啟動JMeter的使用者介面
進入 JMETER_HOME
目錄下的 bin
目錄,執行以下命令啟動 JMeter
的 GUI
模式:
./jmeter
幾秒後,介面開啟如下:
JMeter主要概念簡介
概念 | 簡介 |
---|---|
測試計劃 | 測試計劃描述了JMeter需要執行的一系列步驟 |
執行緒組 | 執行緒組定義了執行的使用者池(以併發方式模擬多個使用者) |
jmx檔案 | 對應於一個測試計劃的以(.jmx)結尾的檔案,檔案中是以xml格式組織的JMeter程式特定資料結構 |
取樣器(sample) | 取樣器可以對執行的目標進行取樣(HTTP,JDBC等型別) |
前置處理器(pre-processor) | 對取樣器進行前置處理(提供使用者引數,等待指定時間等) |
後置處理器(post-processor) | 對取樣器進行後置處理(結果提取器等) |
斷言(assertions) | 對取樣器得到的結果進行斷言(響應時間斷言,響應資料斷言,響應的結構斷言等) |
邏輯控制器(Logic controller) | 以邏輯的形式控制測試計劃的執行步驟(If, While等) |
監聽器(listener) | 在取樣器執行結束後,監聽器會被通知,一般監聽器用於處理結果資料(展示結果資料,聚合圖表等) |
配置元素(config element) | 能夠為測試計劃進行一些配置(請求頭配置,通用請求配置,認證配置,變數配置等) |
JMeter主要功能元素簡介(Http測試相關)
JMeter
介面操作大部分是單擊滑鼠右鍵會彈出下拉選單進行元素的新增
執行緒組
右鍵測試計劃新增
元件截圖:
元件引數說明:
引數名稱 | 取值及含義 |
---|---|
錯誤後的動作 | 繼續(繼續執行之後的步驟)、啟動下一迴圈、停止執行緒(僅此執行緒)、停止測試(等正在執行的取樣器執行結束後停止測試)、立即停止測試 |
執行緒數 | 要模擬的使用者數量 |
Ramp-Up時間(秒) | 預熱時長。用於在執行的時間內將所有配置的數量的執行緒啟動完畢。例如10s,執行緒數為10,則每隔1s啟動一個執行緒(第一個執行緒總是立即啟動的,如果匯流排程數為1,則無論預熱時長取值多少,都等效於0) |
迴圈次數 | 永遠(迴圈不停止)、指定數字(指定次數迴圈之後,停止執行) |
每次迴圈同一使用者嗎? | 是/否 |
HTTP請求預設值
滑鼠右鍵單擊執行緒組元素,從配置元件(config element)下拉項中新增
這個元件用於為作用範圍內的HTTP
取樣器提供預設值。
元件引數說明:
引數名稱 | 取值及含義 |
---|---|
協議 | 是http協議還是https協議 |
伺服器名稱或IP | 域名或者IP地址 |
埠號 | 伺服器的埠號 |
路徑 | URL中的path部分 |
內容編碼 | HTTP請求所使用的字符集編碼 |
引數 | HTTP請求引數 |
訊息體資料 | 預設的請求體的資料 |
使用者定義的變數
滑鼠右鍵單擊執行緒組元素,從配置元件中選擇新增
這個元件用於線上程中定義變數,可以在其它地方使用 ${variableName}
的語法進行引用。
在下列介面點選 新增
按鈕新增一行變數名和值即可定義一個變數。
HTTP取樣器
滑鼠右鍵單擊執行緒組元素,從取樣器條目中選擇
HTTP取樣器可以使用 HTTP
請求的形式對被測系統進行取樣(發起請求)。這個元件中很多資料和上文提到的 HTTP請求預設值
元件中的很多屬性相同,如果此取樣器在 HTTP請求預設值
元件作用範圍內,則取樣器中為空的屬性會填入預設值,不為空的屬性會覆蓋 HTTP請求預設值
元件中相同的屬性(就近)。
元件引數說明:
引數名稱 | 取值及含義 |
---|---|
協議 | 是http協議還是https協議 |
伺服器名稱或IP | 域名或者IP地址 |
埠號 | 伺服器的埠號 |
路徑 | URL中的path部分 |
內容編碼 | HTTP請求所使用的字符集編碼 |
引數 | HTTP請求引數(URL中的查詢引數) |
訊息體資料 | 請求體的資料 |
請求方法 | GET、POST、PUT、DELETE等HTTP方法 |
檔案上傳 | 用於上傳檔案 |
自動重定向 | 勾選表示自動重定向。表示下游的HTTP協議處理器會自動的重定向,所以重定向中間的過程對JMeter是不可見的。且只能用於GET和HEAD方法。POST和PUT方法會被拒絕。 |
跟隨重定向 | 勾選後表示跟隨重定向(僅當自動重定向未勾選時有效)。如果設定,JMeter的取樣器會對響應進行處理,且會追蹤過程中的每次重定向,並將最後一個未重定向的請求和響應作為最外層的取樣資料,其它的請求的資料作為這個取樣資料的附加資訊。(最大重定向次數為20) |
使用KeepAlive | 勾選後,JMeter會設定請求頭 Connection: keep-alive 。但是這個選項是否生效還和JMeter的HTTP實現有關 |
響應斷言
滑鼠右鍵單擊取樣器,點選【新增-斷言-響應斷言】選項新增
響應斷言可以為取樣器所得的結果進行斷言,以邏輯(等於、包含、正則匹配等)對包括響應頭、響應碼、響應體等在內的內容進行斷言,以校驗取樣器的輸出是否符合測試者的預期。
元件引數說明:
引數名稱 | 取值及含義 |
---|---|
Name | 斷言的名稱 |
Apply to | 選定斷言的作用範圍,一般是用到 Main sample only 選項,Main sample 指的就是這個斷言所屬的取樣器,而 sub samples 指的是由這個取樣器產生的子取樣器,比如 HTTP 取樣器的高階選項 – 獲取內建的資源,就會產生子取樣器。 |
Field to Test | 指的是需要進行斷言的目標。Text Response 指的是從伺服器獲得的整個響應作為文字(響應體)。Response Code 是響應碼 (例如200)。Response Message 是響應訊息(例如OK)。Response Headers 是響應頭。Request Headers 指的是請求頭。Request Data指的是請求的所有資料作為文字(請求體)。URL sampled 是取樣的 URL。Document 指的是 View Results Tree 元件的 Document 部分一樣的以特定規則提取出的文件。 |
Ignore status | 忽略響應的狀態碼。一般 4xx 和 5xx 是預設認為是失敗的。如果不設定,總的 sample 的結果是由狀態碼的成功失敗和斷言的結果的結合。如果設定了,就會設定狀態為成功,再進行斷言(注意:如果設定了這個引數,要把這個斷言放在第一個,否則會清除前面的斷言的失敗結果) |
Pattern Matching Rules | 對於給定的模式串,使用怎樣的規則。Contains 包含模式串 (模式串被看作正規表示式)。Matches 表示正則匹配的 match (模式串被看作正規表示式)。Equals 表示相等(大小寫敏感,模式串被看作純文字)。Substring 表示被測文字包含給定的模式串 (模式串被看作純文字)。兩種邏輯符號: Not 和 Or 。Not 表示對結果取反。 Or 表示匹配規則對於給定的一系列模式串成立一個那斷言就是 OK 的。 |
Patterns to Test | 用來測試的模式串列表。可以點選 Add 按鈕新增多個模式串。如果是正規表示式則是 Perl5-style 的正規表示式且沒有封閉的括號的形式。 |
JSON變數提取
右鍵單擊請求,Add – Post Processors – Json Extractor 新增 JSON 提取器元素
JSON
提取器可以用於從響應體中的 JSON
結構中提取指定位置的屬性為變數。
元件引數說明:
引數名稱 | 取值及含義 |
---|---|
Name | 展示用的描述性的名字 |
Names of created variables | 建立的變數的一個或多個名稱(多個以逗號分隔),數量要對應 JSON Path 表示式 |
JSON Path Expressions | 一個或多個 JSON path 表示式 (多個以逗號分隔),數量和變數數目要匹配。(表示式的寫法參考下文) |
Default Values | 一個和多個預設值(多個以逗號分隔)。如果某個 JSON path 表示式沒有返回值就用對應位置的預設值。數量和變數數一致 |
Match No. (0 for Random) | 如果 JSON path 表示式可以取得多個值,該取哪個。0 表示隨機;-1 表示提取所有的結果(會生成多個變數,名為 _N,N從1開始);X表示提取指定位置的結果,從1開始,如果X大於結果的數量,則返回空(會嘗試使用預設值) |
Compute concatenation var | 如果勾選,表示如果有多個結果得到,會將他們逗號分隔,放入名為 _ALL 的變數 |
JSON path
寫法: $
符號表示根元素,.
表示取屬性,[0]
表示取陣列物件的第一個元素 ( [1]
就是第二個)。
例如:
{
"user": {
"names": ["Jack", "Jacky"],
"age": 10
}
}
對於以上 JSON
,使用表示式 $.user.names[0]
即可提取出 Jack
這個值。 更詳細的資訊可以參考:https://jsonpath.com/
檢視結果樹元素
這個元素是用於使用 JMeter
介面進行請求執行時檢視請求的執行情況的,他可以檢視到請求的請求報文和響應報文以及斷言情況等資訊。詳情參考下文。
JMeter使用示例
接下來,我們使用上面學到的知識,實現這麼一個場景:查詢 Gitee
上豬齒魚倉庫下的貢獻者, 然後提取出指定的一個貢獻者名稱,用第二個請求獲取貢獻者的資訊。
使用的 Gitee
的兩個介面為
GET https://gitee.com/open-hand/choerodon/contributors_count?ref=0.23.0
響應體結構為(我們需要獲取的貢獻者名稱的 JSON path
為 $.contributors[0].username
):
{
"status": 1,
"contributors_count": "16",
"contributors": [
{
"username": "example1"
}
]
}
GET https://gitee.com/{貢獻者名稱}
建立測試計劃
開啟 Jmeter 會有個預設的測試計劃
建立執行緒組
右鍵滑鼠單擊測試計劃,點選 Add > Threads (Users) > Thread Group
新增執行緒組元素。其中填入以下值:
建立 HTTP
預設值配置元素
滑鼠右鍵單擊執行緒組,Add > Config Element > Http Request Defaults
新增配置元素。填入值如下:
建立 HTTP
取樣器獲取貢獻者列表
右鍵單擊執行緒組,Add > Sampler > HTTP Request
新增取樣器(填入path和新增一個parameter):
新增響應提取器
右鍵單擊請求取樣器,Add > Post Processors > JSON extractor
新增元素如下,因為某些使用者在 gitee
並不存在,這裡我們將提取 JSON path
為 $.contributors[4].username
(也就是第五個貢獻者)的使用者名稱值放入變數 contributorName
:
新增檢視結果樹元素到請求下
右鍵單擊取樣器,Add > Listener > View Results Tree
新增檢視結果樹如下:
新增 HTTP
取樣器請求特定的貢獻者資訊
右鍵單擊執行緒組,Add > Sampler > HTTP Request
新增取樣器(這裡在 path
屬性填入 ${contributorName}
用於引用上一個請求提取出的變數):
新增檢視結果樹元素到請求下
右鍵單擊取樣器,Add > Listener > View Results Tree
新增檢視結果樹如下:
點選綠色三角形進行執行
點選執行按鈕後,會提示我們先將檔案儲存後再執行,選擇一個合適的目錄儲存後,點選執行按鈕,此時綠色的執行按鈕會變成灰色,同時右上角會開始計時,這表明請求正在執行,等按鈕再次變成綠色時,說明執行結束了。
檢視執行結果
點選第一個請求的 檢視結果樹
元素可以檢視這個請求的執行結果:
可以看到響應體的資訊為:
檢視第二個請求的請求資料,可以看到請求成功,且可以看到請求路徑的 ${contributorName}
已經渲染為第一個請求提取到的值 handchoerodon
:
總結
JMeter
提供了 HTTP
取樣器,各種斷言機制,配置機制以及變數提取機制,可以幫助進行我們模組化的介面測試,使得系統更加健壯。
擴充套件資料
本文由豬齒魚技術團隊原創,轉載請註明出處:豬齒魚官網
關於豬齒魚
豬齒魚Choerodon全場景效能平臺,提供體系化方法論和協作、測試、DevOps及容器工具,幫助企業拉通需求、設計、開發、部署、測試和運營流程,一站式提高管理效率和質量。從團隊協同到DevOps工具鏈、從平臺工具到體系化方法論,豬齒魚全面滿足協同管理與工程效率需求,貫穿端到端全流程,助力團隊效能更快更強更穩定。戳此處試用豬齒魚