该网站上更新文章有延迟,如需查看关于python+appium文章,请前往testhome关注我哦。https://testerhome.com/topics/27802
一、日志的作用
在项目开发及测试中,日志能够帮助准确的定位问题,且进行问题的分析
二、日志级别
优先级为:DEBUG 日志的默认级别是warning级别及以上,debug和info都不会再控制台输出 1、概述 是一个树形层级结构,在使用接口debug、info、warning、error、critical之前必须创建Logger实例,即创建一个记录器,如果没有显式上的进行创建,则默认创建一个root logger,并应用默认的日志级别(warn),处理器Handle(StreamHandle,即将日志信息打印输出在标准输出上),和格式化器Formatter(默认的格式即为第一个简单实用程序中输出的格式)。 创建的方法:logger = logging.getLogger(logger_name) Logger对象从不直接实例化,而是通过模块级别的功能 Logging.getLogger(name)创建logger实例,调用logging.getLogger(name)功能时,如果传入的name参数值相同,则总是返回一个logger对象实例的应用。 2、创建Logger实例后,可以用以下方法进行日志级别设置,增加处理器Handle 1、概述 handle 将日志信息发送到指定的位置(文件、窗口) Handle处理器的类型:StreamHandle,FileHandle,NullHandle 2、StreamHandle 创建方法:sh = logging.StreamHandle(stream==None) 将日志输出发送到控制台 3、FileHandle 将日志记录发送到磁盘文件,它继承了StreamHandle的输出功能 创建方法:fh = logging.FileHandle(filename,mode='a',encoding=None,delay=False) 4、NullHandle 不做任何格式化或输出,它本质上是一个开发人员使用的“无操作”处理程序 本质上是一个“什么都不做”的handle,由库开发者使用 1、概述 用于设置日志的输出格式 创建方法:formatter = logging.Formatter(fmt=None,datefmt=None),fmt和datefmt是用来设置日志格式和时间格式 默认的格式:%(asctime)s-%(levelname)s-%(message)s 默认的时间格式:%Y-%m-%d %H:%M:%S 2、使用Formatter对象设置日志信息最后的规则、结构和内容 封装类有便于外部文件对日志的调用,例子主要完成在控制台输出日志和日志输出到外部的.log文件中 封装日志类的步骤: 创建 logger 创建 handle 创建 formatter 配置 logger 上栗子: 1.在工程目录下创建类的外部log文件:test.log 2.封装Logger类: 3.调用Loger类: 在类的外部创建Logger类的实例化对象,传入需要的参数 4.输出结果:三、几个重要的概念
四、Logger 记录器
五、Handle 处理器
六、Formatter 格式化器
七、日志在实际测试用例中的应用
# 日志综合案例的封装
import logging
class Logger():
def __init__(self, LoggerName, FileName, CmdLevel, FileLevel):
# LoggerName:实例化对象的名字 FileName:外部文件名 CmdLevel:设置控制台中日志输出的级别 FileLevel:设置文件日志输出的级别
self.logger = logging.getLogger(LoggerName)
# 设置日志的级别
self.logger.setLevel(logging.DEBUG)
# 设置日志的输出格式
fmt = logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s')
# 借助handle将日志输出到test.log文件中
fh = logging.FileHandler(FileName)
fh.setLevel(FileLevel)
# 借助handle将日志输出到控制台
ch = logging.StreamHandler()
ch.setLevel(CmdLevel)
# 配置logger
fh.setFormatter(fmt)
ch.setFormatter(fmt)
# 给logger添加handle
self.logger.addHandler(fh)
self.logger.addHandler(ch)
def debug(self,message):
self.logger.debug(message)
def info(self,message):
self.logger.info(message)
def warn(self,message):
self.logger.warning(message)
def error(self,message):
self.logger.error(message)
def critical(self,message):
self.logger.critical(message)
# 如下为测试代码,实际运行中可以注释掉
if __name__ == "__main__":
logger = Logger("appium","test.log",CmdLevel=logging.DEBUG,FileLevel=logging.INFO)
logger.debug("debug message!")
logger.info("info message!")
logger.warn("warning message!")
logger.error("error message!")
logger.critical("critical message!")
# 其他类中调用Loger类
# 实例化Logger类,并传入参数
logger = Logger("appium", "test.log", CmdLevel=logging.DEBUG, FileLevel=logging.INFO)
class Test:
logger.debug("debug message!")
logger.info("info message!")
logger.warn("warning message!")
logger.error("error message!")
logger.critical("critical message!")
控制台:
2020-09-10 10:32:46,230-appium-DEBUG-debug message!
2020-09-10 10:32:46,230-appium-INFO-info message!
2020-09-10 10:32:46,230-appium-WARNING-warning message!
2020-09-10 10:32:46,230-appium-ERROR-error message!
2020-09-10 10:32:46,230-appium-CRITICAL-critical message!
外部文件:
20-09-10 10:32:46,230-appium-INFO-info message!
2020-09-10 10:32:46,230-appium-WARNING-warning message!
2020-09-10 10:32:46,230-appium-ERROR-error message!
2020-09-10 10:32:46,230-appium-CRITICAL-critical message