上一篇簡單介紹了httprunner的主要特征及簡單使用,從本篇開始陸續解讀httprunner3源碼。
1、為什么寫httprunner的源碼解讀?
- 當下Python系的接口測試框架多數基於httprunner實現或采用了類似的設計思想,httprunner可以作為一個典型來深入了解。
- 閱讀httprunner3源碼並學習其設計思想,自己在工作中也有寫過一些接口測試框架並應用與測試團隊中,覺得做的還不錯,且沒依賴現有的框架,但是隨着項目規模不斷增大、場景需求的增加,還是有設計上不合理,基於已有測試數據較多,可能還只能做補丁修改,極不方便再做設計變更。
- 記錄自己基於httprunner接口測試框架的二次開發歷程,希望也能幫到你。
- 關於接口測試框架設計原則,可以參考 自動化測試框架設計原則
2、依賴庫
上一篇有講到httprunner擁抱開源,依賴requests ,pytest ,pydantic ,allure 和 locust ,除此外還依賴一些比較好用的第三方庫。官方文檔(https://docs.httprunner.org/)
1 black==19.10b0 # python 代碼格式化工具 2 Brotli==1.0.9 # 壓縮 3 Jinja2==2.11.3 # 模板文件,生產測試文件 4 jmespath==0.9.5 # json 提取,語法參考 https://jmespath.org/tutorial.html 5 loguru==0.4.1 # 日志 6 pydantic==1.8.2 # 數據類型定義,類型校驗 7 pytest==5.4.3 # 單元測試框架 8 pytest-html==2.1.1 # pytest生成html報告 9 PyYAML==5.4.1 # 解析yaml 10 allure-pytest==2.8.16 # 生成allure 報告 11 requests==2.26.0 # 請求庫 12 sentry-sdk==0.14.4 # 捕捉異常 13 locust = "^2.4.1" # 協程實現的性能測試工具
3、demo目錄
新建一個demo后最終目錄如下:
httprunner startproject demo
4、源碼目錄
1 # https://github.com/httprunner/httprunner 2 git clone https://github.com/httprunner/httprunner.git
4.1、httprunner目錄結構分析
1 │ cli.py # 命令集封裝 2 │ client.py # request封裝,網絡請求client 3 │ compat.py # 用例適配,處理testcase格式v2和v3之間的兼容性問題。 4 │ exceptions.py # 自定義異常 5 │ loader.py # 加載用例設計文件JSON/YAML、環境變量、參數化,生成model定義的測試數據 6 │ make.py # 依據測試數據生產pytest測試文件,並格式化生成的python代碼 7 │ models.py # pydantic 數據模型定義 8 │ parser.py # 參數解析器,解析用例當中引用變量、自定義方法等 9 │ response.py # 響應內容處理:斷言、變量提取 10 │ runner.py # 執行/啟動器 11 │ scaffold.py # HttpRunner 腳手架,快速生成httprunner測試項目 12 │ testcase.py # 測試用例對象封裝 13 │ utils.py # 工具類 14 │ __init__.py # 初始化文件,指定httprunner庫包含的模塊 15 │ __main__.py # httprunner命令入庫,調用cli.py的main函數 16 │ 17 ├─app # 網絡服務模塊 18 │ │ main.py 19 │ │ __init__.py 20 │ │ 21 │ └─routers 22 │ │ debug.py 23 │ │ debugtalk.py 24 │ │ deps.py 25 │ └─__init__.py 26 │ 27 ├─builtin # 內置方法、校驗比較器,供YAML/JSON用例設計文件中testcases使用 28 │ │ comparators.py 29 │ │ functions.py 30 │ └─__init__.py 31 │ 32 └─ext # 擴展功能 33 │ __init__.py 34 │ 35 ├─har2case # har 文件 轉 httprunner測試用例文件 36 │ │ core.py 37 │ │ utils.py 38 │ └─__init__.py 39 │ 40 ├─locust # 性能測試相關 41 │ │ locustfile.py 42 │ └─__init__.py 43 │ 44 └─uploader # 文件上傳 45 │ 46 └─__init__.py
4.2、框架流程
-------- THE END --------