我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

一、简单使用

入门小案例


import logging
logging.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 logging
logging.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 logging
logging.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 logging
logging.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 logging
from logging.handlers import TimedRotatingFileHandler
def 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 logger
if __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_logger
logger = 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的详细内容,更多关于日志定位bug的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

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

10分钟玩转Python+Selenium自动化测试,快速入门通道!

最近浏览了很多同学的简历,大部分都有自动化测试,基本都有selenium。但很少有人真正弄清selenium。一个是selenium的提供了很多组件,让人容易上手,然后很多人就没有然后了。二是selenium的更新伴随着工具的合并,很多人压
2023-06-06

python自动化测试selenium定位frame及iframe的示例分析

小编给大家分享一下python自动化测试selenium定位frame及iframe的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!frame标签有frameset、frame、iframe三种,frameset和
2023-06-25

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录