返回: Pytest权威教程

Pytest导入机制和sys.path/PYTHONPATH

包中的测试脚本及conftest.py文件

参考文件目录布局:

  1. root/
  2. |- foo/
  3. |- __init__.py
  4. |- conftest.py
  5. |- bar/
  6. |- __init__.py
  7. |- tests/
  8. |- __init__.py
  9. |- test_foo.py

执行时:

  1. 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文件

参考文件目录布局:

  1. root/
  2. |- foo/
  3. |- conftest.py
  4. |- bar/
  5. |- tests/
  6. |- test_foo.py

执行时:

  1. 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. 直线DDA,直线和圆的Bresenham算法

    // DDA.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<Windows.h> #include<g ...

  2. c#-Json-Json字符串字段递归排序

    private static dynamic GetSorObject (Object obj) { if (obj is JArray) { var list = new List<dynam ...

  3. IdentityServer4实现OAuth2.0四种模式之客户端模式

    一,准备内容 IdentityServer4 是Asp.net core的一个中间件,用于添加符合OpenId Connect和OAuth2.0规范的终端到Asp.net Core应用.在这里简单介绍 ...

  4. iOS应用图片尺寸制作脚本

    1.前提说明 通常 2.代码使用说明 2.1 脚本基本代码 #!/bin/sh iPhoneIcon() { sips -z 30 25 if_connected_green.png --out ./ ...

  5. Core Animation笔记(变换)

    1.仿射变换 CGAffineTransformMakeScale : CGAffineTransformMakeTranslation CGAffineTransformMakeRotation(C ...

  6. SQL+C#:一次多语言混合编程的经验总结

    1.用JAVA做,采取轮询策略: 2.用sql语言+C#混合编程,采取触发策略

  7. MySql时区修改

    1.查看当前时间 > select curtime(); #或select now()也可以+-----------+| curtime() |+-----------+| 15:18:10 | ...

  8. django学习记录1

    在看django的基础知识,还是按照以前一样来总结,还是晚上再统一总结好了,边看边总结好像效果不大. 第一部分是生成数据库,用python manage.migrate命令来生成django的基础架构 ...

  9. PHP-5.6.8 源码包编译安装

    一.下载源码包后,进行解压 [root@www home]# .tar.bz2 gzip: stdin: not in gzip format tar: Error is not recoverabl ...

  10. (Linux基础学习)第四章:Linux系统中的日期和时间介绍和ntpdate命令

    第1节:日期和时间1.Linux的两种时钟:系统时钟:由Linux内核通过CPU的工作频率进行的硬件时钟:主板2.相关命令date 显示和设置系统时间hwclock,clock 显示硬件时钟-s,-- ...