zoukankan      html  css  js  c++  java
  • 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/
    

    由于用例所在tests/目录中包含了__init__.py文件,当Pytest找到foo/bar/tests/test_foo.py时,然后它向上搜索,直到它找到仍包含__init__.py文件的最后一个文件夹,作为包的根路径(本例中foo/)。要加载模块,Pytest会将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/
    

    由于用例所在tests/目录下没有__init__.py文件,当Pytest找到foo/bar/tests/test_foo.py时,会把用例视为一个独立的模块,然后添加其所在目录路径,root/foo/bar/tests到sys.path中。以模块test_foo的形式导入用例脚本test_foo.py。同样,conftest.py也被视为独立的模块,通过添加其所在目录,root/foo到sys.path中,将其以模块形式导入。

    因此,此布局不能包含具有相同名称的测试模块,应为它们都将被导入到全局的命名空间中。
    在:Python测试发现的约定中也详细讨论了这一点。

    调用通过python -m pytest调用pytest

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

  • 相关阅读:
    Java Excel导入
    Git在Eclipse中忽略文件提交
    Git客户端安装(仅限windows用户)
    Java输出流文件下载
    Centos6.3源码安装Mysql-5.5.34
    Centos6.3安装Mongodb2.2.4
    Jacob操作Word各格式转换参数
    sublime text3使用小结
    获得select下拉框的值
    sublim text3 配置
  • 原文地址:https://www.cnblogs.com/superhin/p/11741533.html
Copyright © 2011-2022 走看看