如何在pytest插件中默认配置addopts以禁用输出捕获?
pytest插件默认禁用输出捕获的最佳实践
要在pytest插件里默认禁用输出捕获,避开你遇到的参数冲突和addini失效问题,有两个靠谱的方案:
方案1:通过配置钩子直接修改默认值(推荐)
在插件里实现pytest_configure钩子,直接修改pytest的配置选项,同时保留用户手动设置的优先级:
def pytest_configure(config): # 仅当用户没有手动指定捕获模式时,才设置默认禁用 capture_option = config.getoption("capture") capture_ini = config.getini("capture") if not capture_option and not capture_ini: # 将捕获模式默认设为"no",等同于命令行加-s config.option.capture = "no"
这种方式不会和现有参数冲突,还能优先尊重用户自己通过命令行或ini文件设置的捕获规则,符合插件的设计原则。
方案2:修改已有捕获选项的默认值
如果想从选项定义层面修改默认值,可以在pytest_addoption钩子中找到pytest已定义的capture选项,直接修改它的默认值:
def pytest_addoption(parser): # 获取pytest内置的捕获选项组 capture_group = parser.getgroup("capture") # 遍历选项找到capture项并修改默认值 for option in capture_group.options: if option.dest == "capture": option.default = "no" break
为什么你之前的方法行不通?
addini是用来添加自定义ini配置项的,而addopts是pytest内置的ini参数,所以用addini无法修改它的默认值。- 直接重新定义
--capture选项会触发冲突,因为pytest已经提前注册了这个参数。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

