pytest常用的方法和原理

1.pytest的原理

  1. pytest外掛基於pluggy模組;pluggy有三個重要概念:HookspecMarker(用來定義hook函式),HookimplMarker(用來實現鉤子函式完成外掛的邏輯)和PluginManager(用來負責註冊和呼叫外掛的管理器);

2.pytest的規定

  1. 所有規範和實現均遵循pytest_字首命名約定,從而易於區分和查詢

3.載入外掛的方式

  1. 內建外掛:從程式碼內部的_pytest目錄載入
  2. 外部外掛(第三方外掛):通過setuptools entry points機制發現的第三方外掛模組
  3. conftest.py形式的本地外掛:測試目錄下的自動模組發現機制

4.pytest外掛的順序

1.通過掃描命令列中的選項並阻止該外掛被載入(即使內建外掛也可以通過這種方式被阻止)。這是在正常的命令列解析之前發生的。-p no:name

2.載入所有的內建外掛

3.通過預掃描命令列中,-p name選項,在實際解析命令列之前載入指定的外掛

4.載入所有通過setuptools入口點註冊的外掛(可設定環境變數PYTEST_DISABLE_PLUGIN_AUTOLOAD進行禁用,僅載入明確指定的外掛)

5.載入通過環境變數PYTEST_PLUGINS指定的所有外掛

6.載入通過命令列推斷出的所有confest.py檔案:

-如果未指定測試路徑,則使用當前dir作為測試路徑

-如果存在指定測試路徑,那麼載入conftest.py和test */conftest.py,相對於第一個測試路徑

注意,pytest是找不到藏在更深的子目錄裡的confest.py檔案的,最好將confest.py儲存在頂級的測試或者專案的根目錄

7.通過在confest.py檔案中的pytest_plugin指定的變數,遞迴載入所有的外掛

5.安裝路徑

  • pytest第三方外掛庫網站 https://docs.pytest.org/en/latest/plugins.html
  • PyPI下載 https://pypi.python.org(可以使用pytest、pytest-、-pytest作為搜尋關鍵字來搜尋外掛)

6.常用的外掛簡單描述

  • pytest-rerunfailures:失敗用例重跑
  • pytest-html:生成xml/html格式的測試報告,儲存於使用者指定路徑
  • pytest-repeat:重複執行多次用例
  • pytest-assume:進行多次斷言
  • pytest-xdist:測試用例可以分散式執行,從而節省自動化測試時間
  • pytest-cov:覆蓋率報告,顯示哪些程式碼行已經測試過,哪些還沒有
  • pytest-instafail:在測試執行期間報告失敗
  • pytest-timeout:根據函式標記或全域性定義進行超時測試
  • pytest-ordering:設定執行順序。對於一些上下文依賴的,有時候可能需要設定一些特定執行順序
  • pytest-cache:重跑上次失敗的用例
  • pytest-autochecklog:自動生成測試日誌
  • pytest-sugar:改變預設外觀,添加了一個進度條