测试执行后pytest日志文件为空,但终端可正常显示日志
问题解决:pytest日志文件为空但终端显示正常
针对你遇到的pytest日志文件为空、但终端能实时显示日志的问题,可按以下步骤排查解决:
1. 确认配置文件被正确加载
pytest仅自动识别根目录下名为pytest.ini、tox.ini或setup.cfg的配置文件。如果你的配置文件名不符合要求,pytest不会加载其中的日志配置:
- 直接将配置文件重命名为
pytest.ini; - 或执行测试时通过命令指定配置文件:
pytest --config-file=你的配置文件名.ini
可通过pytest --show-config命令验证配置是否被加载,输出中需包含你的log_file相关配置项。
2. 关闭日志文件缓冲
默认情况下,pytest的文件日志会使用缓冲机制,可能导致测试结束前日志未写入文件。在配置文件中添加log_file_flush = True,强制每次日志事件都立即刷新到文件:
log_cli = 1 log_cli_level = WARN log_cli_format = %(message)s log_file = log/pytesting.log log_file_level = DEBUG log_file_format = %(asctime)s [%(levelname)8s] [%(name)s] %(message)s (%(filename)s:%lineno)s) log_file_date_format = %Y-%m-%d %H:%M:%S log_file_flush = True # 添加此行
3. 检查日志对象的有效级别
测试代码中如果手动设置过日志对象的级别,可能覆盖配置文件中的设置。可在测试函数中添加打印语句,验证日志对象的有效级别:
import logging LOGGER = logging.getLogger(__name__) def test_myLoggings(): print(LOGGER.getEffectiveLevel()) # 正常应输出10(对应DEBUG级别) LOGGER.warning("Warning Log") # ... 其他代码
如果输出值大于10(如30对应WARN级别),说明日志对象级别被代码覆盖,需检查是否存在LOGGER.setLevel()之类的语句并调整。
4. 验证测试代码中的日志定义
注意测试文件2中未显式导入logging和定义LOGGER,如果该LOGGER并非全局定义,可能导致日志事件未正确关联到pytest的日志处理器。建议在测试文件2头部添加:
import logging LOGGER = logging.getLogger(__name__)
内容的提问来源于stack exchange,提问作者Lotusmeristem
相关产品推荐
相关产品推荐

