HttpRunner3源碼剖析__init__文件幹了些啥

大家好,我是剛哥。

從這篇文章開始,將對HttpRunner3的源碼進行剖析。

爲什麼是HttpRunner3?其實pytest是一個更強大的測試框架,無奈它的源碼實在是太複雜了,連學習pytest的使用都要花上很多時間,哪還有那麼多精力去看它的源碼。而其他很多所謂的測試框架實在是太粗糙了,學不到東西不說,還可能學錯。HttpRunner正好介於兩者之間,既不復雜,也不簡單,剛剛好。

對源碼進行怎樣的剖析?HttpRunner的源碼包括這幾個目錄:docs(文檔)、examples(示例)、httprunner(源文件)、tests(測試文件),我只會選擇httprunner(源文件)來進行剖析,它的源碼全在這個目錄下。看源碼是特別費腦的,但是就算費腦也可能還是看的雲裏霧裏,這時候方法就顯得格外重要了。我覺得需要帶着問題去看,比如__init__文件幹了些啥?項目初始化結構是怎麼來的?請求是怎麼發出去的?用例是怎麼運行的?報告是怎麼生成的?等等等。

本文先從httprunner/__init__.py這個初始化文件開始,由淺入深,由易入難。它的內容很簡單:

__version__ = "3.1.6"
__description__ = "One-stop solution for HTTP(S) testing."

# import firstly for monkey patch if needed
from httprunner.ext.locust import main_locusts
from httprunner.parser import parse_parameters as Parameters
from httprunner.runner import HttpRunner
from httprunner.testcase import Config, Step, RunRequest, RunTestCase

__all__ = [
    "__version__",
    "__description__",
    "HttpRunner",
    "Config",
    "Step",
    "RunRequest",
    "RunTestCase",
    "Parameters",
]

__version__是版本號,會在很多地方用到:

__description__是描述,也會在很多地方用到:

這一行代碼:

# import firstly for monkey patch if needed
from httprunner.ext.locust import main_locusts

main_locusts是在httprunner/ext/locust/__init__.py文件中定義的。註釋是說,先把這個模塊導入進來,如果需要的話,可以在這裏添加猴子補丁。有點費解,只有這一處代碼:

先看下__all__的作用,再來猜測。

__all__是爲了方便其他地方直接通過from httprunner import來導入包,比如裏面的HttpRunner是from httprunner.runner import HttpRunner這樣導入的,加入到__all__以後,就能直接from httprunner import HttpRunner來導入了:

省去了from httprunner.runner這種代碼。

那麼那個猴子補丁,我對它用法的猜測是這樣的:

# import firstly for monkey patch if needed
from httprunner.ext.locust import main_locusts

def main_locusts_monkey_patch():
    # ...
    

main_locusts = main_locusts_monkey_patch
   

__all__ = [
    "main_locusts"
]

有任何不同想法,歡迎加羣討論喲。

參考資料:

https://github.com/httprunner/httprunner

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章