我们最近切换到 py.test 进行 python 测试(顺便说一句,这太棒了)。但是,我试图弄清楚如何控制日志输出(即内置的python 日志模块)。我们安装了 pytest-capturelog,它按预期工作,当我们想查看日志时,我们可以通过 --nologcapture 选项。
但是,您如何控制日志记录级别(例如信息、调试等)以及过滤日志记录(如果您只对特定模块感兴趣)。py.test 是否有现有的插件来实现这一点,还是我们需要自己推出?
谢谢,乔尼
Installing and using the pytest-capturelog plugin could satisfy most of your pytest/logging needs. If something is missing you should be able to implement it relatively easily.
正如 Holger 所说,您可以使用pytest-capturelog:
def test_foo(caplog):
caplog.setLevel(logging.INFO)
pass
如果您不想使用 pytest-capturelog,您可以在日志配置中使用 stdout StreamHandler,以便 pytest 捕获日志输出。这是一个示例basicConfig
logging.basicConfig(level=logging.DEBUG, stream=sys.stdout)
有点晚的贡献,但我可以推荐pytest-logging作为一个简单的插入式日志捕获解决方案。在pip install pytest-logging
您可以控制日志的详细程度(显示在屏幕上)之后
$ py.test -s -v tests/your_test.py
$ py.test -s -vv tests/your_test.py
$ py.test -s -vvvv tests/your_test.py
等等... 注意 --s
标志很重要,没有它py.test
会过滤掉所有sys.stderr
信息。
更晚一点的贡献:您可以尝试pytest-logger。该插件的新颖之处在于记录到文件系统:pytest 为每个测试项目提供 nodeid,可用于组织测试会话日志目录(借助 pytest tmpdir 工具及其测试用例开始/结束挂钩)。
您可以分别为终端和文件系统配置多个处理程序(带有级别),并提供自己的 cmdline 选项来过滤记录器/级别,以使其适用于您的特定测试环境 - 例如,默认情况下,您可以将全部记录到文件系统,将一小部分记录到终端,这--log
如果需要,可以使用选项在每个会话的基础上进行更改。如果用户没有定义任何钩子,插件默认什么都不做。