码迷,mamicode.com
首页 > 其他好文 > 详细

Pytest权威教程24-Pytest导入机制及系统路径

时间:2019-10-26 01:44:54      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:https   布局   foo   完整   当前目录   __init__   不能   一点   保留   

返回: Pytest权威教程

Pytest导入机制和sys.path/PYTHONPATH

包中的测试模块及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测试发现的约定中也详细讨论了这一点。

调用通过python -m pytest调用pytest

使用python-m pytest [ ... ]而不是pytest [ ... ]运行pytest,前一个调用将添加当前目录,除此之外,两种调用方式相同。另请参阅:通过python -m pytest调用pytest。

Pytest权威教程24-Pytest导入机制及系统路径

标签:https   布局   foo   完整   当前目录   __init__   不能   一点   保留   

原文地址:https://www.cnblogs.com/superhin/p/11741533.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!