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

目录

  • Pytest导入机制和sys.path/PYTHONPATH

    • 包中的测试模块及conftest.py文件
    • 独立测试模块及conftest.py文件
    • 调用通过python -m pytest调用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。

原文地址:https://www.cnblogs.com/superhin/p/11741533.html

时间: 2024-10-09 09:52:30

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

Pytest权威教程25-配置

目录 配置 命令行选项和配置文件设置 初始化:确定ROOTDIR和INIFILE 寻找rootdir 如何更改命令行选项默认值 内置的配置文件选项 返回: Pytest权威教程 配置 命令行选项和配置文件设置 你可以使用常规帮助选项获取有关INI选项配置文件中命令行选项和值的帮助: pytest -h # prints options _and_ config file settings 这将显示已安装插件注册的命令行和配置文件设置. 初始化:确定ROOTDIR和INIFILE pytest根据

Pytest 简明教程

pytest-learn 通过文章 Python 单元测试框架之 Pytest 剖解入门(第一篇) 学习 Pytest. 有很多的第三方插件可以自定义扩展,并且支持 Allure,生成可视化的测试报告和测试结果,并能输出 log 信息 说明 本文实验环境为: windows 7 python 3.7.0 pytest version 4.0.1 安装 pip install -U pytest pytest --version # This is pytest version 4.0.1 # 安

[Android Studio 权威教程]配置出“NB”的Android Studio

前几篇博客我们已经安装好了As,并且创建了我们的第一个HelloWrod ,这片blog我们继续配置出一个NB的Android Studio 假设你是一个才開始接触到AS或者想从Eclipse转型到AS的童鞋,那么请你持续关注我左边的专栏[Android Studio 权威教程],好的.開始我们的教程. 1.配置IDE主题 默认的主题是一个灰白色.看这特别的不好看.并且对于我们程序开发人员来讲每天要对着电脑好几个小时.特别的伤眼睛.我们来配置一个高大上的暗黑主题. 点击这个设置的小图标 这里Th

[Android Studio 权威教程]AS 中配置强大的版本号管理系统(Git、SVN、等)

在Eclipse中加入Git等版本号管理工具须要自己加入插件.并且个人认为不咋好用,在AS中已经给我们集成好了,我们仅仅须要配置一下就OK了.今天就和大家聊聊怎么配置以及使用的要点. 1. 安装Git/CVS 第一步首先你须要安装Git/CVS等版本号管理工具.这个请自行百度 2. 新建一个本地空仓库 新建一个仓库叫GitTest 仓库如今是空的什么都没有 找到路径,然后复制路径(这步非常重要) 3. 新建AS项目 项目创建完毕.这个时候我们能够看到AS提示我们配置仓库的提示,我们接下来配置一下

好程序员Java教程Java动态代理机制详解

好程序员Java教程Java动态代理机制详解:在java的动态代理机制中,有两个重要的类或接口,一个是 InvocationHandler(Interface).另一个则是 Proxy(Class),这一个类和接口是实现我们动态代理所必须用到的.首先我们先来看看java的API帮助文档是怎么样对这两个类进行描述的: InvocationHandler: 1InvocationHandler is the interface implemented by the invocation handle

[Android Studio 权威教程]离线配置SDK,创建第一个AS项目

前三篇bolg我给大家分享了怎么安装Android Studio,但是我们还没有使用AS创建一个Android 的项目,那么这篇blog我们开始离线配置SDK,并且创建一个Android项目 没有看如何安装Android Studio的童鞋,请先看这里,然后回来我们继续: [Android Studio 权威教程]Mac下安装Android Studio [Android Studio 权威教程]Linux下安装Android Studio [Android Studio 权威教程]Window

java的包导入机制总结与剖析

java中有两种包的导入机制 总结如下: 1>>单类型导入(single-type-import),例如import java.io.File;   2>>按需类型导入(type-import-on-demand),例如 import java.io.*; 关于这两种导入类型大家各有所爱,众说纷纭.这里分析一下这两种导入类型的大致工作原理供大家参考. 单类型导入比较好理解,仅仅导入一个public类或者接口.而对于按需类型导入,有人误解为导入一个包下的所有类,其实不然,看名字就知道

《AngularJS 权威教程》 笔记

AngularJS 权威教程 1. 初始AngularJS 2. 数据绑定和第一个AngularJS Web应用 3. 模块 // 声明模块应用angular.module('myapp', [ ]); // 获取模块应用angular.module('myapp'); 4. 作用域

《Angular权威教程》读书笔记1

开始学AngularJs了,正在读<Angular权威教程>. 学习AngularJs最为郁闷的事情就是AngularJs的版本.书里,还有很多网上的例子,经常在较新的版本里就跑不起来了,因此开个贴,边读边改,把书中的例子改到1.4.1可用. <Angular权威教程>第二章第7页: 原代码在1.2X上可运行: 1 <!DOCTYPE html> 2 <html ng-app> 3 <head> 4 <script src="ht