如何在conftest中配置RotatingFileHandler对象
时间: 2024-02-23 10:01:33 浏览: 59
在Pytest中,可以将测试用例共享的配置放在`conftest.py`文件中。如果你想在`conftest.py`中配置`RotatingFileHandler`对象,可以将其定义为一个fixture,然后在测试用例中通过参数注入的方式使用它。
以下是一个示例代码,可以在`conftest.py`中定义`RotatingFileHandler`对象,并将其作为fixture共享给其他测试模块:
```python
import logging
import pytest
from logging.handlers import RotatingFileHandler
# 定义日志文件名和路径
log_file = "test.log"
log_path = "./logs"
@pytest.fixture(scope="session")
def logger():
# 创建RotatingFileHandler对象,设置日志文件大小为10MB,保留最近3个日志文件
handler = RotatingFileHandler(filename=log_file, mode='a', maxBytes=10*1024*1024, backupCount=3)
# 设置日志级别为INFO
handler.setLevel(logging.INFO)
# 定义日志格式
formatter = logging.Formatter('[%(asctime)s] %(levelname)s: %(message)s')
handler.setFormatter(formatter)
# 添加handler到root logger中
logging.getLogger('').addHandler(handler)
yield logging
# 在fixture结束时,从root logger中移除handler
logging.getLogger('').removeHandler(handler)
def test_example(logger):
logger.info("Running test example...")
# 测试代码
assert 1 == 1
```
在这个示例中,我们将`RotatingFileHandler`对象定义为一个名为`logger`的fixture,它的作用域为`session`级别。在`fixture`中,我们创建了一个`RotatingFileHandler`对象,并将其添加到root logger中。然后,我们使用`yield`语句将`logging`模块作为fixture返回。在测试用例中,我们通过参数注入的方式使用`logger`fixture,并在测试用例中使用`logger`写入日志信息。
当所有的测试用例执行完毕后,`yield`语句后面的代码将被执行,我们在这里从root logger中移除`handler`对象,以避免日志重复输出。
阅读全文