从源码的角度重新认识pytest(中)

3. pytest 目录结构

从 github 上 pytest 代码仓库中得到的文件非常多,其中大部分是工程文件,存放 python代码的是下面两个目录

  • testing 目录存放 pytest 的测试用例
  • src 目录存放 pytest 的源代码

对测试用例简单地浏览之后便可发现: pytest 是使用 pytest 进行测试的

这让我忍不住想到:linux 是通过 linux 编译内核的、git 是通过 git 管理源码的。。。

言归正传,今天的重点是 src 目录

这里有 2 个目录和一个文件:

文件:py.py,移除依赖库 py 后的补丁

pytest 原名 py.test,是 py 工具库的一部分,也依赖了 py 库的其他工具,这里保存了一个 py.py,便可以 从依赖中将py移除了

目录:pytest,提供 pytest 的入口,支持代码调用、命令执行、模块执行

目录下有两个文件:

  • __init__.py : 提供 import 统一入口,方便其他 python 代码使用 pytest
  • __main__.py:提供模块命令的执行入口,方便命令行的方式使用pytest

目录:_pytest, 这里才是真正存放源码的地方,

下划线开头的包名是在 python 中有特殊含义:“这是内部空间,不建议直接使用和操作

_pytest 目录下有 53 个包和模块,其中:

6 个下划线开头的分别是:

|-- __init__.py      # 导入版本号
|-- _argcomplete.py  # 为bash 提供pytest 命令的自动补全
|-- _code            # 对python代码进行面向对象式的包装
|-- _io              # 对控制台输出进行包装
|-- _py              # 对os.path 进行包装,推测这个可能会移除
|-- _version.py      # pytest版本号,动态生成而来

47 个非下划线开头的包 / 模块,这部分内容比较多,通过脚本分析内容,初步可以分为 2 大类:

  • pluggy 插件
======name, package or module, pluggy plugin  ======
('assertion', 'package', True)
('cacheprovider.py', 'module', True)
('capture.py', 'module', True)
('config', 'package', True)
('debugging.py', 'module', True)
('doctest.py', 'module', True)
('faulthandler.py', 'module', True)
('fixtures.py', 'module', True)
('helpconfig.py', 'module', True)
('hookspec.py', 'module', True)
('junitxml.py', 'module', True)
('legacypath.py', 'module', True)
('logging.py', 'module', True)
('main.py', 'module', True)
('mark', 'package', True)
('nose.py', 'module', True)
('pastebin.py', 'module', True)
('pytester.py', 'module', True)
('python.py', 'module', True)
('python_path.py', 'module', True)
('reports.py', 'module', True)
('runner.py', 'module', True)
('setuponly.py', 'module', True)
('setupplan.py', 'module', True)
('skipping.py', 'module', True)
('stepwise.py', 'module', True)
('terminal.py', 'module', True)
('threadexception.py', 'module', True)
('tmpdir.py', 'module', True)
('unittest.py', 'module', True)
('unraisableexception.py', 'module', True)
('warnings.py', 'module', True)
  • 非 pluggy 插件
======name, package or module, pluggy plugin  ======
('compat.py', 'module', False)
('deprecated.py', 'module', False)
('freeze_support.py', 'module', False)
('monkeypatch.py', 'module', False)
('nodes.py', 'module', False)
('outcomes.py', 'module', False)
('pathlib.py', 'module', False)
('py.typed', 'module', False)
('pytester_assertions.py', 'module', False)
('python_api.py', 'module', False)
('recwarn.py', 'module', False)
('scope.py', 'module', False)
('stash.py', 'module', False)
('timing.py', 'module', False)
('warning_types.py', 'module', False)

在 47 个包 / 模块中,有 32 个是 pluggy 类型的插件,

也从侧面体现出 pluggy 在 pytest 中的核心地位

本文系《pytest源码剖析》系列内容,首发于公众号

正在连载,欢迎关注

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pytest是一个功能强大的Python测试框架,它提供了丰富的功能和灵活的配置选项,使得编写和运行测试变得更加简单和高效。下面是pytest文文档的介绍: 1. pytest简介:介绍pytest的基本概念和特点,以及为什么选择使用pytest进行测试。 2. 安装和配置:详细说明如何安装pytest,并提供了一些常见的配置选项,如自定义测试目录、设置断言等。 3. 编写测试用例:介绍如何编写pytest的测试用例,包括使用装饰器标记测试函数、使用断言进行结果验证等。 4. 运行测试:说明如何运行pytest测试,包括命令行选项、运行指定目录或文件、使用pytest.ini文件进行配置等。 5. 断言和失败信息:介绍pytest的断言机制,包括常用的断言方法和自定义断言,以及如何处理测试失败时的信息输出。 6. 用例组织和执行顺序:讲解如何组织测试用例,包括使用测试类、测试模块、测试目录等方式,并说明pytest的执行顺序。 7. 用例参数化:介绍如何使用pytest的参数化功能,通过一组参数运行多次相同的测试用例。 8. 用例标记和过滤:说明如何使用pytest的标记功能,对测试用例进行分类和过滤,以及如何使用标记来运行指定的测试用例。 9. 夹具(Fixture):详细介绍pytest的夹具概念和使用方法,包括夹具的作用域、自动使用夹具、夹具之间的依赖关系等。 10. 插件扩展:介绍如何使用pytest的插件机制,扩展pytest的功能,如自定义报告、自定义命令行选项等。 以上是pytest文文档的主要内容,你可以通过阅读文档来深入了解pytest的使用方法和技巧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值