<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      代碼改變世界

      從pytest源碼的角度分析pytest工作原理

      2024-07-30 16:00  清風軟件測試開發  閱讀(807)  評論(0)    收藏  舉報

      從pytest源碼的角度分析pytest工作原理

      pytest 源代碼的角度來分析其工作原理,我們需要關注幾個關鍵的部分,特別是 pytest 的啟動過程以及測試的收集與執行。下面是基于 pytest 源代碼的一個高層次的概述。

       

      pytest 的啟動過程

      1. 命令行解析:

        • pytest 的入口點是 conftest.py 文件中的 pytest.main() 函數。
        • 在這個函數中,首先通過 pytest.config.get_config() 獲取配置。
        • 接著使用 pytest.config.parse() 來解析命令行參數。
      2. 配置加載:

        • pytest 會在當前目錄及其父目錄遞歸地查找配置文件,比如 pytest.ini 或 pyproject.toml
        • 使用 pytest.config.Config 類來存儲配置信息。
      3. 插件管理:

        • 通過 pytest.hookspec 和 pytest.pluginmanager 來管理插件。
        • 插件可以在各個階段被注冊并調用。

      測試收集過程

      1. 收集器初始化:

        • pytest 使用 pytest.collect 模塊來處理測試收集。
        • Session.from_parent 方法創建一個新的 Session 實例。
        • Collector.from_parent 方法用于構建收集器樹。
      2. 測試文件發現:

        • pytest 通過 Session.perform_collect 方法來遍歷目錄結構并發現測試模塊。
        • File.from_parent 方法用于創建 File 實例來代表測試文件。
        • Function.from_parent 方法用于創建 Function 實例來代表測試函數。
      3. 測試項構建:

        • 一旦發現了測試文件,就會通過 collect 方法來收集文件中的測試函數。
        • 測試函數會被轉換成 Item 實例。

      測試執行過程

      1. 測試項準備:

        • 在測試開始之前,會調用 Session.perform_setup 方法來進行一些預處理。
        • 這個階段可能包括設置環境變量、初始化數據庫連接等。
      2. 測試項執行:

        • Session.runtestloop 方法控制測試項的實際執行。
        • 對于每一個 Item 實例,都會調用 Session.perform_test 方法來執行測試。
      3. 測試結果收集:

        • 測試執行的結果會被收集并存儲在 Item 實例中。
        • 可能會觸發 pytest_runtest_logreport hook,該 hook 被用來處理測試報告。
      4. 異常處理:

        • 如果測試過程中發生異常,pytest 會捕獲這些異常并記錄下來。
        • 異常可以通過 pytest_runtest_makereport hook 來處理。

      測試報告生成

      1. Session 實例負責收集所有的測試結果。
      2. Session.exitstatus 屬性會根據測試結果來確定程序的退出狀態碼。
      3. pytest 可以生成多種格式的報告,這取決于安裝的插件。

      示例代碼片段

      下面是一些示例代碼片段,展示了 pytest 源代碼中的關鍵部分:

      # pytest/conftest.py
      def main(args=None):
          # 解析命令行參數
          config = get_config(args)
          # 加載插件
          pm = PluginManager()
          pm.load_setuptools_entrypoints('pytest11')
          # 創建 Session 實例
          session = Session.from_parent(config, plugins=pm)
          # 執行測試
          session.runtestloop()
          # 返回退出狀態
          return session.exitstatus
      
      # pytest/collect.py
      def perform_collect(session, collector):
          # 收集測試文件和測試函數
          items = []
          for item in collector.collect():
              items.append(item)
          return items
      
      # pytest/runner.py
      def runtest_protocol(item, nextitem):
          # 執行測試項
          report = item.runtest()
          if report is None:
              # 處理異常情況
              report = item.makereport()
          # 處理測試報告
          item.session._hookmanager.hook.pytest_runtest_logreport(report=report)

       

      主站蜘蛛池模板: 久久精品国产亚洲av麻| 久热这里只有精品12| 成人无码视频| 亚洲青青草视频在线播放| 久久人妻精品国产| 粉嫩av国产一区二区三区| 五月天中文字幕mv在线| 年日韩激情国产自偷亚洲| 少妇无套内射中出视频| 亚洲国产精品老熟女乱码| 广东少妇大战黑人34厘米视频 | 亚洲精品天堂一区二区| 揭西县| 最新亚洲av日韩av二区| 国产免费人成网站在线播放| 亚洲午夜久久久久久噜噜噜| 一区二区三区精品不卡| 国产精品自拍午夜福利| 在线a亚洲v天堂网2018| 黑人玩弄人妻中文在线| 国产精品一区二区三区色| 久久精品人人槡人妻人人玩AV| 人妻一区二区三区三区| 少妇人妻偷人精品一区二| 国产精品区免费视频| 狠狠色噜噜狠狠狠狠蜜桃| 亚洲精品国产综合久久一线| 99国精品午夜福利视频不卡99| 一级女性全黄久久片免费| 99九九成人免费视频精品| 国产不卡精品视频男人的天堂| 国产亚洲无线码一区二区| 中文字幕乱码在线播放| 日本免费人成视频在线观看| 日本夜爽爽一区二区三区| 亚洲一区二区三区黄色片| 无码内射中文字幕岛国片| 久久久久无码中| 无遮无挡爽爽免费视频| 中文 在线 日韩 亚洲 欧美| 国产99精品成人午夜在线|