JMeter 介面測試快速入門

豬齒魚效能平臺發表於2021-11-01

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 的快速入門,故其它環境由讀者自行準備

  1. 進入官網頁面(https://jmeter.apache.org/download_jmeter.cgi)選擇合適的映象源,下載二進位制分發檔案;
  2. 將壓縮檔案解壓到本地後,JMeter 解壓後得到的目錄的路徑稱為 JMETER_HOME

JMeter檔案簡單介紹

檔案路徑(相對於 JMETER_HOME 目錄)檔案描述
bin資料夾,裡面存放可執行檔案
docs幫助文件目錄
extras擴充套件外掛目錄,目錄下的檔案提供了對ant的支援
libJMeter用到的jar包
bin/jmeter在linux和unix系統中啟動JMeter客戶端的可執行檔案(本身是shell指令碼)
bin/jmeter-server在linux和unix系統中啟動JMeter服務程式的可執行檔案(本身是shell指令碼)
bin/jmeter.propertiesJMeter的配置檔案
bin/jmeter.batWindows下啟動JMeter客戶端的可執行檔案
bin/jmeter-server.batWindows下啟動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 取樣器,各種斷言機制,配置機制以及變數提取機制,可以幫助進行我們模組化的介面測試,使得系統更加健壯。

擴充套件資料

  1. JMeter Get Started
  2. JMeter元件說明

本文由豬齒魚技術團隊原創,轉載請註明出處:豬齒魚官網

關於豬齒魚

豬齒魚Choerodon全場景效能平臺,提供體系化方法論和協作、測試、DevOps及容器工具,幫助企業拉通需求、設計、開發、部署、測試和運營流程,一站式提高管理效率和質量。從團隊協同到DevOps工具鏈、從平臺工具到體系化方法論,豬齒魚全面滿足協同管理與工程效率需求,貫穿端到端全流程,助力團隊效能更快更強更穩定。戳此處試用豬齒魚

相關文章