如何在收集阶段从 pytest 插件写入控制台?

How do I write to the console from a pytest plugin during the collection phase?

我正在编写一个 pytest 插件,它需要警告用户在收集阶段遇到的异常情况,但我没有找到任何方法从我的 pytest_generate_tests 函数中始终如一地将输出发送到控制台.

来自 printlogging 模块的输出仅在添加 -s 选项时出现在控制台中。我找到的所有与日志记录相关的文档都是指在测试中记录日志,而不是在插件中。

最后,我使用了 pytest-warning 基础设施,方法是使用 pytest config 对象的未记录的 _warn() 方法传递给或无论如何都可以从各种挂钩访问。例如:

def pytest_generate_tests(metafunc):
    [...]
    if warning_condition:
        metafunc.config._warn("Warning condition encountered.")
    [...]

如果报告了任何内容,您可以通过这种方式在 one-line 摘要中获得额外的 pytest-warnings,并且您可以通过向 pytest 命令添加“-r w”选项来查看警告详细信息行。