运行右侧代码生成.log文件,双击report.log文件无法打开,pycharm没有报错信息
使用pytest运行右侧的用例,生成.log文件
该.log文件可以查看打开
其中conftest文件中添加了LoggerHandler类,可以打开的.log文件是由这部分代码生成的,全部代码内容如下
import logging
import os
from datetime import datetime
from typing import List
import pytest
def pytest_collection_modifyitems(
session: "Session", config: "Config", items: List["Item"]
) -> None:
'''
重写hook函数,将收集上来的用例名称编码格式设置成支持中文格式
:param session:
:param config:
:param items:
:return:
'''
for item in items:
# 用例名
item.name = item.name.encode('utf-8').decode('unicode-escape')
# 用例的路径
item._nodeid = item.nodeid.encode('utf-8').decode('unicode-escape')
class LoggerHandler:
# 可设置的日志等级,左侧最少右侧最多
_log_level = ('CRITICAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG', 'NOTSET')
_self_log_level = 'INFO'
_rootpath = "./"
def __init__(self):
self.logger = logging.getLogger(__name__)
def create(self):
# 获取当前日志等级
self_log_level = self._self_log_level.upper()
# 判断当前日志等级是否在指定范围
if self_log_level not in self._log_level:
raise ValueError(f"--self-log-level 设置的值不在范围: {self._log_level}")
self.logger.setLevel(getattr(logging, self_log_level))
if not self.logger.handlers:
# 设置日志输出流
f_stream = logging.StreamHandler()
# 生成日志文件完整路径
f_file = logging.FileHandler(os.path.join(self.set_log_dir(),
f"{datetime.now().strftime('%Y_%m_%d_%H_%M_%S')}.log"),
encoding='utf-8')
# 设置输出流级别
f_stream.setLevel(getattr(logging, self_log_level))
f_file.setLevel(getattr(logging, self_log_level))
# 设置日志输出格式
formatter = logging.Formatter('%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s : %(message)s')
f_stream.setFormatter(formatter)
f_file.setFormatter(formatter)
# 添加handler
self.logger.addHandler(f_stream)
self.logger.addHandler(f_file)
return self.logger
def set_log_dir(self):
# 设置日志的目录
if not self._rootpath:
self._rootpath = os.getcwd()
log_path = os.path.join(self._rootpath,
'logs',
str(datetime.now().date()))
if not os.path.exists(log_path):
os.makedirs(log_path)
return log_path
logger = LoggerHandler().create()
请老师麻烦看一下,为什么第一段代码生成的log文件不能打开查看,第二段代码生成的log却可以