千家信息网

python自动化测试通过日志3分钟定位bug的示例分析

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要为大家展示了"python自动化测试通过日志3分钟定位bug的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"python自动化测试通过
千家信息网最后更新 2025年11月08日python自动化测试通过日志3分钟定位bug的示例分析

这篇文章主要为大家展示了"python自动化测试通过日志3分钟定位bug的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"python自动化测试通过日志3分钟定位bug的示例分析"这篇文章吧。

    一、简单使用

    入门小案例

    import logginglogging.basicConfig(level=logging.DEBUG,  #设置级别,根据等级显示    format='%(asctime)s-[%(filename)s-->line:%(lineno)d]-%(levelname)s:% (message)s')  # 设置输出格式logging.debug('This is a debug log')logging.info('This is a info log')logging.warning('This is a warning log')logging.error('This is a error log')logging.critical('This is a critical log')

    日志级别

    根据不同情况设置了五种日志等级,不同情况输出不同等级的日志。

    日志器设置的级别会过滤掉低于这个级别的日志

    import logginglogging.basicConfig(level=logging.WARNING,  #设置级别,根据等级显示    format='%(asctime)s-[%(filename)s-->line:%(lineno)d]-%(levelname)s:% (message)s')  # 设置输出格式logging.debug('This is a debug log')logging.info('This is a info log')logging.warning('This is a warning log')logging.error('This is a error log')logging.critical('This is a critical log')

    2020-09-11 17:39:26,667-WARNING-This is a warning log

    2020-09-11 17:39:26,669-ERROR-This is a error log

    2020-09-11 17:39:26,669-CRITICAL-This is a critical log

    配置

    basicConfig 方法支持一下关键字参数进行配置。

    格式化规则

    日志的输出格式可以通过下面格式自由组合输出

    常用格式:%(asctime)s-[%(filename)s->line:%(lineno)d]-%(levelname)s:% (message)s

    import logginglogging.basicConfig(level=logging.DEBUG,  #设置级别,根据等级显示    format='%(asctime)s-[%(filename)s-->line:%(lineno)d]-%(levelname)s:% (message)s')  # 设置输出格式logging.debug('This is a debug log')

    [DEBUG]-2020-09-11 17:36:50,125-4:This is a debug log

    日志写到文件

    只需要配置 filename 参数即可

    import logginglogging.basicConfig(    level=logging.WARNING,  #设置级别,根据等级显示    filename='example.log'    format='%(asctime)s-[%(filename)s-->line:%(lineno)d]-%(levelname)s:% (message)s')  # 设置输出格式logging.debug('This is a debug log')logging.info('This is a info log')logging.warning('This is a warning log')logging.error('This is a error log')logging.critical('This is a critical log')

    注意,配置了 fielname 后,日志将不会输出在控制台。

    二、高级用法

    简单的代码通过 logging 直接使用即可,如果要深入使用需要按照面向对象的方式使用 logging。

    日志组件

    logging 模块包含一下几个组件。

    步骤

    1创建日志记录器
    import logging#  第一步创建一个logger,用来产生日志logger = logging.getLogger('%s_log' % __name__)logger.setLevel(logging.DEBUG)  # 设置日志等级

    通过 getLogger 这个方法可以创建一个日志记录器,注意要给名字否则返回根日志记录器。

    通过 setLevel 设置日志记录器的等级。

    2创建日志处理器
    # 创建一个文本处理器用来将日志写入到文件file_handler = logging.FileHandler(filename='py34.log',encoding='utf-8')
    file_handler.setLevel('WARNING')  # 设置处理器的日志等级
    # 创建一个控制台处理器用来将日志输出到控制台console_handler = logging.StreamHandler()console_handler.setLevel('INFO')  # 设置控制台处理器的日志等级

    日志处理器就是将日志发送到指定的位置

    FileHandler 将日志发送到文件

    StreaHandler 将它可将日志记录输出发送到数据流例如 sys.stdout, sys.stderr 或任何文件类对象默认sys.stdout 即控制台。

    RotatingFileHandler 支持根据日志文件大小进行轮转

    TimedRotatingFileHandler 支持根据时间进行轮转日志文件

    更多详情见官方文档

    (https://docs.python.org/zh-cn/3/library/logging.handlers.html?utm_source=testingpai.com#module-logging.handlers)

    3创建格式化器
    formatter = logging.Formatter(fmt='%(levelname)s %(asctime)s [%(filename)s-->line:%(lineno)d]:%(message)s')

    格式化器需要设置到处理器上

    file_handler.setFormatter(formatter)console_handler.setFormatter(formatter)
    4创建过滤器

    过滤器用来过滤指定日志。具体使用略,一般用不到。

    详情见官方文档

    (https://docs.python.org/zh-cn/3/howto/logging-cookbook.html?utm_source=testingpai.com#filters-contextual )

    5 将处理器添加到记录器上
    logger.addHandler(file_handler)logger.addHandler(console_handler)
    6 记录日志
    logger.info('This is a info')

    2020-09-11 22:22:44,095-[->line:1]-INFO:This is a info

    logger.warning('This is a warning')

    2020-09-11 22:23:20,337-[->line:1]-WARNING:This is a warning

    三、日志模块封装

    功能分析

    • 能够自定义日志器名

    • 能够自定义日志文件名和路径

    • 能够自定义日志文件编码方式

    • 能够自定义日志格式

    • 使用时间轮转处理器,并能够配置

    封装成函数

    在 common 目录下创建模块 log_handler.py 在其中创建如下函数。

    import loggingfrom logging.handlers import TimedRotatingFileHandlerdef get_logger(name, filename, encoding='utf-8', fmt=None, when='d', interval=1, backup_count=7, debug=False):    """    :param name: 日志器的名字    :param filename: 日志文件名(包含路径)    :param encoding: 字符编码    :param fmt: 日志格式    :param when: 日志轮转时间单位    :param interval: 间隔    :param backup_count: 日志文件个数    :param debug: 调试模式    :return:    """    logger = logging.getLogger(name)    logger.setLevel(logging.DEBUG)    # 文件处理器的等级一般情况一定比控制台要高    if debug:        file_level = logging.DEBUG        console_level = logging.DEBUG    else:        file_level = logging.WARNING        console_level = logging.INFO    if fmt is None:        fmt = '%(levelname)s %(asctime)s [%(filename)s-->line:%(lineno)d]:%(message)s'    file_handler = TimedRotatingFileHandler(        filename=filename, when=when, interval=interval, backupCount=backup_count, encoding=encoding)    file_handler.setLevel(file_level)    console_handler = logging.StreamHandler()    console_handler.setLevel(console_level)    formatter = logging.Formatter(fmt=fmt)    file_handler.setFormatter(formatter)    console_handler.setFormatter(formatter)    logger.addHandler(file_handler)    logger.addHandler(console_handler)    return loggerif __name__ == '__main__':    log = get_logger(name='py41', filename='py41.log', debug=True, when='s')    log.info('我是普通信息')    import time    time.sleep(3)    log.warning('我是警告信息')

    四、应用到项目中

    导入

    日志器生成函数的导入不能像 Excel 数据读取函数一样,每个用例模块里都导入一遍。因为它返回一个日志器对象,当多次调用日志器生成函数,且日志器名称相同时,会给同一个日志器添加多个日志处理器,从而出现重复记录日志器的问题。

    为了解决上面的问题,在 common 文件夹下创建一个名为 init.py 的文件,在 common 模块被导入时会自动执行这个文件里的代码,且只会执行一次。

    init.py 文件编写如下代码:

    from .log_handler import get_loggerlogger = get_logger('py41', 'py38.log')

    那么在项目中的其他模块中就可以通过如下代码导入

    from common import logger

    从而可以保证在项目执行过程中,get_logger 方法只会执行一遍。

    记录日志

    日志的作用是记录程序的运行状态和当程序出现问题时能提供定位分析错误的依据。

    什么时候需要记录日志,记录什么日志,根据每个人对程序的理解,以及经验。

    我们的项目中,在用例执行的过程是核心,所以我们的日志也是围绕着用例的执行。

    使用日志记录每个用例的测试数据,和测试结果,代码如下:

    ...@list_data(*cases)    def test_login(self, case):        """        登陆测试        """        logger.info('测试用例【{}】开始测试'.format(case['title']))        # 1. 测试数据        # 传入进来的case参数        logger.info('测试用例【{}】的测试数据是:{}'.format(case['title'], case))        # 2. 测试步骤        res = login_check(case['username'], case['password'])        logger.info('测试用例【{}】的测试结果是:{}'.format(case['title'], res))        # 3. 断言        try:            self.assertEqual(res, case['expect'])        except AssertionError as e:            logger.error('测试用例【{}】断言失败'.format(case['title']))            raise e        else:            logger.info('测试用例【{}】断言成功'.format(case['title']))        finally:            logger.info('测试用例【{}】测试结束')

    以上是"python自动化测试通过日志3分钟定位bug的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

    日志 测试 文件 格式 处理器 等级 处理 输出 级别 控制台 模块 控制 分析 代码 函数 数据 记录器 配置 定位 项目 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发培训机构学费 上海交大网络安全课件马进 区块链软件开发成本是多少 代理和代理服务器 北京网络技术职业学院怎么样 服务器专业机构管理 华为服务器编号规则 网络安全手抄报内容三年级 网络技术服务中心工作总结 火狐浏览器数据库 华硕路由器首选dns服务器 三门峡软件开发培训班 致远 oa 数据库 南邮ip网络技术课件 关系数据库完整的有哪些 计算机网络技术的好处与坏处 诺亚传说服务器人数 松江区信息网络技术应用 我的世界服务器管理员恶搞玩家 楼房绘画软件开发 朔州展厅触摸签名软件开发公司 学校网络安全怎么演练 哪些公司软件开发需要招投标 删除数据库表唯一索引语句 web开发中的数据库 徐汇区网络技术转让怎么样 广东越维优互联网科技有限公司 通信网络安全行业 计算机二级网络技术面试题 中国网络安全坚定维护者
    0