目錄:
- 安裝及入門
- 使用和調(diào)用方法
- 原有TestSuite使用方法
- 斷言的編寫和報告
- Pytest fixtures:清晰 模塊化 易擴展
- 使用Marks標記測試用例
- Monkeypatching/對模塊和環(huán)境進行Mock
- 使用tmp目錄和文件
- 捕獲stdout及stderr輸出
- 捕獲警告信息
- 模塊及測試文件中集成doctest測試
- skip及xfail: 處理不能成功的測試用例
- Fixture方法及測試用例的參數(shù)化
- 緩存: 使用跨執(zhí)行狀態(tài)
- unittest.TestCase支持
- 運行Nose用例
- 經(jīng)典xUnit風格的setup/teardown
- 安裝和使用插件
- 插件編寫
- 編寫鉤子(hook)方法
- 運行日志
- API參考
- 優(yōu)質(zhì)集成實踐
- 片狀測試
- Pytest導(dǎo)入機制及sys.path/PYTHONPATH
- 配置選項
- 示例及自定義技巧
- Bash自動補全設(shè)置
以下是pytest可能需要更改sys.path
以導(dǎo)入測試模塊或conftest.py
文件的方案列表。
測試conftest.py
包內(nèi)的模塊/ 文件
考慮這個文件和目錄布局:
root/
|- foo/
|- __init__.py
|- conftest.py
|- bar/
|- __init__.py
|- tests/
|- __init__.py
|- test_foo.py
執(zhí)行時:
pytest root/
pytest會發(fā)現(xiàn)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
模塊導(dǎo)入盖高。
當測試存在于包中以避免出現(xiàn)問題并允許測試模塊具有重復(fù)的名稱時慎陵,保留完整的包名稱非常重要眼虱。在Python測試發(fā)現(xiàn)的約定中也詳細討論了這一點 喻奥。
獨立測試模塊/ conftest.py
文件
考慮這個文件和目錄布局:
root/
|- foo/
|- conftest.py
|- bar/
|- tests/
|- test_foo.py
執(zhí)行時:
pytest root/
pytest會發(fā)現(xiàn)foo/bar/tests/test_foo.py
并意識到它不是包的一部分,因為__init__.py
同一個文件夾中沒有文件捏悬。然后它將添加root/foo/bar/tests
到 sys.path
以test_foo.py
作為模塊 導(dǎo)入test_foo
撞蚕。conftest.py
通過添加root/foo
以sys.path
將其導(dǎo)入為文件,對文件執(zhí)行相同操作conftest
过牙。
因此甥厦,此布局不能包含具有相同名稱的測試模塊,因為它們都將導(dǎo)入全局導(dǎo)入命名空間寇钉。
在Python測試發(fā)現(xiàn)的約定中也詳細討論了這一點刀疙。
調(diào)用pytest
與python -m pytest
運行pytest 而不是產(chǎn)生幾乎相同的行為,除了前一個調(diào)用將添加當前目錄扫倡。另請參閱通過python -m pytest調(diào)用pytest谦秧。python -m pytest [...]``pytest [...]``sys.path