pytest学习笔记--接口自动化测试基础之日志封装学习

目录

  • logging实例配置日志级别参数可写str或者int类型
  • Handler对象
    • 常用的handler实例对象
    • 给handler对象设置日志级别
    • 给handler对象设置日志输出格式
  • logging配置
  • error级别以上日志发送邮件

logging实例配置日志级别参数可写str或者int类型

logger.setLevel(level)方法配置过滤日志级别
根据源码可以看到参数level可以使int类型或者string类型,
以debug级别为例,level写int类型: logger.setLevel(10)
level写str类型:logger.setLevel(logging.DEBUG)这种比较直观

    def setLevel(self, level):
        """
        Set the logging level of this logger.  level must be an int or a str.
        """
        self.level = _checkLevel(level)
        self.manager._clear_cache()

级别(高到低):CRITICAL、ERROR、WARNING、INFO、DEBUG、NOTSET;
对应int:CRITICAL = 50ERROR = 40WARNING = 30INFO = 20DEBUG = 10NOTSET = 0

Handler对象

handler对象负责根据日志级别分配日志消息的最终流向。Logger对象默认不包含handler对象,但是可用通过addHandler()方法添加。举例一个应用场景:假设你的应用程序需要将所有日志消息保存在日志文件中;把ERROR级别及以上的日志打印在标准输出;所有的CIRITCAL级别的日志通过电子邮件发给你。整个场景需要三个handler实例,每个实例都会根据不同的日志级别采取不同的方式处理日志消息。来源

常用的handler实例对象

  • logging.StreamHandler():输出日志到控制台
  • logging.FileHandler():输出日志到日志文件
  • RotatingFileHandler:将消息写入磁盘文件,并在日志文件的占用空间达到最大值的时候滚动日志文件
  • TimedRotatingHandler:将消息写入磁盘文件,并在根据指定的时间间隔滚动日志文件
  • SMTPHandler:将日志消息发送到指定的电子邮箱
  • NullHandler:对于错误日志没有任何响应。如果在功能库的开发中想要使用logging,但是又要在没有配置信息时避免显示类似‘No handlers could be found for logger XXX’ 这种消息,可以考虑使用NullHandler。

logging核心模块仅包含基本的一些handler类(NullHandler、StreamHandler和FileHandler),剩下的handler并不直接可用,而是需要主动导入logging.handlers和logging.config。

给handler对象设置日志级别

用的是handler的setLevel()方法,和logger的长得一样,但是效果不一样。logger.setLevel()决定了能够被传递到handler对象的最低级别。而handler.setLevel()决定了会被记录下来的最低日志级别,如果不设置默认使用logger的日志级别

给handler对象设置日志输出格式

设置日志输出格式靠的是Formatter对象,例子:

format = logging.Formatter(fmt='%(asctime)s - %(levelname)s - %(funcName)s - %(message)s', datefmt='%Y年%m月%d日 %H:%M:%S') 

打印出来的日志:

2022年06月09日 15:17:02 - INFO - read_get_token_yaml - 加载./interface_data_yaml/get_token.yaml文件......

format参数中可能用到的格式化串:来源

  • %(name)s Logger的名字
  • %(levelno)s 数字形式的日志级别
  • %(levelname)s 文本形式的日志级别
  • %(pathname)s 调用日志输出函数的模块的完整路径名
  • %(filename)s 调用日志输出函数的模块的文件名
  • %(module)s 调用日志输出函数的模块名
  • %(funcName)s 调用日志输出函数的函数名
  • %(lineno)d 调用日志输出函数的语句所在的代码行
  • %(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
  • %(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
  • %(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
  • %(thread)d 线程ID。
  • %(threadName)s 线程名。
  • %(process)d 进程ID。
  • %(message)s 用户输出的消息

logging配置

log_util.py文件

def get_logger(name):
    logger = logging.getLogger(name)
    logger.setLevel(10)   # 设置总日志等级

    format = logging.Formatter(fmt='%(asctime)s - %(levelname)s - %(funcName)s - %(message)s', datefmt='%Y年%m月%d日 %H:%M:%S')  # 日志格式

    cli_handler = logging.StreamHandler()  # 输出到屏幕的日志处理器
    file_handler = logging.FileHandler(filename='E:/1229Py/log/run.log', mode='a', encoding='utf-8')  # 输出到文件的日志处理器,mode默认是’a’,即添加到文件末尾,‘w’是覆盖写入

    cli_handler.setFormatter(format)  # 设置屏幕日志格式
    file_handler.setFormatter(format)  # 设置文件日志格式

    cli_handler.setLevel(logging.INFO)  # 设置屏幕日志等级, 可以大于日志记录器设置的总日志等级
    # file_handler.setLevel(logging.DEBUG)  # 不设置默认使用logger的等级

    logger.handlers.clear()  # 清空已有处理器, 避免继承了其他logger的已有处理器
    logger.addHandler(cli_handler)  # 将屏幕日志处理器添加到logger
    logger.addHandler(file_handler)  # 将文件日志处理器添加到logger
    return logger

yaml_util.py调用:

logger = get_logger('logger')

#读取yaml文件
def read_get_token_yaml(yaml_path):
    logger.info("加载{}文件......".format(yaml_path))
    with open(os.getcwd()+yaml_path,encoding="utf-8",mode="r") as f:
        value = yaml.load(stream=f,Loader=yaml.FullLoader)
    logger.info("读取到的数据===>{}".format(value))
    return value

log文件记录到的日志:

2022年06月09日 15:17:02 - INFO - read_get_token_yaml - 加载./interface_data_yaml/get_token.yaml文件......
2022年06月09日 15:17:02 - INFO - read_get_token_yaml - 读取到的数据===>[{'name': '获取token的接口', 'request': {'method': 'post', 'url': 'http://192.168.00.00:9999/auth/uCmttLogin', 'params': {'username': 13408000000, 'password': 123456}}, 'validate': 'None'}]
2022年06月09日 15:17:03 - INFO - wirte_extract_yaml - 写入方法收到的access_token===>{'access_token': 'c19b2d524775b3e8d069b7573d5be49c5e1419401ad1897d28715975d0f2c43558'}
2022年06月09日 15:17:03 - INFO - wirte_extract_yaml - 写入方法的返回值===>None

error级别以上日志发送邮件

待完善

你可能感兴趣的:(笔记,学习,python,功能测试)