为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 pytest 中每个测试的日志存储在单独的文件中

如何将 pytest 中每个测试的日志存储在单独的文件中

开心每一天1111 2023-08-22 15:18:16
我在 中有以下代码conftest.py。它将所有测试的结果存储到同一个文件中。我想将日志存储在文件名为 的结果目录中results/test1_<timestamp>.log。results/test2_<timestamp>.logdef 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
查看完整描述

1 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

您可以使用以下方法配置每个测试的日志记录路径set_log_path(尽管请注意,文档认为它是实验性的):


conftest.py


import os

from datetime import datetime

import pytest


@pytest.hookimpl

def pytest_runtest_setup(item):

    logging_plugin = item.config.pluginmanager.get_plugin("logging-plugin")

    timestamp = datetime.strftime(datetime.now(), '%Y-%m-%d_%H-%M-%S')

    logging_plugin.set_log_path(os.path.join('results', f'{item.name}_{timestamp}.log'))

当然,您必须设置正确的根路径(我只是将“结果”放在那里)。这将为每个测试创建一个新的日志文件,并相应配置名称。


您还可以使用该项目的其他属性来组成文件名。如果您想要路径中的测试类名称,如评论中所述,您可以执行以下操作:


...

    path = 'results'

    if item.cls is not None:

        path = os.path.join(path, item.cls.__name__)

    logging_plugin.set_log_path(os.path.join(path, f'{item.name}_{timestamp}.log'))


查看完整回答
反对 回复 2023-08-22
  • 1 回答
  • 0 关注
  • 1542 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信