【pytest】内置 fixtures 之 pytestconfig:使用 pytestconfig 获取命令行参数 和 pytest.ini 配置文件的值

本文深入解析pytest内置fixture的使用,重点介绍pytestconfig的作用与实践,包括如何通过命令行参数和pytest.ini配置文件控制pytest行为,以及如何利用pytestconfig获取这些参数值。

内置 fixtures:

前面说过我们可以通过自定义 fixture 来实现测试用例的前置和后置工作,其实 pytest 中也有一些内置的 fixture 可供我们调用;

内置 fixture 的作用就是为了使 pytest 更加强大,它可以修改控制 pytest 的行为,以及为我们提供一些更加便利的功能。

pytestconfig:

pytestconfig 可以通过命令行参数、选项、配置文件、插件、运行目录等方式来控制pytest;

pytestconfig 实际上就是 request.config 的快捷方式,被称为“pytest 配置对象”;

源码展示:

# fixtures.py

@fixture(scope="session")
def pytestconfig(request):
    """Session-scoped fixture that returns the :class:`_pytest.config.Config` object.

    Example::

        def test_foo(pytestconfig):
            if pytestconfig.getoption("verbose") > 0:
                ...

    """
    return request.config

源码中的 request 是 FixtureRequest 的实例对象,FixtureRequest 在官方的描述中是这样的:

FixtureRequest 是来自 fixture 或者 测试用例的请求,它有访问测试上下文的权限;

</
### 如何在 Pytest 中从 `pytest.ini` 文件读取配置参数 为了访问 `pytest.ini` 配置文件中的设置,在编写测试代码或者 fixtures 时,可以通过 `request.config.getini()` 方法来获取特定的配置项[^1]。 对于自定义选项,则需先通过插件机制注册这些选项,之后同样利用 `getoption()` 或者命令行传递的方式取得其。下面是一个简单的例子展示怎样实现这一点: ```python import pytest def get_custom_option(request, option_name): """ 获取指定名称的自定义配置 """ return request.config.getoption(option_name) @pytest.fixture(scope="session", autouse=True) def setup_command_line_options(request): # 这里演示了如何获得addopts里的-v--html这样的通用配置 verbose_flag = 'verbose' if '-v' in request.config.getoption('-o') else '' html_report_path = request.config.getoption('--html') print(f"\nSetup: Running with verbosity flag {verbose_flag} and HTML report path set to '{html_report_path}'") def test_example(setup_command_line_options): pass ``` 得注意的是,如果想要创建并使用自己的配置项(比如 `[tool.pytest.ini.options]` 下面新增的内容),则应该按照官方文档指导完成相应的入口点声明工作,并确保它们能够在整个会话期间被正确解析与应用[^3]。 另外,当涉及到修改或扩展默认行为时,如更改测试路径(`testpaths`)等全局属性,通常不需要主动去读取这些来做判断;因为PyTest本身会在启动过程中自动处理好这一切[^4]。 最后提醒一点,关于 `markers` 的部分,虽然可以在 `.ini` 文件中定义标记(mark),但在实际编程实践中更多的是直接在测试函数上标注而不是频繁查询 ini 文件内的 marker 定义[^5]。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值