手工測試的話能夠用postman ,自動化測試可能是用到 Jmeter(開源)、soupUI(開源&商業版)。mysql
下面將對前一篇Postman作接口測試中的接口用Jmeter來實現。web
打開Jmeter 安裝包,進入\bin 中,找到"jmeter.bat", 點擊打開便可。正則表達式
在下圖打開的Jmeter 頁面中,右鍵「測試計劃」 -> 「添加」 -> "Threads(Users)" -> 「線程組」, 創建線程組。sql
右鍵「線程組」 -> 「添加」 -> 「Sample」 -> 「HTTP請求」, 輸入「服務器名稱或IP」,對應的端口號,http默認端口號80,能夠不寫。數據庫
如下請求爲GET, 全部「方法」那選擇「GET」, 輸入對應的路徑,添加參數及值。json
注意: 「服務器名稱或IP」中不用輸入http://, 請求時會自動加入(eg, 輸入api.test.cn).api
右鍵「線程組」 -> 「添加」 -> 「監聽器」 -> 「察看結果數」, 添加「察看結果數」, 以察看運行後的結果,若是所示。服務器
這是一個簡單的接口請求例子。cookie
以獲取學生信息接口(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})
最後能夠經過「察看結果數」的響應數據查看結果。
如下以登錄接口(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等請求中,引用此數據,須要用到的名稱 |
正則表達式 |
用於將須要的數據提取出來 |
模板 |
表示使用提取到的第幾個值: |
匹配數字(0表明隨機) |
0 表明隨機取值,1 表明所有取值 |
缺省值 |
若是正則表達式沒有搜找到值,則使用此缺省值 |
以「增長學生」接口(add_stu)爲例,增長響應斷言,以驗證添加的數據是否成功。以下圖所示設置
經過「察看結果數」能夠看到「增長學生」 金幣結果爲綠色,同時響應數據裏的確有斷言中的設置的"1000"。
5. 「HTTP信息頭管理器」的使用
如下圖中的「獲取全部學生信息」 爲例,右鍵「獲取全部學生信息」 -> 「添加」 -> 「配置元件」 -> "HTTP Cookie 管理器" , 輸入對應的名稱和值便可。
注意: 這裏的值須要輸入完整的url, 包括http:// (eg, 輸入http://api.test.cn)
與其餘POST請求中添加key-value, json 數據不一樣的是,這個須要在HTTP 請求中點擊「Flies Upload」 tab, 點擊「添加」, 而後經過「瀏覽」上傳本地的文件。
注意: 參數名稱必須爲"file"。
以增長學生接口(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位用隨機函數來實現。
如下是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 重啓才能起效。