1、前言
壓測工具 Jmeter 除了可以做性能測試,還可以做接口測試。當接口測試趨向於自動化方向時,就可以使用很典型的接口自動化測試框架 Jmeter + Ant + Jenkins。
本篇將講解如何快速使用Jmeter來進行接口測試。
2、簡介
Jmeter 是 Apache 組織開發的基於 Java 的壓力測試工具。用於對軟件做壓力測試,它最初被設計用於 Web 應用測試,但后來擴展到其他測試領域。
它可以用於測試靜態和動態資源,例如靜態文件、Java 小服務程序、CGI 腳本、Java 對象、數據庫、FTP 服務器等等。
Jmeter 可以用於對服務器、網絡或對象模擬巨大的負載,來自不同壓力類別下測試它們的強度和分析整體性能。另外,Jmeter 能夠對應用程序做功能/回歸測試,通過創建帶有斷言的腳本來驗證你的程序返回了你期望的結果。為了最大限度的靈活性,Jmeter 允許使用正則表達式創建斷言。
官網地址:
https://jmeter.apache.org/
3、安裝
官網下載地址:
https://jmeter.apache.org/download_jmeter.cgi
下載解壓包版本即可。
注意:需要Java 8+ (JDK 1.8+)以上的支持。
關於 JDK 的安裝與配置,可點擊 Java-安裝 文章進行查閱。
例如本次講解系統所帶的JDK版本為1.8.0_261。
例如下載apache-jmeter-5.4.1.zip
下載完成后,解壓到自己指定的路徑里即可。
例如:
Windows系統,解壓到C盤根目錄下。
路徑為C:\apache-jmeter-5.4.1
Mac系統,解壓到/Users/wangmeng目錄下。
路徑為/Users/wangmeng/apache-jmeter-5.4.1
4、環境變量
4.1、Windows環境
【我的電腦】右鍵 ---> 屬性 ---> 高級系統設置 ---> 環境變量 ---> 系統變量
新建 JMETER_HOME 值為 C:\apache-jmeter-5.4.1
編輯 CLASSPATH 的變量(如果沒有則新建),值為
%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar
編輯 PATH 新增值為 %JMETER_HOME%\bin
保存后,以管理員身份打開命令行,輸入jmeter -v
環境變量配置成功
4.2、Mac環境
打開終端,編輯 .bash_profile 文件。
vim .bash_profile
添加以下配置:
export JMETER_HOME=/Users/wangmeng/apache-jmeter-5.4.1 export PATH=${PATH}:$JMETER_HOME/bin export CLASSPATH=:$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar
保存退出,使 .bash_profile 文件內容生效。
source ~/.bash_profile
重新打開終端,輸入jmeter -v
環境變量配置成功
5、啟動程序
1、打開命令行或終端輸入jmeter,即可啟動程序(前提已配置成功環境變量)。
2、或者打開Jmeter\bin目錄下的應用程序來進行啟動。
Windows系統,雙擊jmeter.bat即可。
Mac系統,雙擊jmeter即可。
6、目錄說明
-
backups:備份目錄,是將自己的 jmx 腳本進行備份,每次保存都會將該腳本保存到該目錄下,保存多次便會保存多個同樣的文件,文件名進行默認遞增更改。
-
bin:包含啟動、配置等相關命令。
-
bin\jmeter.properties:核心配置文件,各種配置基本在這完成。
-
docs:官方接口文檔。
-
extras:輔助庫。
-
lib:存放各種 Jmeter 核心庫的源碼 jar 包,存放自己二次開發的 jar 包。
-
lib\ext:官方提供的第三方插件。
-
LICENSE:許可說明。
-
licenses:許可證等。
-
NOTICE:簡單信息說明。
-
printable_docs:離線的幫助文檔,可以查看函數等內容。
-
README.md:官方基本介紹。
7、操作示例
本篇模擬接口請求鏈接使用 moco 生成。
關於 moco 的部署與使用等,可點擊 moco 系列章節進行查閱。
1、添加線程組
【測試計划】右鍵 ---> Add ---> Threads(Users) ---> Thread Group
2、設置線程數(並發用戶數)與循環次數
本篇為接口測試講解,模擬一個用戶進行一次接口請求,所以用戶數和循環次數均為1即可。
7.1、Get請求
接口請求地址:http://localhost:8083/getdemo
如圖所示:先使用Postman,訪問此接口。
GET請求,2個參數username、password
返回數據為“操作成功”
1、添加HTTP請求
【線程組】右鍵 ---> Add ---> Sampler ---> HTTP Request
填寫相關配置信息。
方式一:
-
接口名稱:demo01
-
協議:http
-
服務器名稱或IP:localhost
-
端口號:8083
-
方法:GET
-
路徑:/getdemo
-
內容編碼:utf-8
-
Parameters:填寫對應的參數名與參數值
方式二:
-
接口名稱:demo01
-
協議:http
-
服務器名稱或IP:localhost
-
端口號:8083
-
方法:GET
-
路徑:/getdemo?username=admin&password=123456
-
內容編碼:utf-8
2、添加響應斷言
【demo01】右鍵 ---> Add ---> Assertions ---> Response Assertion
輸入斷言匹配的內容。
根據示例接口,返回的文本內容若等於“操作成功”,則就算是Pass
3、添加斷言結果
【demo01】右鍵 ---> Add ---> Listener ---> Assertion Results
4、添加查看結果樹
【demo01】右鍵 ---> Add ---> Listener ---> View Results Tree
5、運行腳本
運行方式一:【線程組】右鍵 ---> Start
運行方式二:點擊運行按鈕即可。
6、運行結果
查看斷言結果,驗證通過,Pass
查看結果樹,可查看請求與響應數據,驗證通過,Pass
7.2、Post請求
接口請求地址:http://localhost:8083/postdemo
如圖所示:先使用Postman,訪問此接口。
POST請求,2個參數username、password
返回數據為“操作成功”
1、添加HTTP請求
【線程組】右鍵 ---> Add ---> Sampler ---> HTTP Request
填寫相關配置信息。
-
接口名稱:demo02
-
協議:http
-
服務器名稱或IP:localhost
-
端口號:8083
-
方法:POST
-
路徑:/postdemo
-
內容編碼:utf-8
-
Parameters:填寫對應的參數名與參數值
2、添加響應斷言
【demo02】右鍵 ---> Add ---> Assertions ---> Response Assertion
輸入斷言匹配的內容。
根據示例接口,返回的文本內容若等於“操作成功”,則就算是Pass
3、添加斷言結果
【demo02】右鍵 ---> Add ---> Listener ---> Assertion Results
4、添加查看結果樹
【demo02】右鍵 ---> Add ---> Listener ---> View Results Tree
5、運行腳本
運行方式一:【線程組】右鍵 ---> Start
運行方式二:點擊運行按鈕即可。
6、運行結果
查看斷言結果,驗證通過,Pass
查看結果樹,可查看請求與響應數據,驗證通過,Pass
7.3、依賴請求
有兩個接口,接口1執行后返回的數據里有接口2需要用到的請求參數,則執行接口2時,要先執行接口1獲取返回的指定數據。
接口1請求地址:http://localhost:8083/demo?aaa=123&bbb=456&ccc=789
如圖所示:先使用Postman,訪問此接口。
GET請求,3個參數aaa、bbb、ccc
返回json數據為:
{
"mystatus": "操作成功",
"mytoken": "eyJhbGciOiJIUzI1NiJ9"
}
接口2請求地址:http://localhost:8083/demo2
如圖所示:先使用Postman,訪問此接口。
POST請求,請求頭有2個參數Content-Type、mytoken
返回json數據為:
{
"mystatus": "操作成功",
"mystatusid": "1"
}
發送的json串。
1、添加用戶參數
接口1和接口2都有參數ccc,且值都是789,可以設置為公共用戶變量,方便統一提取。
【線程組】右鍵 ---> Add ---> Pre Processors ---> User Parameters
填寫參數ccc與參數值789
2、添加HTTP請求(接口1)
【線程組】右鍵 ---> Add ---> Sampler ---> HTTP Request
填寫相關配置信息。
-
接口名稱:demo03-1
-
協議:http
-
服務器名稱或IP:localhost
-
端口號:8083
-
方法:GET
-
路徑:/demo
-
內容編碼:utf-8
-
Parameters:填寫對應的參數名與參數值,${ccc}為引用用戶參數ccc的值。
(1)添加響應斷言
【demo03-1】右鍵 ---> Add ---> Assertions ---> Response Assertion
輸入斷言匹配的內容。
根據示例接口1,返回的文本內容若包括所指定的“操作成功”,則就算是Pass
(2)添加斷言結果
【demo03-1】右鍵 ---> Add ---> Listener ---> Assertion Results
(3)添加查看結果樹
【demo03-1】右鍵 ---> Add ---> Listener ---> View Results Tree
(4)添加正則表達式提取器
用於提取接口1返回的指定數據,接口2會調用此數據。
【demo03-1】右鍵 ---> Add ---> Post Processors ---> Regular Expression Extractor
填寫相關正則表達式信息。
-
引用名稱:其他地方引用時的變量名稱,這里定義為 my_token,引用方法:${引用名稱}
-
正則表達式:數據提取器,()括號里為要獲取的值。"mytoken":"( 相當於LR的左邊界, )" 相當於LR的右邊界。而括號里 .*? 為正則表達式,"mytoken":"(.*?)" 匹配最短的,以 "mytoken":" 開始,以 " 結束的字符串。
-
模板:用於從找到的匹配項創建字符串的模板。這是一個帶有特殊元素的任意字符串,用於引用正則表達式中的組。引用組的語法是:$1$引用組1,$2$引用組2,等等。$0$引用整個表達式匹配的內容。
-
匹配數字:正則表達式匹配數據的所有結果可以看做一個數組,匹配數字即可看做是數組的第幾個元素。-1表示全部,0隨機,1第一個,2第二個,以此類推。若只要獲取到匹配的第一個值,則填寫1
-
缺省值:匹配失敗時的默認值。
(5)添加調試后處理器
方便在調試腳本時實時查看是否正確的提取到了所要的信息。
【demo03-1】右鍵 ---> Add ---> Post Processors ---> Debug PostProcessor
3、添加HTTP頭管理器(接口2)
接口2有請求頭信息要進行設置,所以要添加HTTP頭管理器。
【線程組】右鍵 ---> Add ---> Config Element ---> HTTP Header Manager
填寫相關配置信息。
${my_token}為引用正則表達式my_token提取接口1返回的指定值。
4、添加HTTP請求(接口2)
【線程組】右鍵 ---> Add ---> Sampler ---> HTTP Request
填寫相關配置信息。
-
接口名稱:demo03-2
-
協議:http
-
服務器名稱或IP:localhost
-
端口號:8083
-
方法:POST
-
路徑:/demo2
-
內容編碼:utf-8
-
Body Data:填寫對應的鍵值,${ccc}為引用用戶參數ccc的值。
{
"id":"1",
"username":"test",
"password":"123456",
"ccc":"${ccc}"
}
(1)添加響應斷言
【demo03-2】右鍵 ---> Add ---> Assertions ---> Response Assertion
輸入斷言匹配的內容。
根據示例接口2,返回的文本內容若包括所指定的“操作成功”,則就算是Pass
(2)添加斷言結果
【demo03-2】右鍵 ---> Add ---> Listener ---> Assertion Results
(3)添加查看結果樹
【demo03-2】右鍵 ---> Add ---> Listener ---> View Results Tree
5、運行腳本
運行方式一:【線程組】右鍵 ---> Start
運行方式二:點擊運行按鈕即可。
6、運行結果
接口1,查看斷言結果,驗證通過,Pass
接口1,查看結果樹,可查看請求與響應數據,驗證通過,Pass
接口1,查看結果樹,正則表達式所提取接口1的返回數據
接口2,查看斷言結果,驗證通過,Pass
接口2,查看結果樹,可查看請求與響應數據,驗證通過,Pass