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

如何使用pytest测试日志输出是否包含指定颜色代码?

可以实现这类测试,修改方法如下

caplog默认不会自动复用你自定义Logger中的带颜色格式化器,它捕获的日志文本用的是默认格式,所以直接断言颜色代码会失败。解决思路是让caplog使用和你的Logger一致的格式化规则,或者手动格式化日志记录来验证。

方法一:给caplog配置相同的格式化器

修改测试代码,将自定义Logger的格式化器赋值给caplog的handler:

class TestLogging:
    def test_colour(self, caplog):
        logger = Logger('pytest', verbose=True, use_colour=True).logger
        
        # 将自定义Logger的格式化器应用到caplog的所有handler
        target_formatter = logger.handlers[0].formatter
        for handler in caplog.handlers:
            handler.setFormatter(target_formatter)
        
        with caplog.at_level(logging.DEBUG):
            logger.debug('Test debug colour')
        
        assert '\33[035mDEBUG\33[0m' in caplog.text

方法二:手动格式化caplog捕获的记录

直接取出caplog的日志记录,用你自定义的格式化器来生成带颜色的文本,再做断言:

class TestLogging:
    def test_colour(self, caplog):
        logger = Logger('pytest', verbose=True, use_colour=True).logger
        formatter = logger.handlers[0].formatter
        
        with caplog.at_level(logging.DEBUG):
            logger.debug('Test debug colour')
        
        # 用自定义格式化器处理捕获到的日志记录
        formatted_log = formatter.format(caplog.records[0])
        assert '\33[035mDEBUG\33[0m' in formatted_log

关键前提

确保你的Logger类在use_colour=True时,确实给handler配置了带颜色的格式化器,比如:

class Logger:
    def __init__(self, name, verbose=False, use_colour=False):
        self.logger = logging.getLogger(name)
        self.logger.setLevel(logging.DEBUG if verbose else logging.INFO)
        self.logger.handlers.clear()  # 清空默认handler避免重复输出
        
        formatter = self._get_coloured_formatter() if use_colour else logging.Formatter('%(levelname)s: %(message)s')
        handler = logging.StreamHandler()
        handler.setFormatter(formatter)
        self.logger.addHandler(handler)
    
    def _get_coloured_formatter(self):
        # 定义带颜色的日志格式
        fmt = '\33[035m%(levelname)s\33[0m: %(message)s'
        return logging.Formatter(fmt)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:02:16