項目地址:
https://github.com/HttpRunner/HttpRunner
中文手冊:
http://cn.httprunner.org/
首先是環境搭建:
pip install httprunner
或者
pip3 install httprunner
安裝完成后cmd執行以下命令,有返回則成功:
hrun -V
>>>0.9.7
har2case -V
>>>0.1.4
測試准備
抓包分析
在開始測試之前,我們需要先了解接口的請求和響應細節,而最佳的方式就是采用 Charles Proxy
或者 Fiddler
這類網絡抓包工具進行抓包分析(我個人強推Charles
)。
我們以某快遞查詢接口為例,在本案例中,我們先進行權限校驗,然后成功創建一個用戶,對應的網絡抓包內容如下圖所示:
接口和參數:
http://www.kuaidi100.com/query?type=huitongkuaidi&postid=350757819118
響應參數如下:
{"message":"ok","nu":"350757819118","ischeck":"1","condition":"F00","com":"huitongkuaidi","status":"200","state":"3","data":[{"time":"2017-12-21 15:42:29","ftime":"2017-12-21 15:42:29","context":"廣州市|廣州市【廣州新永和站】,周祥代 已簽收","location":""},{"time":"2017-12-21 14:28:59","ftime":"2017-12-21 14:28:59","context":"廣州市|廣州市【廣州新永和站】,【周海祥/18925068779】正在派件","location":""},{"time":"2017-12-21 14:27:59","ftime":"2017-12-21 14:27:59","context":"廣州市|到廣州市【廣州新永和站】","location":""},{"time":"2017-12-20 23:43:30","ftime":"2017-12-20 23:43:30","context":"廣州市|廣州市【廣州黃埔轉運中心】,正發往【廣州新永和站】","location":""},{"time":"2017-12-20 20:40:15","ftime":"2017-12-20 20:40:15","context":"廣州市|到廣州市【廣州黃埔轉運中心】","location":""},{"time":"2017-12-20 16:18:35","ftime":"2017-12-20 16:18:35","context":"廣州市|廣州市【廣州轉運中心】,正發往【廣州黃埔轉運中心】","location":""},{"time":"2017-12-20 08:27:05","ftime":"2017-12-20 08:27:05","context":"廣州市|到廣州市【廣州轉運中心】","location":""},{"time":"2017-12-19 03:21:02","ftime":"2017-12-19 03:21:02","context":"西安市|西安市【西安轉運中心】,正發往【廣州轉運中心】","location":""},{"time":"2017-12-18 22:52:37","ftime":"2017-12-18 22:52:37","context":"西安市|到西安市【西安轉運中心】","location":""},{"time":"2017-12-18 22:43:29","ftime":"2017-12-18 22:43:29","context":"西安市|到西安市【西安南郊二站集貨點】","location":""},{"time":"2017-12-17 21:29:25","ftime":"2017-12-17 21:29:25","context":"西安市|西安市【西安西郊五站】,【趙永剛/02962255063】已攬收","location":""}]}
然后右鍵導出,選擇har格式。
將har文件進行轉換,cmd命令:
>>> har2case kauidi.har kuaidi.json
這樣就可以把har格式的轉換為json格式的用例
分割線---------------------------------------------------------------------------------------------------
接下來重點是講用例,也就是json的組成部分。
生成的.json文件內容如下:
[
{
"config": {
"name": "testset description",
"variables": [],
"headers": {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100
Safari/537.36"
}
}
},
{
"test": {
"name": "/query",
"request": {
"params": {
"type": "huitongkuaidi",
"postid": "350757819118"
},
"url": "http://www.kuaidi100.com/query",
"method": "GET"
},
"validate": [
{
"eq": [
"status_code",
200
]
},
{
"eq": [
"headers.Content-Type",
"text/html;charset=UTF-8"
]
},
{
]
}
]
}
}
]
測試用例的格式如下:
config作為整個測試用例集的全局配置項
test:對應單個測試用例。
我從以下4個方面介紹Httprunner的優勢:
第一,斷言。
斷言參數存放在上述代碼的這個部分,因為這是自動生成的,因此我們需要根據參數的返回值自己加進去一些數據。
根據響應參數,我們加進去返回結果
執行一下,發現通過
修改斷言為其他,則執行失敗。
斷言可靠,易於維護。
第二,緩存參數。
我們想獲取,第一個參數的postid緩存,通過下面的方法:
當需要引用的時候,直接使用
這樣就在test2中使用了,test1中的緩存參數。
執行兩條用例都成功:
第三個:數據驅動
同樣,以快遞號,postid為例,假設我們要測試,從350757819118~~350757819200區間的所有快遞號碼。我們只需要講數據寫入csv文件,並創建參數和.csv文件的關聯。
例如:
執行用例:
總共執行了22條,通過一條用例(是因為預期結果的原因,同理我們也可以將所有預期結果放入csv文件,進行關聯。從而減少代碼量)。設置的數據均被執行。
最后就是測試報告:
每次執行的測試報告以html的格式保存,
內容如下:
包括詳細錯誤日志:
總結:
因為后台做了大量工作,因此我們只需要維護少量的json數據,工作量減少,效率提高。
靈活性:可根據自己需要,定義合適的方法或者數據緩存機制。
httprunner也提供了基於locust的性能測試,可根據需要直接運行json文件即可!
同時,最重要的是,測試用例和代碼的分離。這樣使得稍有編碼功底的人迅速上手。
接口用例可通過har文件錄制轉換得到,也可自己定義。
順便提一下
如果有任何問題,你可以在這里找到我 ,軟件測試交流qq群,209092584