Pytest官方教程-25-Pytest導入機制及sys.path/PYTHONPATH

目錄:

  1. 安裝及入門
  2. 使用和調用方法
  3. 原有TestSuite使用方法
  4. 斷言的編寫和報告
  5. Pytest fixtures:清晰 模塊化 易擴展
  6. 使用Marks標記測試用例
  7. Monkeypatching/對模塊和環境進行Mock
  8. 使用tmp目錄和文件
  9. 捕獲stdout及stderr輸出
  10. 捕獲警告信息
  11. 模塊及測試文件中集成doctest測試
  12. skip及xfail: 處理不能成功的測試用例
  13. Fixture方法及測試用例的參數化
  14. 緩存: 使用跨執行狀態
  15. unittest.TestCase支持
  16. 運行Nose用例
  17. 經典xUnit風格的setup/teardown
  18. 安裝和使用插件
  19. 插件編寫
  20. 編寫鉤子(hook)方法
  21. 運行日志
  22. API參考
    1. 方法(Functions)
    2. 標記(Marks)
    3. 鉤子(Hooks)
    4. 裝置(Fixtures)
    5. 對象(Objects)
    6. 特殊變量(Special Variables)
    7. 環境變量(Environment Variables)
    8. 配置選項(Configuration Options)
  23. 優質集成實踐
  24. 片狀測試
  25. Pytest導入機制及sys.path/PYTHONPATH
  26. 配置選項
  27. 示例及自定義技巧
  28. Bash自動補全設置

以下是pytest可能需要更改sys.path以導入測試模塊或conftest.py文件的方案列表。

測試conftest.py包內的模塊/ 文件

考慮這個文件和目錄布局:

root/
|- foo/
   |- __init__.py
   |- conftest.py
   |- bar/
      |- __init__.py
      |- tests/
         |- __init__.py
         |- test_foo.py

執行時:

pytest root/

pytest會發現foo/bar/tests/test_foo.py并意識到它是一個包的一部分,因為__init__.py在同一個文件夾中有一個文件。然后它將向上搜索,直到它找到仍包含__init__.py文件的最后一個文件夾,以便找到包(在本例中foo/)。要加載模塊,它將插入root/ 到前面 sys.path(如果不存在),以便test_foo.py作為模塊 加載 foo.bar.tests.test_foo

相同的邏輯適用于該conftest.py文件:它將作為foo.conftest模塊導入。

當測試存在于包中以避免出現問題并允許測試模塊具有重復的名稱時,保留完整的包名稱非常重要。在Python測試發現的約定中也詳細討論了這一點 。

獨立測試模塊/ conftest.py文件

考慮這個文件和目錄布局:

root/
|- foo/
   |- conftest.py
   |- bar/
      |- tests/
         |- test_foo.py

執行時:

pytest root/

pytest會發現foo/bar/tests/test_foo.py并意識到它不是包的一部分,因為__init__.py同一個文件夾中沒有文件。然后它將添加root/foo/bar/testssys.pathtest_foo.py作為模塊 導入test_fooconftest.py通過添加root/foosys.path將其導入為文件,對文件執行相同操作conftest

因此,此布局不能包含具有相同名稱的測試模塊,因為它們都將導入全局導入命名空間。

Python測試發現的約定中也詳細討論了這一點。

調用pytestpython -m pytest

運行pytest 而不是產生幾乎相同的行為,除了前一個調用將添加當前目錄。另請參閱通過python -m pytest調用pytestpython -m pytest [...]``pytest [...]``sys.path

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容