Pytest权威教程24-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导入机制及系统路径的更多相关文章
- Pytest权威教程(官方教程翻译)
Pytest权威教程01-安装及入门 Pytest权威教程02-Pytest 使用及调用方法 Pytest权威教程03-原有TestSuite的执行方法 Pytest权威教程04-断言的编写和报告 P ...
- Pytest权威教程25-配置
目录 配置 命令行选项和配置文件设置 初始化:确定ROOTDIR和INIFILE 寻找rootdir 如何更改命令行选项默认值 内置的配置文件选项 返回: Pytest权威教程 配置 命令行选项和配置 ...
- Pytest权威教程07-Monkeypatching,对模块和环境进行Mock
目录 Monkeypatching,对模块和环境进行Mock 简单示例如: 猴子补丁方法 Monkeypatching 返回对象: 构建mock类 全局补丁示例如:阻止"requests&q ...
- Pytest权威教程20-日志
目录 记录日志 caplog Fixture方法 实时日志 版本改动记录 Pytest3.4中不向后兼容的更改 返回: Pytest权威教程 记录日志 Pytest默认捕获WARNING以上日志消息, ...
- Pytest权威教程02-Pytest 使用及调用方法
目录 Pytest 使用及调用方法 使用python -m pytest调用pytest 可能出现的执行退出code 获取版本路径.命令行选项及环境变量相关帮助 第1(N)次失败后停止测试 指定及选择 ...
- Pytest权威教程05-Pytest fixtures:清晰 模块化 易扩展
目录 Pytest fixtures:清晰 模块化 易扩展 Fixtures作为函数参数使用 Fixtures: 依赖注入的主要例子 conftest.py: 共享fixture函数 共享测试数据 生 ...
- Pytest权威教程18-插件编写
[TOC] 返回: Pytest权威教程 插件编写 很容易为你自己的项目实现[本地conftest插件或可以在许多项目中使用的可[安装的插件,包括第三方项目.如果你只想使用但不能编写插件,请参阅[安装 ...
- Pytest权威教程22-优质集成实践
目录 优质集成实践 使用pip安装包 Python测试发现的约定 选择测试布局结构/导入规则 在应用程序代码外测试 测试作为应用程序代码的一部分 tox 返回: Pytest权威教程 优质集成实践 使 ...
- Pytest权威教程19-编写钩子(Hooks)方法函数
目录 编写钩子(Hooks)函数 钩子函数验证和执行 firstresult: 遇到第一个有效(非None)结果返回 hookwrapper:在其他钩子函数周围执行 钩子(Hooks)函数排序/调用示 ...
随机推荐
- java之单元测试
这篇主要简单讲下java的单元测试 目录结构如下: 如图,其中1是需要被测试的功能:2是测试模块:3是单元测试需要的引入包: 1. 功能模块1中 Calculator 的代码: package cn. ...
- 【洛谷 P3193】 [HNOI2008]GT考试(KMP,dp,矩阵乘法)
题目链接 \(f[i][j]\)表示准考证号到第\(i\)位,不吉利数字匹配到第\(j\)位的方案数. 答案显然是\(\sum_{i=0}^{m-1}f[n][i]\) \(f[i][j]=\sum_ ...
- Bootstrap 结合 PHP ,做简单的登录以及注册界面及功能
登录实现 HTML代码 <div class="container"> <?php if (isset($error_msg)): ?> <div c ...
- Flask中jinja2的应用
Flask中jinja2的应用 # -*- coding: utf-8 -*- # @Time : 2019/9/24 17:29 # @Author : AnWen from flask impor ...
- UCOSII软件定时器
API函数 //创建 OS_TMR *OSTmrCreate (INT32U dly, INT32U period, INT8U opt, OS_TMR_CALLBACK callback, void ...
- Chrome谷歌浏览器插件-小结
1.小插件库: Tampermonkey https://chrome.google.com/webstore/detail/tampermonkey-beta/gcalenpjmijncebpfij ...
- linux防火墙开放端口,针对固定ip开放端口
编辑/etc/sysconfig/iptables,添加 -A INPUT -m state --state NEW -m tcp -p tcp -s 127.0.0.1 --dport 6379 - ...
- c# Unicode
- (备忘)Java web项目迁移到Centos7中验证码无法显示
每天多学一点知识. 今天部署项目的时候出现验证码无法显示的问题,如下图所示:
- zabbix监控内存
取内存百分比 取出内存的可用的MB大小 / 总的内存大小 = 实际可用的百分比 avilable 710 X 100 / total 974 free -m|awk '/^Mem/{print $NF ...