如何忽略在 doctests 上的 pytest 期间生成的 structlog debug/info/etc?
How to ignore structlog debug/info/etc generated during pytest on doctests?
我正在尝试弄清楚如何在我的文档测试中忽略来自 structlog 的日志记录输出。似乎 pytest 能够忽略来自日志记录的日志,但不是来自 structlog(至少不是本机)。
示例如下:
import logging
import structlog
LOGGING_LOGGER = logging.getLogger(__name__)
STRUCTLOG_LOGGER = structlog.getLogger(__name__)
def func_with_logging():
"""
>>> func_with_logging()
1
"""
LOGGING_LOGGER.debug("ABC")
return 1
def func_with_structlog():
"""
>>> func_with_structlog()
1
"""
STRUCTLOG_LOGGER.debug("ABC")
return 1
以上仅在 structlog doctest 中失败。
========================================= test session starts =========================================
platform linux -- Python 3.9.4, pytest-7.1.2, pluggy-1.0.0
rootdir: /home/bbeattie/test
collected 2 items
myfile.py .F [100%]
============================================== FAILURES ===============================================
________________________________ [doctest] myfile.func_with_structlog _________________________________
019
020 >>> func_with_structlog()
Expected:
1
Got:
2022-05-07 18:32.13 [debug ] ABC
1
/home/bbeattie/test/myfile.py:20: DocTestFailure
======================================= short test summary info =======================================
FAILED myfile.py::myfile.func_with_structlog
===================================== 1 failed, 1 passed in 0.03s =====================================
我是否遗漏了一些明显的 pytest 标志?
您可以将 structlog 配置为不记录到 stdout,或者将其配置为使用标准库日志记录进行记录,以便 pytest 的日志记录助手工作。
https://www.structlog.org/en/stable/testing.html should be the simplest way to achieve the first approach, for the latter the "Rendering Within structlog" 方法中的 autouse fixture 应该可以工作。添加您自己的配置 structlog 的 autouse fixture(会话范围应该没问题,不需要为每个测试 re-configure)。
我正在尝试弄清楚如何在我的文档测试中忽略来自 structlog 的日志记录输出。似乎 pytest 能够忽略来自日志记录的日志,但不是来自 structlog(至少不是本机)。
示例如下:
import logging
import structlog
LOGGING_LOGGER = logging.getLogger(__name__)
STRUCTLOG_LOGGER = structlog.getLogger(__name__)
def func_with_logging():
"""
>>> func_with_logging()
1
"""
LOGGING_LOGGER.debug("ABC")
return 1
def func_with_structlog():
"""
>>> func_with_structlog()
1
"""
STRUCTLOG_LOGGER.debug("ABC")
return 1
以上仅在 structlog doctest 中失败。
========================================= test session starts =========================================
platform linux -- Python 3.9.4, pytest-7.1.2, pluggy-1.0.0
rootdir: /home/bbeattie/test
collected 2 items
myfile.py .F [100%]
============================================== FAILURES ===============================================
________________________________ [doctest] myfile.func_with_structlog _________________________________
019
020 >>> func_with_structlog()
Expected:
1
Got:
2022-05-07 18:32.13 [debug ] ABC
1
/home/bbeattie/test/myfile.py:20: DocTestFailure
======================================= short test summary info =======================================
FAILED myfile.py::myfile.func_with_structlog
===================================== 1 failed, 1 passed in 0.03s =====================================
我是否遗漏了一些明显的 pytest 标志?
您可以将 structlog 配置为不记录到 stdout,或者将其配置为使用标准库日志记录进行记录,以便 pytest 的日志记录助手工作。
https://www.structlog.org/en/stable/testing.html should be the simplest way to achieve the first approach, for the latter the "Rendering Within structlog" 方法中的 autouse fixture 应该可以工作。添加您自己的配置 structlog 的 autouse fixture(会话范围应该没问题,不需要为每个测试 re-configure)。