首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

pytest的内置插件盘点1:pytestconfig

上一章通过脚本分析的方式,找出了 pytest 中全部的 hook 名称、关系、执行顺序。

在本章,同样采用脚本分析的方式,来处理 pytest 中每一个插的 hook 实现,包括:

hook 名

是否为 hookwrapper

是否尝试 tryfirst

是否尝试 trylast

以及每一个插件的所有 hook 调用,包括:

hook 名

hook 调用顺序

hook 调用次数

也就是说,阅读完本章,可以大致知道 pytest 中 32 个内置插件,分别为 pytest 提供了什么、对 pytest 做了什么

因篇幅原因,同时也为了方便索引、记录,每个插件的分析结果将单独发布,本次分享 pytest 的第一个插件: pytestconfig

内置插件 pytestconfig

插件路径:_pytest.config.Config

实现的 hook:

调用的 hook:

pytest_configure

pytest_load_initial_conftests

pytest_warning_recorded

pytest_unconfigure

pytest_plugin_registered

pytest_addoption

pytest_cmdline_main

pytest_addhooks

pytest_internalerror

pytest_cmdline_parse

pytest_cmdline_preparse

插件功能:

定义了框架启动函数:_pytest.config.main

定义了框架配置类:_pytest.config.Config

命令行参数

配置文件

conftest.py

定义了 pytest 专用的 pm:_pytest.config.PytestPluginManager

定义了命令行参数解析:_pytest.config.argparsing.Parser

定义了配置文件加载:_pytest.config.findpaths.determine_setup

列出了内置插件列表:src/_pytest/config/__init__.py:236

代码片段

def get_config( args: Optional[List[str]] = None, plugins: Optional[Sequence[Union[str, _PluggyPlugin]]] = None,) -> "Config": # subsequent calls to main will create a fresh instance pluginmanager = PytestPluginManager() config = Config( pluginmanager, invocation_params=Config.InvocationParams( args=args or (), plugins=plugins, dir=Path.cwd(), ), )

if args is not None: # Handle any "-p no:plugin" args. pluginmanager.consider_preparse(args, exclude_only=True)

for spec in default_plugins: pluginmanager.import_plugin(spec)

return config

@finalclass Config: """Access to configuration values, pluginmanager and plugin hooks.

:param PytestPluginManager pluginmanager: A pytest PluginManager.

:param InvocationParams invocation_params: Object containing parameters regarding the :func:`pytest.main` invocation. """

final装饰用来申明 Config 类不可被继承、重写

注释内容说明 Config 类用于访问配置、插件管理器、插件 hook

get_config函数展示了 Config 类的实例化方式:

在 pytest 启动时马上进行Config实例化

传递 PluginManager 实例对象

传递命令行参数、插件列表、当前工作目录,以便 pytestconfig 接管接下来的一切

简评

该插件是 pytest 基础中的基础、核心中的核心、一切功能的开始

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OBuQincDSu7Q_y7XEeS5AmXg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券