Erlo

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

2019-10-26 01:00:16 发布   274 浏览  
页面报错/反馈
收藏 点赞

返回: 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。

登录查看全部

参与评论

评论留言

还没有评论留言,赶紧来抢楼吧~~

手机查看

返回顶部

给这篇文章打个标签吧~

棒极了 糟糕透顶 好文章 PHP JAVA JS 小程序 Python SEO MySql 确认