上一小节我们讲解了文件读写方法的封装方法,本小节我们完成一下框架日志的封装方法。

首先我们讲解一下日志封装和日志记录有哪些用处?

  1. 更加方便的设置日志的格式和输出方式
  2. 全局方法可以各个类/函数中都能统一调用
  3. 分类记录接口用例执行日志,方便嵌入测试报告
  4. 错误日志提示,方便代码调试或者做群消息告警

新建log.py

接口自动化测试框架实战-4-日志方法封装-LMLPHP

#log.py
import logging
import os
from datetime import datetime


class LoggerHandler(logging.Logger):
    def __init__(self, name, level, format_string=None):
        super().__init__(name, level=level)
        self._set_format(format_string)
        self._add_file_handler(level)
        self._add_stream_handler(level)

    def _set_format(self, format_string):
        """设置日志格式"""
        formatter = logging.Formatter(format_string or "%(asctime)s - %(levelname)s - %(message)s")
        for handler in self.handlers:
            handler.setFormatter(formatter)

    def _add_file_handler(self, level):
        """添加文件处理器"""
        # 获取脚本所在目录的根路径
        root = os.path.dirname(os.path.realpath(os.path.join(os.getcwd(), os.path.dirname(__file__))))
        # 创建日志目录
        log_directory = os.path.join(root, "logs")
        os.makedirs(log_directory, exist_ok=True)

        # 获取当前时间戳,并格式化为字符串
        current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        # 构造日志文件名
        log_file_name = f"{current_time}.log"
        log_file_path = os.path.join(log_directory, log_file_name)

        file_handler = logging.FileHandler(log_file_path, mode="w", encoding='utf-8')
        file_handler.setLevel(level)
        self.addHandler(file_handler)

    def _add_stream_handler(self, level):
        """添加流处理器"""
        stream_handler = logging.StreamHandler()
        stream_handler.setLevel(level)
        self.addHandler(stream_handler)


# 初始化LoggerHandler
logger = LoggerHandler(
    name="Logger",
    level=logging.INFO,
    format_string="%(asctime)s -- %(levelname)s -- %(filename)s -- %(funcName)s -- %(message)s"
)

# 示例:记录一条日志
logger.info("This is an info message.")

代码逻辑讲解如下:

  1. 一个类LoggerHandler继承python自带的logging模块
  2. _set_format方法用于设置日志的格式,日志格式是一个字符串
  3. _add_file_handler方法用于将日志输出到log文件中记录,具体逻辑是先创建输出的目录路径,再是设置日志文件的名称,最后添加到文件处理器中即可self.addHandler(file_handler)
  4. _add_stream_handler方法用于将日志输出到终端控制台,添加流处理器即可 self.addHandler(stream_handler)

以上就是框架日志的封装方法,大家也可以自己打印一些日志,练习一下!

07-25 16:06