用Jmeter進行接口測試及亂碼問題

 

web接口測試工具:

     手工測試的話能夠用postman ,自動化測試可能是用到 Jmeter(開源)、soupUI(開源&商業版)。mysql

     

下面將對前一篇Postman作接口測試中的接口用Jmeter來實現。web

1、Jmeter 的使用步驟

打開Jmeter 安裝包,進入\bin 中,找到"jmeter.bat", 點擊打開便可。正則表達式

在下圖打開的Jmeter 頁面中,右鍵「測試計劃」 -> 「添加」 -> "Threads(Users)" -> 「線程組」, 創建線程組。sql

右鍵「線程組」 -> 「添加」 -> 「Sample」 -> 「HTTP請求」, 輸入「服務器名稱或IP」,對應的端口號,http默認端口號80,能夠不寫。數據庫

如下請求爲GET, 全部「方法」那選擇「GET」, 輸入對應的路徑,添加參數及值。json

注意: 「服務器名稱或IP」中不用輸入http://, 請求時會自動加入(eg, 輸入api.test.cn).api

右鍵「線程組」 -> 「添加」 -> 「監聽器」 -> 「察看結果數」, 添加「察看結果數」, 以察看運行後的結果,若是所示。服務器

這是一個簡單的接口請求例子。cookie

2、接口請求實例

1. 「用戶定義的變量」 的應用

以獲取學生信息接口(stu_info) 爲例,添加一個「用戶定義的變量」,設置變量"host" 以及值,這樣在獲取學生信息接口(stu_info)就能夠經過"${host}"取得「服務器名稱或IP」的值。oracle

 

登錄接口(login)接口也能夠應用「用戶定義的變量」的方法,如上圖所示,在「用戶定義的變量」中添加"username", "password" 變量及對應的值, 應用到登錄接口(login)接口請求中便可。

 2. "HTTP Cookie 管理器"的應用

以金幣充值接口(gold_add)爲例,創建一個HTTP請求更名「金幣充值」,選取請求方式POST, 輸入對應的host, path以及同請求一塊兒發送的參數和值。

因爲此接口有權限驗證,須要admin用戶才能夠作操做,須要添加cookie, 所以須要添加"HTTP Cookie 管理器"以傳遞Cookie。

添加"HTTP Cookie 管理器" 方法以下圖所示, 右鍵「金幣充值」 -> 「添加」 -> 「配置元件」 -> "HTTP Cookie 管理器" 

設置Cookie 的名稱(即username 的值),值(即login Response 中的sign 值),域(已在「用戶定義的變量」中設置,只需輸入變量便可,格式爲${host})

最後能夠經過「察看結果數」的響應數據查看結果。

3. 創建接口間的關聯

如下以登錄接口(login)和金幣充值接口(gold_add)爲例,在這兩個接口間創建關聯,讓金幣充值接口(gold_add)能夠實時取得登錄接口(login)的"sign" 值,沒必要再「HTTP Cookie 管理器」中手動輸入最新的sign 值。

從「察看結果樹」能夠看出,登錄接口(login)的Response 結構爲Json格式, sign 在 login_info 裏面一層。

3.1 應用"jp@gc - JSON Path Extractor" 來實現

右鍵「登錄」 -> 「後置處理器 -> "jp@gc - JSON Path Extractor" 

經過「察看結果數」獲得Response 的結果後, 將「JSONPath Expression」 輸入"$.login_info.sign", 設置變量"sign2", 給金幣充值接口(gold_add)用

所以須要在「HTTP Cookie 管理器」中將${username}的值輸入${sign2},代替以前手動輸入的那一串碼。

3.2 右鍵「登錄」 -> 「後置處理器 -> "正則表達式提取器" 

輸入對應的值, "jp@gc - JSON Path Extractor" 中相似,將「引用名稱」輸入"sign2",以保證和「HTTP Cookie 管理器」的一致。將正則表達式中的式用login 接口返回的 "sign": "cd2b43f1688e472e3a516b5a2c6831e8",  中的一串碼用(.*) 替換便可。

各參數的含義參考下表:

參數

釋義

引用名稱

在HTTP等請求中,引用此數據,須要用到的名稱

正則表達式

用於將須要的數據提取出來

模板

表示使用提取到的第幾個值:
$-1$:表示取全部值
$0$:表示隨機取值
$1$:表示取第1個
$2$:表示取第二個
以此類推:$n$:表示取第n個

匹配數字(0表明隨機)

0 表明隨機取值,1 表明所有取值

缺省值

若是正則表達式沒有搜找到值,則使用此缺省值

4. 設置斷言

以「增長學生」接口(add_stu)爲例,增長響應斷言,以驗證添加的數據是否成功。以下圖所示設置

經過「察看結果數」能夠看到「增長學生」 金幣結果爲綠色,同時響應數據裏的確有斷言中的設置的"1000"。

 

 5. 「HTTP信息頭管理器」的使用

如下圖中的「獲取全部學生信息」 爲例,右鍵「獲取全部學生信息」 -> 「添加」 -> 「配置元件」 -> "HTTP Cookie 管理器" , 輸入對應的名稱和值便可。

注意:  這裏的值須要輸入完整的url, 包括http:// (eg, 輸入http://api.test.cn)

6. POST 文件的使用方法

與其餘POST請求中添加key-value, json 數據不一樣的是,這個須要在HTTP 請求中點擊「Flies Upload」 tab, 點擊「添加」, 而後經過「瀏覽」上傳本地的文件。

注意: 參數名稱必須爲"file"。

7. "CSV Data Set Config" 和 「函數助手對話框」的使用

以增長學生接口(add_stu)爲例,在本地建立一個文件,添加name 和sex的值,對腳本設置5個線程或者循環5次,以加入這5個用戶。 

右鍵「線程組」 -> 「添加」 -> 「配置元件」 -> "CSV Data Set Config",若是僅應用於「增長學生」接口的話,能夠直接在「增長學生」接口下面建立"CSV Data Set Config"。

根據下圖添加對應的,"Variable Names" 輸入"name" 和"sex", 以逗號隔開,爲避免插入的數據亂碼,將file encoding 設置爲utf-8。

因爲"CSV Data Set Config"中的變量名爲name 和sex,所以在「增長學生」接口的"Body Data" 中將值分別替換爲${name}, ${sex}。

因爲「phone」的惟一性,每次插入一條學生信息時phone 都要求不同,因此對後面8位用隨機函數來實現。

8. 數據庫的應用

如下是JMeter 驅動數據庫列表:

數據庫

驅動

數據庫url

mysql

com.mysql.jdbc.Driver

jdbc:mysql://host:port/{dbname}?allowMultiQueries=true

oracle

org.postgresql.Driver

jdbc:postgresql:{dbname}

PostgreSQL

oracle.jdbc.driver.OracleDriver

jdbc:oracle:thin:user/pass@//host:port/service

MSSQL

com.microsoft.sqlserver.jdbc.SQLServerDriver

或者

net.sourceforge.jtds.jdbc.Driver

 

jdbc:sqlserver://IP:1433;databaseName=DBname

或者

jdbc:jtds:sqlserver://localhost:1433/"+"library"

 

如下以mysql 數據庫爲例。

添加一個"JDBC Connection Configuration", 根據上表中對mysql的要求設置下圖的值。 

添加一個"JDBC Request", 因爲在Query 中有insert 和select, 因此Query Type 須要選擇"Callable Statement", 若是是單個的select 或者insert,能夠選取對應的Select Statement 和Update Statement。

經過察看結果數看到"JDBC Request" 請求成功,響應數據裏返回insert 和select 的結果。

登錄mysql 數據庫,查詢發現和Jmeter 中經過察看結果數看到的結果一致。

 

 **注意點:修改Jmeter 中的中文亂碼要將"\bin" 路徑下的"jmeter.properties" 文件中設置爲 "sampleresult.default.encoding=utf-8",以下所示。

對於Jmeter 裏中文顯示不出來的問題,能夠打開"\bin" 路徑下的"jmeter.properties" 文件,以下圖所示,將這幾個JS開頭的註釋去掉。

對於以上兩個問題,修改後,需將Jmeter 重啓才能起效。

相關文章
相關標籤/搜索