Pytest權威教程24-Pytest導入機制及系統路徑


返回: Pytest權威教程

Pytest導入機制和sys.path/PYTHONPATH

包中的測試腳本及conftest.py文件

參考文件目錄布局:

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

執行時:

pytest root/

由於用例所在tests/目錄中包含了__init__.py文件,當Pytest找到foo/bar/tests/test_foo.py時,然后它向上搜索,直到它找到仍包含__init__.py文件的最后一個文件夾,作為包的根路徑(本例中foo/)。要加載模塊,Pytest會將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/

由於用例所在tests/目錄下沒有__init__.py文件,當Pytest找到foo/bar/tests/test_foo.py時,會把用例視為一個獨立的模塊,然后添加其所在目錄路徑,root/foo/bar/tests到sys.path中。以模塊test_foo的形式導入用例腳本test_foo.py。同樣,conftest.py也被視為獨立的模塊,通過添加其所在目錄,root/foo到sys.path中,將其以模塊形式導入。

因此,此布局不能包含具有相同名稱的測試模塊,應為它們都將被導入到全局的命名空間中。
在:Python測試發現的約定中也詳細討論了這一點。

調用通過python -m pytest調用pytest

使用python-m pytest [ ... ]而不是pytest [ ... ]運行pytest,前一個調用將添加當前目錄,除此之外,兩種調用方式相同。另請參閱:通過python -m pytest調用pytest。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM