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

Posted superhin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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/

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导入机制及系统路径的主要内容,如果未能解决你的问题,请参考以下文章

24-pytest-allure命令行参数

Pytest权威教程25-配置

Pytest基础使用教程

pytest + yaml 框架 -7.用例分层机制

Elasticsearch教程 Elasticsearch查询语法 Elasticsearch权威指南 深入理解Elasticsearch

使用 pytest 正确导入