1. 下載和運行
JMeter 是由 Java 語言編寫的, 因此 JMeter 的使用依賴于 Java 環境 - JRE.
前往 oracle 官網下載 JMeter 壓縮包.
Mac 用戶解壓完成后, 在包內的 bin 目錄下運行?sh jmeter:
Windows 用戶直接運行 bin 目錄下的 jmeter.bat:
即可進入 JMeter 主頁面:
1.1 添加環境變量
上面的方法雖可以打開 JMeter, 但是過程比較繁瑣(需要手動打開?bin 目錄). 如果我們把 bin 目錄添加至系統環境變量, 那我們就可以直接在終端運行 jmeter 命令, 即可打開?JMeter.
步驟(macOS):
- vim?編輯器打開配置文件:
vim ~/.zshrc
- 在編輯器中, 按?i?鍵進入“插入模式”(Insert Mode)
- 在文件的末尾, 添加下面這行代碼.?記得替換為自己的 JMeter?bin?目錄路徑:
# JMeter Environment Variable export JMETER_HOME="/Users/shybee/apache-jmeter-5.5" export PATH="$JMETER_HOME/bin:$PATH"
- 按?Esc?鍵退出插入模式
- 輸入?:wq?然后按回車, 保存文件并退出?vim?編輯器
關閉當前的終端窗口, 然后重新打開一個新的(讓配置立即生效)
驗證配置是否成功
這樣, 我們可直接在終端輸入?jmeter 命令, 運行 JMeter:
配置語言為簡體中文(修改 bin 目錄下的 jmeter.properties 文件):??
配置編碼為 utf-8(修改 bin 目錄下的 jmeter.properties 文件):??
修改配置后, 重啟 JMeter, 配置生效.
2.?配置 HTTP 請求
2.1 創建線程組
- 在測試計劃下, 創建線程組:
- 在線程組中進行配置
上述配置, 在 “循環次數” 沒有勾選 “永遠”, 表示指定循環次數.
如果勾選 “永遠”, 那么必須打開 “調度器” 并配置 “持續時間”, 表示在 n 秒內, x 個虛擬用戶不斷的發起請求, 但是具體多少次請求是未知的.
2.2 配置 HTTP 請求
首先在線程組下創建 HTTP 請求:
然后進行數據配置:
需要注意的是, 填寫路徑時, 最開始一定要加上斜杠 “/”
此外: 該 POST 請求的數據為 Json 格式, 除了上圖選擇 "消息體數據" 寫入數據外, 我們該需額外的在請求的 header 中配置 Content-Type 為 application/json(需配置 HTTP 信息頭管理器, 下文會講):
(將 HTTP 信息頭管理器建立在 博客登錄接口 下, 那么這個信息頭管理器, 只對這一個接口生效)
2.3 配置查看結果樹
添加查看結果樹:
添加完結果樹后, 點擊運行, 便可發送所配置的所有請求:
注意: 上圖是將結果樹配置于線程組下, 即: 與所有接口同級, 那么這個結果樹會查詢到該線程組下所有的請求和響應信息.
如果想獲取單一接口的請求結果, 那就可以把結果樹添加在指定的接口下:
2.4 配置 header 信息 - 信息頭管理器
大多數請求的 header 中, 都會攜帶用戶身份驗證信息(如: cookie, token 令牌), 如果不攜帶這些信息, 則請求無法發出.
拿博客系統舉例, 當用戶登錄成功后, 前端會把 "loginUserToken" 存儲到瀏覽器的 localStorage 中, 當用戶再次發送請求時(如獲取博客列表接口), 前端就會把這個 token 放在請求的 header 中, 供后端進行校驗, 若后端發現請求中攜帶 token 且值正確, 就正確返回響應. 若請求的 header 中未攜帶 token, 則被攔截器攔截, 進行強制登錄操作.
使用 postman 訪問接口舉例.?
不攜帶 token:
攜帶 token:
因此, 我們在使用 JMeter 發送請求時, 也要對 header 進行相應的配置, 否則請求根本無法發送成功:
因為只有 獲取博客列表接口 需要 token 信息, 而登錄接口并不需要, 因此, 為了使得這個配置了 token 的信息頭管理器只對 獲取博客列表接口 生效, 我們只需將它建立在?獲取博客列表接口 下即可:
配置完成后, 請求便可發送成功:
2.5 HTTP 請求默認值
對于同一個項目, 存在許多重復的配置, 如:?URL 中的協議類型/IP/端口號.
對于這些重復的配置, 我們就可以創建一個 "HTTP 請求默認值", 將重復的部分管理起來, 這樣就不需要每創建一個接口 都填寫這些重復信息了:
發送請求時, "HTTP 請求默認值" 中的信息, 就會拼接到 URL 中:
因此, 當多個接口發起請求時存在多個重復的 HTTP 配置, 我們就可以將這些重復的配置提取出來, 放到 "HTTP 請求默認值" 中, 后續的 HTTP 取樣器(接口請求) 中, 就無需再添加這些配置, 發起請求時會讀取 "HTTP 請求默認值" 中的配置并進行拼接.
但是, 配置的讀取遵循 "就近原則", 只有當接口請求中沒有配置時, 才會從讀取 "HTTP 請求默認值" 中讀取, 若接口請求中配置了, 則讀取接口請求中的數據.
2.6 提取請求返回值 - JSON 提取器
在開發中, 一個請求的返回值作為另一個請求的參數, 是很常見的時間, 比如: 獲取博客列表請求的 header 中, 需要攜帶 登錄請求 返回的 user_token 信息; 獲取博客詳情請求的參數, 需要攜帶?獲取博客列表請求 的 bolg_id.
此時, 我們就可以使用 Json 提取器, 獲取某個請求的響應中 Json 格式的 body 中的信息.
要提取 Json 格式的數據, 我們需要先了解 Json 操作符.
2.6.1 Json 操作符
獲取 Json 數據, 需要用到 Json 操作符:
Operator | Description |
$ | 表示根元素 |
@ | 當前元素 |
* | 通配符。所有節點 |
.. | 選擇所有符合條件的節點 |
.<name> | 子元素 |
['<name>' (, '<name>')] | 括號表示子元素或子元素列表 |
[<number> (, <number>)] | 數組索引或索引列表 |
[start:end] | 數組切片操作符 |
[?(<expression>)] | 過濾器表達式。表達式必須評估為布爾值。 |
獲取響應 body 中指定字段時, 通常使用: $..字段名
若該字段有多個, 要獲取第一個, 則用: $..[0]字段名
?
如, 獲取?body 中所有的 id 字段(先選擇 JSON Path Tester):
獲取?body 中第一個?id 字段:
2.6.2 配置 Json 提取器
在需要提取返回值的請求下, 添加一個 Json 提取器. 例如, 我們需要提取登錄接口請求返回的 user_token 數據, 則在 登錄接口請求 下建立一個 Json 提取器:
使用 Json Path Tester 進行測試, 可知該 token 數據可用 $..token 表示:
注意: 使用提取出的變量, 需要通過?${變量名} 進行使用:
這樣, 在其他請求發送時,?就會攜帶 登錄接口 返回的 token 字段:
除了上述提取登錄請求的返回值外, 也可以提取博客列表請求的返回值, 作為博客詳情頁請求的參數:
2.7 JSON?斷言
判斷一個請求的結果是否符合預期, 不僅僅是查看狀態碼, 而是要查看響應的數據是否正確, 此時就需要用到 JSON 斷言.
對斷言進行配置:
若請求結果符合斷言, 則請求成功, 若請求結果不符合斷言, 則請求失敗:
常用正則表達式:
- /d 匹配數字
- /S 匹配非空字符
未完待續
?