Python 如何为pytest中的每次测试运行创建新的日志文件?

Python 如何为pytest中的每次测试运行创建新的日志文件?,python,python-3.x,logging,pytest,Python,Python 3.x,Logging,Pytest,我已经创建了一个pytest.ini文件 addopts = --resultlog=log.txt 这将创建一个日志文件,但我希望每次运行测试时都创建一个新的日志文件 我是pytest的新手,如果我在阅读文档时遗漏了什么,请原谅 谢谢注意 --结果日志参数已弃用,并计划在6.0版中删除(请参阅)。中讨论了可能的替换实现,因此请注意下一个主要版本的升级-下面的代码将停止使用pytest==6.0 答复 您可以在hookimpl中修改resultlog。示例:将下面的代码放在项目根目录的conf

我已经创建了一个
pytest.ini
文件

addopts = --resultlog=log.txt
这将创建一个日志文件,但我希望每次运行测试时都创建一个新的日志文件

我是pytest的新手,如果我在阅读文档时遗漏了什么,请原谅

谢谢

注意
--结果日志
参数已弃用,并计划在6.0版中删除(请参阅)。中讨论了可能的替换实现,因此请注意下一个主要版本的升级-下面的代码将停止使用
pytest==6.0

答复 您可以在hookimpl中修改
resultlog
。示例:将下面的代码放在项目根目录的
conftest.py
文件中:

import datetime


def pytest_configure(config):
    if not config.option.resultlog:
        timestamp = datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d_%H-%M-%S')
        config.option.resultlog = 'log.' + timestamp
现在,如果未显式传递
--result log
(因此必须从
pytest.ini
中删除
addopts=--resultlog=log.txt
),则
pytest
将创建一个以时间戳结尾的日志文件。使用日志文件名传递
--结果日志将覆盖此行为。

回答我自己的问题。 正如hoefling所提到的,
——结果日志
已被弃用,我必须找到一种不使用该标志的方法。我是这样做的

conftest.py

from datetime import datetime
import logging

log = logging.getLogger(__name__)

def pytest_assertrepr_compare(op, left, right):
    """ This function will print log everytime the assert fails"""
    log.error('Comparing Foo instances:    vals: %s != %s \n' % (left, right))
    return ["Comparing Foo instances:", " vals: %s != %s" % (left, right)]

def pytest_configure(config):
    """ Create a log file if log_file is not mentioned in *.ini file"""
    if not config.option.log_file:
        timestamp = datetime.strftime(datetime.now(), '%Y-%m-%d_%H-%M-%S')
        config.option.log_file = 'log.' + timestamp
pytest.ini

[pytest]
log_cli = true
log_cli_level = CRITICAL
log_cli_format = %(message)s
log_file_level = DEBUG
log_file_format = %(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s)
log_file_date_format=%Y-%m-%d %H:%M:%S
测试我的代码.py

import logging
log = logging.getLogger(__name__)

def test_my_code():
    ****test code

通过在测试执行开始时命名日志文件,可以拥有不同的pytest运行日志

pytest tests --log-file $(date '+%F_%H:%M:%S') 
这将为每个测试运行创建一个日志文件。测试运行的名称将是时间戳


$(日期'+%F\u%H:%M:%S')
是以
date\u Hr:Min:Sec
格式获取当前时间戳的bash命令。

请注意,实时日志记录与
--结果日志
不同。前者只保存代码发出的日志,后者将完整测试运行输出的副本写入文件。