簡介
2018年python開發者大會上,瞭解到HttpRuuner開源自動化測試框架,採用YAML/JSON格式管理用例,能錄製和轉換生成用例功能,充分作到用例與測試代碼分離,相比excel維護測試場景數據更加簡潔。在此,利用業餘時間研究這個框架去實現接口自動化測試。python
HttpRunner 是一款面向 HTTP(S) 協議的通用開源測試框架,只需編寫維護一份 YAML/JSON
腳本,便可實現自動化測試、性能測試、線上監控、持續集成等多種測試需求。git
主流接口自動化工具框架:github
從上圖可知,技術選型通常會優先考慮Requests+Python和HttpRunner,Requests+Python在自動化測試總結分類裏面有文章講過,這裏咱們針對HttpRunner進行探索。json
框架流程
主要特性:api
- 繼承 Requests 的所有特性,輕鬆實現 HTTP(S) 的各類測試需求
- 採用
YAML/JSON
的形式描述測試場景,保障測試用例描述的統一性和可維護性 - 藉助輔助函數(debugtalk.py),在測試腳本中輕鬆實現複雜的動態計算邏輯
- 支持完善的測試用例分層機制,充分實現測試用例的複用
- 測試先後支持完善的 hook 機制
- 響應結果支持豐富的校驗機制
- 基於 HAR 實現接口錄製和用例生成功能(har2case)
- 結合 Locust 框架,無需額外的工做便可實現分佈式性能測試
- 執行方式採用 CLI 調用,可與 Jenkins 等持續集成工具完美結合
- 測試結果統計報告簡潔清晰,附帶詳盡統計信息和日誌記錄
- 極強的可擴展性,輕鬆實現二次開發和 Web 平臺化
環境安裝:數據結構
HttpRunner 是一個基於 Python 開發的測試框架,能夠運行在 macOS、Linux、Windows 系統平臺上。HttpRunner 支持 Python 3.4 及以上的全部版本,推薦建議使用 Python 3.4 及以上版本。框架
使用pip命令安裝:pip3 install httprunner 【因本人環境裝有python兩個版本,這裏使用是python3.6版本,就使用pip3命令,如是python2.7版本的話,就用pip命令安裝】python2.7
安裝完成後校驗:分佈式
如版本號正常顯示,則說明安裝正常。
ide
基礎功能
一、 錄製生成用例
在轉換生成測試用例以前,須要先將抓取獲得的數據包導出爲 HAR 格式的文件。使用Charles抓包工具 Proxy
中的操做方式爲,選中須要轉換的接口(可多選或全選),點擊右鍵,在懸浮的菜單目錄中點擊【Export...】,格式選擇HTTP Archive(.har)
後保存便可;假設咱們保存的文件名稱爲test.har
轉換測試用例
在命令行終端中運行 har2case 命令,便可將 test.har 轉換爲 HttpRunner 的測試用例文件。 使用 har2case
轉換腳本時默認轉換爲 JSON 格式
加上 -2y
/--to-yml
參數後轉換爲 YAML 格式
兩種格式徹底等價,YAML 格式更簡潔,JSON 格式支持的工具更豐富,你們可根據我的喜愛進行選擇。
生成後的用例以下圖所示:
json格式:
YAML格式:
config
:做爲整個測試用例集的全局配置項test
:對應單個測試用例name
這個test的名字request
這個test具體發送http請求的各類信息, 以下:url
請求的路徑 (若config中有定義base_url, 則完整路徑是用 base_url + url )method
請求方法 POST, GET等等- data 傳入參數值
validate
完成請求後, 所要進行的驗證內容. 全部驗證內容均經過該test纔算經過,不然失敗.
二、運行測試
若但願測試用例在運行過程當中,遇到失敗時再也不繼續運行後續用例,則可經過在命令中添加--failfast
實現。如:hrun test.yaml --failfast
若須要查看到更詳盡的信息,例如請求的參數和響應的詳細內容,能夠將日誌級別設置爲DEBUG
,即在命令中添加--log-level debug
。如:hrun test.yaml --log-level debug
爲了方便定位問題,運行測試時可指定 --save-tests
參數,便可將運行過程的中間數據保存爲日誌文件。
日誌文件將保存在項目根目錄的 logs
文件夾中,生成的文件有以下三個(XXX爲測試用例名稱):
XXX.loaded.json
:測試用例加載後的數據結構內容,加載包括測試用例文件(YAML/JSON)、debugtalk.py、.env 等全部項目文件,例如test-quickstart-6.loaded.json
XXX.parsed.json
:測試用例解析後的數據結構內容,解析內容包括測試用例引用(API/testcase)、變量計算和替換、base_url 拼接等,例如test-quickstart-6.parsed.json
XXX.summary.json
:測試報告生成前的數據結構內容,例如test-quickstart-6.summary.json
三、測試報告
默認狀況下,生成的測試報告文件會位於項目根目錄的 reports 文件夾中,文件名稱爲測試開始的時間戳。HttpRunner 中自帶了一個 Jinja2 格式的默認報告模版
測試報告形式以下:
在 Summary 中,會羅列本次測試的總體信息,包括測試開始時間、總運行時長、運行的Python版本和系統環境、運行結果統計數據。
在 Details 中,會詳細展現每一條測試用例的運行結果。
點擊測試用例對應的 log 按鈕,會在彈出框中展現該用例執行的詳細數據,包括請求的 headers 和 body、響應的 headers 和 body、校驗結果、響應、響應耗時(elapsed)等信息。
默認狀況下,生成的測試報告文件會位於項目根目錄的 reports 文件夾中。如需指定生成報告的路徑,可使用 --report-dir
參數。
如: hrun test.yaml --dirreport-name g:\home
其它高級特性如數據參數化、用例分層、環境變量等用法請參考官網中文手冊詳細介紹。
四、建立項目
使用方式也與Django
相似,只須要經過--startproject
指定新項目的名稱便可。如:hrun --startproject httpapidemo
運行後,就會在指定的目錄中生成新項目的目錄結構,接下來,咱們就能夠按照測試用例的接口-模塊-場景
分層原則往裏面添加用例描述信息了。
須要注意的是,咱們在組織測試用例描述的文件目錄結構時,遵循約定大於配置的原則:
- API接口定義必須放置在
api
目錄下 - 模塊定義必須放置在
suite
目錄下 - 測試場景文件必須放置在
testcases
目錄下 - 相關的函數定義放置在
debugtalk.py
中
具體新增用例目錄結構例子以下: