目錄:
- 安裝及入門
- 使用和調用方法
- 原有TestSuite使用方法
- 斷言的編寫和報告
- Pytest fixtures:清晰 模塊化 易擴展
- 使用Marks標記測試用例
- Monkeypatching/對模塊和環境進行Mock
- 使用tmp目錄和文件
- 捕獲stdout及stderr輸出
- 捕獲警告信息
- 模塊及測試文件中集成doctest測試
- skip及xfail: 處理不能成功的測試用例
- Fixture方法及測試用例的參數化
- 緩存: 使用跨執行狀態
- unittest.TestCase支持
- 運行Nose用例
- 經典xUnit風格的setup/teardown
- 安裝和使用插件
- 插件編寫
- 編寫鉤子(hook)方法
- 運行日志
- API參考
- 優質集成實踐
- 片狀測試
- Pytest導入機制及sys.path/PYTHONPATH
- 配置選項
- 示例及自定義技巧
- 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/tests
到 sys.path
以test_foo.py
作為模塊 導入test_foo
。conftest.py
通過添加root/foo
以sys.path
將其導入為文件,對文件執行相同操作conftest
。
因此,此布局不能包含具有相同名稱的測試模塊,因為它們都將導入全局導入命名空間。
在Python測試發現的約定中也詳細討論了這一點。
調用pytest
與python -m pytest
運行pytest 而不是產生幾乎相同的行為,除了前一個調用將添加當前目錄。另請參閱通過python -m pytest調用pytest。python -m pytest [...]``pytest [...]``sys.path