pytest log_cli + 标准日志记录 = 中断 doctest

问题描述

我们正在使用 pytest 和 python std logging,并在 doctest 中进行了一些测试。我们希望启用 log_cli 以便更轻松地在 ide 中进行调试测试(让 stderr 流到“实时”控制台,以便在单步执行时可以看到输出的日志语句)问题就在这里似乎是“使用 logging”(例如调用 logger.info("...") 等)log_cli=true间的错误/迭代。

我在文档中没有看到任何其他标志或提到这一点,所以它似乎是一个错误,但希望有一个解决方法

此测试模块通过:

# bugjar.py
"""
>>> dummy()
'retval'
"""
import logging
logger = logging.getLogger(__name__)
def dummy():
    # logger.info("AnInfoLog")  ## un-comment to break test
    return "retval"

但是取消注释(没有其他更改)logger.info( 调用会导致失败:(除非我从 log_cli删除 pytest.ini

002 >>> dummy()
Expected:
    'retval'
Got nothing

这是我的命令行和相关版本输出

(venv) $ ./venv/bin/pytest -c ./pytest.ini ./bugjar.py
======================================================================= test session starts ========================================================================
platform linux -- Python 3.8.5,pytest-6.2.2,py-1.10.0,pluggy-0.13.1
rootdir: -omitted-/test-unit,configfile: ./pytest.ini
plugins: forked-1.3.0,xdist-2.2.1,profiling-1.7.0
collected 1 item                                                                                                                                                   

bugjar.py::bugjar
 
bugjar.py::bugjar 
-------------------------------------------------------------------------- live log call ---------------------------------------------------------------------------
INFO     bugjar:bugjar.py:8 AnInfoLog
Failed                                                                                                                                                       [100%]

============================================================================= FAILURES =============================================================================
_________________________________________________________________________ [doctest] bugjar _________________________________________________________________________
001 
002 >>> dummy()
Expected:
    'retval'
Got nothing

和我的 pytest.ini(注意,评论是正确的,通过/失败不受使用日志文件或其他 addopts 的影响

[pytest]
addopts = --doctest-modules # --profile --profile-svg 
norecursedirs = logs bin tmP* scratch venv* data
# log_file = pytest.log
log_cli = true
log_cli_level=debug

log_cli*删除 pytest.ini 会使问题消失。

这似乎与 log_cli 正在操作的内容明显相关,即捕获输出以供 doctest 本身使用,但与预期行为无关。

我希望我犯了一个错误,或者有一种解决方法可以在 bash 或 IDE shell 窗口/调试器中获取实时日志输出

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)