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

Pytest权威教程24-Pytest导入机制及系统路径的更多相关文章

  1. Pytest权威教程(官方教程翻译)

    Pytest权威教程01-安装及入门 Pytest权威教程02-Pytest 使用及调用方法 Pytest权威教程03-原有TestSuite的执行方法 Pytest权威教程04-断言的编写和报告 P ...

  2. Pytest权威教程25-配置

    目录 配置 命令行选项和配置文件设置 初始化:确定ROOTDIR和INIFILE 寻找rootdir 如何更改命令行选项默认值 内置的配置文件选项 返回: Pytest权威教程 配置 命令行选项和配置 ...

  3. Pytest权威教程07-Monkeypatching,对模块和环境进行Mock

    目录 Monkeypatching,对模块和环境进行Mock 简单示例如: 猴子补丁方法 Monkeypatching 返回对象: 构建mock类 全局补丁示例如:阻止"requests&q ...

  4. Pytest权威教程20-日志

    目录 记录日志 caplog Fixture方法 实时日志 版本改动记录 Pytest3.4中不向后兼容的更改 返回: Pytest权威教程 记录日志 Pytest默认捕获WARNING以上日志消息, ...

  5. Pytest权威教程02-Pytest 使用及调用方法

    目录 Pytest 使用及调用方法 使用python -m pytest调用pytest 可能出现的执行退出code 获取版本路径.命令行选项及环境变量相关帮助 第1(N)次失败后停止测试 指定及选择 ...

  6. Pytest权威教程05-Pytest fixtures:清晰 模块化 易扩展

    目录 Pytest fixtures:清晰 模块化 易扩展 Fixtures作为函数参数使用 Fixtures: 依赖注入的主要例子 conftest.py: 共享fixture函数 共享测试数据 生 ...

  7. Pytest权威教程18-插件编写

    [TOC] 返回: Pytest权威教程 插件编写 很容易为你自己的项目实现[本地conftest插件或可以在许多项目中使用的可[安装的插件,包括第三方项目.如果你只想使用但不能编写插件,请参阅[安装 ...

  8. Pytest权威教程22-优质集成实践

    目录 优质集成实践 使用pip安装包 Python测试发现的约定 选择测试布局结构/导入规则 在应用程序代码外测试 测试作为应用程序代码的一部分 tox 返回: Pytest权威教程 优质集成实践 使 ...

  9. Pytest权威教程19-编写钩子(Hooks)方法函数

    目录 编写钩子(Hooks)函数 钩子函数验证和执行 firstresult: 遇到第一个有效(非None)结果返回 hookwrapper:在其他钩子函数周围执行 钩子(Hooks)函数排序/调用示 ...

随机推荐

  1. 文件属性的生成操作build action

    文件属性的生成操作build action Action 说明 None 资源既不会被集成到程序集内,也不会打包到xap包中.不过我们可以通过设置CopyToOutputDirectory选项让其自动 ...

  2. 【洛谷 P2408】 不同子串个数(后缀自动机)

    题目链接 裸体就是身体. 建出\(SAM\),\(DAG\)上跑\(DP\),\(f[u]=1+\sum_{(u,v)\in DAG}f[v]\) 答案为\(f[1]-1\)(因为根节点没有字符) # ...

  3. 织梦dedecms是什么?

    织梦dedecms是什么?DedeCms是织梦内容管理系统(DedeCms)的简称, 以简单.实用.开源而闻名,是国内最知名的PHP开源网站管理系统,也是使用用户最多的PHP类CMS系统; DedeC ...

  4. JavaScript常见的输出方式

    1.通过弹窗的形式来输出 alert(需要输出的内容); alert("hello world"); confirm(需要输出的内容); prompt("请输入内容:&q ...

  5. tp5隐藏入口文件(基于nginx)

    location / {             try_files $uri $uri/ /index.php?$query_string; #这项配置解决访问根目录以外路径报404的错误      ...

  6. The server quit without updating PID file

    [root@fjgh ~]# service mysqld start Starting MySQL... ERROR! The server quit without updating PID fi ...

  7. iview Carousel 轮播图自适应宽高;iview 轮播图 图片重叠问题;iview tabs 高度互相影响问题;vue this问题;

    最终效果图: 一.轮播图中图片自适应宽高:  <Carousel loop v-bind:height="imgHeight+'px'" v-model="caro ...

  8. ECharts 散点图+百度地图(案例转载)

    转载来源:https://efe.baidu.com/blog/echarts-map-tutorial-2/ ECharts 实现地图散点图(下)  小红  2016-06-13  ECharts, ...

  9. 浅谈 form 表单提交

    原创文章,转载请注明出处:http://www.cnblogs.com/weix-l/p/7675230.html 若有错误,请评论指出,谢谢! Form 对象代表一个 HTML 表单.在 HTML ...

  10. Linux Shell 小数比较

    #!/bin/bash #######expr 方法是错误的,在比较相同位数时可以,当位数不同就会出错,如100.00>70.00就会得出错误的结果 a=123b=123c=99.99rat=` ...