用Jmeter進(jìn)行接口測試
web接口測試工具:
手工測試的話可以用postman ,自動化測試多是用到 Jmeter(開源)、soupUI(開源&商業(yè)版)。
下面將對前一篇Postman做接口測試中的接口用Jmeter來實現(xiàn)。
一、Jmeter 的使用步驟
打開Jmeter 安裝包,進(jìn)入\bin 中,找到"jmeter.bat", 點擊打開即可。
在下圖打開的Jmeter 頁面中,右鍵“測試計劃” -> “添加” -> "Threads(Users)" -> “線程組”, 建立線程組。

右鍵“線程組” -> “添加” -> “Sample” -> “HTTP請求”, 輸入“服務(wù)器名稱或IP”,對應(yīng)的端口號,http默認(rèn)端口號80,可以不寫。
以下請求為GET, 所有“方法”那選擇“GET”, 輸入對應(yīng)的路徑,添加參數(shù)及值。

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

右鍵“線程組” -> “添加” -> “監(jiān)聽器” -> “察看結(jié)果數(shù)”, 添加“察看結(jié)果數(shù)”, 以察看運行后的結(jié)果,如果所示。

這是一個簡單的接口請求例子。
二、接口請求實例
1. “用戶定義的變量” 的應(yīng)用
以獲取學(xué)生信息接口(stu_info) 為例,添加一個“用戶定義的變量”,設(shè)置變量"host" 以及值,這樣在獲取學(xué)生信息接口(stu_info)就可以通過"${host}"取得“服務(wù)器名稱或IP”的值。


登陸接口(login)接口也可以應(yīng)用“用戶定義的變量”的方法,如上圖所示,在“用戶定義的變量”中添加"username", "password" 變量及對應(yīng)的值, 應(yīng)用到登陸接口(login)接口請求中即可。

2. "HTTP Cookie 管理器"的應(yīng)用
以金幣充值接口(gold_add)為例,建立一個HTTP請求改名“金幣充值”,選取請求方式POST, 輸入對應(yīng)的host, path以及同請求一起發(fā)送的參數(shù)和值。

由于此接口有權(quán)限驗證,需要admin用戶才可以做操作,需要添加cookie, 因此需要添加"HTTP Cookie 管理器"以傳遞Cookie。
添加"HTTP Cookie 管理器" 方法如下圖所示, 右鍵“金幣充值” -> “添加” -> “配置元件” -> "HTTP Cookie 管理器"

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

最后可以通過“察看結(jié)果數(shù)”的響應(yīng)數(shù)據(jù)查看結(jié)果。
3. 建立接口間的關(guān)聯(lián)
以下以登陸接口(login)和金幣充值接口(gold_add)為例,在這兩個接口間建立關(guān)聯(lián),讓金幣充值接口(gold_add)可以實時取得登陸接口(login)的"sign" 值,不必再“HTTP Cookie 管理器”中手動輸入最新的sign 值。
從“察看結(jié)果樹”可以看出,登陸接口(login)的Response 結(jié)構(gòu)為Json格式, sign 在 login_info 里面一層。

3.1 應(yīng)用"jp@gc - JSON Path Extractor" 來實現(xiàn)
右鍵“登陸” -> “后置處理器 -> "jp@gc - JSON Path Extractor"

通過“察看結(jié)果數(shù)”得到Response 的結(jié)果后, 將“JSONPath Expression” 輸入"$.login_info.sign", 設(shè)置變量"sign2", 給金幣充值接口(gold_add)用

因此需要在“HTTP Cookie 管理器”中將${username}的值輸入${sign2},代替之前手動輸入的那一串碼。

3.2 右鍵“登陸” -> “后置處理器 -> "正則表達(dá)式提取器"

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

各參數(shù)的含義參考下表:
|
參數(shù) |
釋義 |
|
引用名稱 |
在HTTP等請求中,引用此數(shù)據(jù),需要用到的名稱 |
|
正則表達(dá)式 |
用于將需要的數(shù)據(jù)提取出來 |
|
模板 |
表示使用提取到的第幾個值: |
|
匹配數(shù)字(0代表隨機) |
0 代表隨機取值,1 代表全部取值 |
|
缺省值 |
如果正則表達(dá)式?jīng)]有搜找到值,則使用此缺省值 |
4. 設(shè)置斷言
以“增加學(xué)生”接口(add_stu)為例,增加響應(yīng)斷言,以驗證添加的數(shù)據(jù)是否成功。如下圖所示設(shè)置

通過“察看結(jié)果數(shù)”可以看到“增加學(xué)生” 金幣結(jié)果為綠色,同時響應(yīng)數(shù)據(jù)里的確有斷言中的設(shè)置的"1000"。

5. “HTTP信息頭管理器”的使用
以下圖中的“獲取所有學(xué)生信息” 為例,右鍵“獲取所有學(xué)生信息” -> “添加” -> “配置元件” -> "HTTP Cookie 管理器" , 輸入對應(yīng)的名稱和值即可。
注意: 這里的值需要輸入完整的url, 包括http:// (eg, 輸入http://api.test.cn)

6. POST 文件的使用方法
與其他POST請求中添加key-value, json 數(shù)據(jù)不同的是,這個需要在HTTP 請求中點擊“Flies Upload” tab, 點擊“添加”, 然后通過“瀏覽”上傳本地的文件。
注意: 參數(shù)名稱必須為"file"。

7. "CSV Data Set Config" 和 “函數(shù)助手對話框”的使用
以增加學(xué)生接口(add_stu)為例,在本地創(chuàng)建一個文件,添加name 和sex的值,對腳本設(shè)置5個線程或者循環(huán)5次,以加入這5個用戶。

右鍵“線程組” -> “添加” -> “配置元件” -> "CSV Data Set Config",如果僅應(yīng)用于“增加學(xué)生”接口的話,可以直接在“增加學(xué)生”接口下面創(chuàng)建"CSV Data Set Config"。

根據(jù)下圖添加對應(yīng)的,"Variable Names" 輸入"name" 和"sex", 以逗號隔開,為避免插入的數(shù)據(jù)亂碼,將file encoding 設(shè)置為utf-8。

由于"CSV Data Set Config"中的變量名為name 和sex,因此在“增加學(xué)生”接口的"Body Data" 中將值分別替換為${name}, ${sex}。

由于“phone”的唯一性,每次插入一條學(xué)生信息時phone 都要求不一樣,所以對后面8位用隨機函數(shù)來實現(xiàn)。

8. 數(shù)據(jù)庫的應(yīng)用
以下是JMeter 驅(qū)動數(shù)據(jù)庫列表:
|
數(shù)據(jù)庫 |
驅(qū)動 |
數(shù)據(jù)庫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 數(shù)據(jù)庫為例。
添加一個"JDBC Connection Configuration", 根據(jù)上表中對mysql的要求設(shè)置下圖的值。

添加一個"JDBC Request", 由于在Query 中有insert 和select, 所以Query Type 需要選擇"Callable Statement", 如果是單個的select 或者insert,可以選取對應(yīng)的Select Statement 和Update Statement。

通過察看結(jié)果數(shù)看到"JDBC Request" 請求成功,響應(yīng)數(shù)據(jù)里返回insert 和select 的結(jié)果。

登陸mysql 數(shù)據(jù)庫,查詢發(fā)現(xiàn)和Jmeter 中通過察看結(jié)果數(shù)看到的結(jié)果一致。

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

對于Jmeter 里中文顯示不出來的問題,可以打開"\bin" 路徑下的"jmeter.properties" 文件,如下圖所示,將這幾個JS開頭的注釋去掉。

對于以上兩個問題,修改后,需將Jmeter 重啟才能起效。

浙公網(wǎng)安備 33010602011771號