如何在每个测试用例中都有一个记录器?

时间:2019-06-05 13:40:46

标签: python pytest

我想在pytest框架测试用例中添加其他日志记录。目前我的想法是这样的: 记录仪具有以下配置(假设是默认设置)

import logging
class Logger:
    logger = logging.getLogger()
    handler = logging.StreamHandler()
    formatter = logging.Formatter(
        '%(asctime)s %(name)-12s %(levelname)-8s %(message)s')
    handler.setFormatter(formatter)
    logger.addHandler(handler)
    logger.setLevel(logging.INFO)

在比赛中,我正在创建一个装置,它实际上是Logger的一个实例:

#conftest.py
@pytest.fixture
def trace():
    trace = Logger()
    return trace

然后,我将此跟踪固定装置传递给需要记录日志的每个测试。

trace.logger.info("Processing data")
    value = input_data.data["value1"]

它确实可以工作,但是我不确定对于每个测试用例都有一个更好的通用记录器是不是更好。目前,还需要将此夹具通过我想要添加更多迹线的任何测试。

2 个答案:

答案 0 :(得分:1)

您误解了logging.getLogger()的工作方式。记录仪是某种单例...

logging.getLogger()将返回记录器对象(如果已被实例化),或者创建并返回另一个新对象。如果您想获得其他记录器,则需要给他们命名。

例如:

logger = logging.getLogger("logger1")
  

您应该去那里看看,文档确实很完整:https://docs.python.org/3/howto/logging-cookbook.html

答案 1 :(得分:1)

如果您想检查各种测试记录的内容,pytest随附了一个名为caplog的附带电池的固定装置。您不需要像使用unittest测试时那样构建自定义处理程序。

https://docs.pytest.org/en/latest/logging.html