我必须手动运行下面的脚本
$ python -m mylog
才能测试日志记录。
为什么
$ pytest -s
创建日志文件失败?
#mylog.py
import logging
def foobar(logfile):
logging.basicConfig(filename=logfile, level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
#test_mylog.py
from . import mylog
from pathlib import Path
def test_mylog():
logfile='./mylog.log'
mylog.foobar(logfile)
assert Path(logfile).exists()
>>> AssertionError: assert False
pytest
有一个内置的 logging
插件,并将 handlers
注册到它,这就是为什么你的 logging.basicConfig(filename=logfile, level=logging.DEBUG)
无法工作。
logging.basicConfig()
仅在调用之前未进行日志记录配置但pytest
已配置logging
时才有效。
因此,如果您想要自定义日志记录,您应该禁用内置
pytest
的 logging
配置。
您可以通过多种方式做到这一点,但一种简单的方法是当您在终端中调用
pytest
时:
pytest -p no:logging