You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在pytest中为每个测试用例单独存储日志文件

解决方案:自定义pytest日志存储路径与文件名

情况1:每次测试会话生成单个带时间戳的日志文件(存于results目录)

如果只是想把所有测试结果汇总到一个带时间戳的日志文件里,并且统一放在results目录下,你可以修改conftest.py的代码如下:

首先要确保results目录存在,避免运行时报错,所以需要引入os模块来创建目录:

import os
from datetime import datetime

def pytest_configure(config):
    """Create a log file in results directory with timestamp if log_file is not specified"""
    # 创建results目录(如果不存在则自动创建)
    os.makedirs('results', exist_ok=True)
    
    if not config.option.log_file:
        timestamp = datetime.strftime(datetime.now(), '%Y-%m-%d_%H-%M-%S')
        # 设置日志文件路径为results/test_run_<timestamp>.log
        config.option.log_file = f'results/test_run_{timestamp}.log'

这样每次运行测试时,都会在results目录下生成一个类似results/test_run_2024-05-20_14-30-00.log的日志文件,所有测试结果都会统一写入其中。


情况2:每个测试用例生成独立的带时间戳的日志文件

如果你的需求是为每个测试用例(比如test1、test2)单独生成专属日志文件,那需要用到pytest_runtest_setup钩子函数,在每个测试用例执行前配置独立的日志文件:

import os
import logging
from datetime import datetime

def pytest_configure(config):
    # 提前创建results目录,确保后续日志能正常写入
    os.makedirs('results', exist_ok=True)

def pytest_runtest_setup(item):
    """为每个测试用例设置独立的日志文件"""
    # 获取测试用例的基础名称(处理参数化测试的情况,只保留核心测试名)
    test_name = item.name.split('[')[0]
    timestamp = datetime.strftime(datetime.now(), '%Y-%m-%d_%H-%M-%S')
    log_file_path = f'results/{test_name}_{timestamp}.log'
    
    # 配置日志记录器:先移除旧的文件处理器,避免重复写入
    logger = logging.getLogger('pytest')
    for handler in logger.handlers[:]:
        if isinstance(handler, logging.FileHandler):
            logger.removeHandler(handler)
    # 添加新的文件处理器,指定日志格式
    file_handler = logging.FileHandler(log_file_path, encoding='utf-8')
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    file_handler.setFormatter(formatter)
    logger.addHandler(file_handler)
    logger.setLevel(logging.INFO)

这样每个测试用例执行时,都会在results目录下生成对应名称的日志文件,比如results/test1_2024-05-20_14-35-00.log、results/test2_2024-05-20_14-35-05.log,每个测试的日志会单独存储,方便后续排查问题。

内容的提问来源于stack exchange,提问作者anju

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 12:32:43