Python自动化测试之自定义日志及其封装

Posted 测划人生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python自动化测试之自定义日志及其封装相关的知识,希望对你有一定的参考价值。

前言:

在软件测试的日常工作中,日志是个非常重要的模块

对于测试来说,日志的作用主要有以下四点:

1.调试程序

2.了解系统程序运行的情况是否正常

3.系统城西运行故障分析和问题定位

4.用来做用户行为分析和数据统计

因此在编写自动化测试脚本和搭建自动化测试框架时,最好加上日志的收集功能,可以通过日志来定位问题。

正文

相关概念

在自定义日志之前,我们需要了解如下信息:

1.日志收集器:可以理解为用于收集日志信息的容器;

2.日志级别(Level):常见的日志级别有:debug、info、warning、error以及critical

3.输出渠道(Handle):

控制台输出:StreamHandle

将日志信息保存在文件中:FileHandle

4.日志格式(Format):

一般包含如下信息:日志时间-日志名称-日志级别名称-文件名称-行号-日志信息等

示例

1 # 设置日志的输出格式

2 fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s-%(lineno)d:%(message)s"

3 formatter = logging.Formatter(fmt)

  

在python-logging模块中,默认的是root日志收集器,默认的输出级别为:WARNING

自定义日志的操作流程

1.导入logging模块:import logging

2.创建日志收集器:logger = logging.getLogger(“日志收集器的name”)

3.设置日志收集器的日志级别:logger.setLevel(logging.INFO) #设置收集器的级别为INFO

4.给日志收集器创建输出渠道(根据第一部分的内容知:日志输出渠道包含控制台输出和文件输出):下面以控制台输出为例进行介绍,文件输出与之类似

4.1 创建日志的输出渠道:handle1 = logging.StreamHandle()

4.2 可以单独设置日志输出渠道的级别:handle1.setLevel(logging.ERROR)( 此步骤可选)

【特殊说明】

4.3 在未设置日志输出渠道的日志级别时,默认使用日志收集器设置的Level

4.4 若需单独设置日志输出渠道的日志级别,则它的日志级别需高于日志收集器级别,否则设置无效。

5.设置日志输出的内容格式

# 设置日志的输出格式

fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s-%(lineno)d:%(message)s"

formatter = logging.Formatter(fmt)

  

6.将设置的日志格式绑定到创建的输出渠道中,即将日志格式与输出渠道关联起来

handler1.setFormatter(formatter)

  

7.将设置好的输出渠道,添加到日志收集器

logger.addHandler(handler1)

  

补充:将日志信息输出到文件的操作流程与之类似,只是在step4上有一点区别而已

handler2 = logging.FileHandler(filename="xxx.log",encoding="utf-8")

  

 

日志代码参考

import logging

# 1、创建日志收集器

logger = logging.getLogger(name="login_test")

# 2、设置日志收集器的级别:警告级别

logger.setLevel(logging.WARN)

# 3、设置日志的输出渠道

# 3.1 控制台日志输出

handler1 = logging.StreamHandler()

# 3.2 文件日志输出

handler2 = logging.FileHandler(filename="my_log.log",encoding="utf-8")

# 单独设置输出渠道的日志级别

handler1.setLevel(logging.ERROR)    # 可选

# 4、设置日志的输出格式

fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s-%(lineno)d:%(message)s"

formatter = logging.Formatter(fmt)

# 5、关联3和4

handler1.setFormatter(formatter)

handler2.setFormatter(formatter)

# 6、关联1和5

logger.addHandler(handler1)

logger.addHandler(handler2)

# 测试

logger.warning("登录失败警告")

logger.error("登录debug出错")

  

自定义日志的封装

由于自定义日志的操作流程相对比较固定,因此我们可以将自定义的日志封装成一个类。当我们需要使用时,只需引入该模块即可。

1.通过查看源码知,封装的类需要继承logging.Logger类,这样就可以继承父类的debug()、info()等函数;

2.从第二部分的操作流程知,不同的用户在引入该模块时,可能会设置不同日志名称、日志级别以及日志文件信息,因此这些参数可以让用户在实例化日志对象对象时进行初始化设置;

3.当我们需要使用自定义的日志类时,引入这一模块即可。

代码参考

import logging

# 对日志的操作进行封装

class MyLogger(logging.Logger):

    def __init__(self,name,level,file=None):

        super().__init__(name,level)

        # 设置日志的输出渠道

        handler1 = logging.StreamHandler()

        # 设置日志的输出格式

        fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s-%(lineno)d:%(message)s"

        formatter = logging.Formatter(fmt)

        handler1.setFormatter(formatter)

        # 添加日志的输出渠道

        self.addHandler(handler1)

        if file:

            handler2 = logging.FileHandler(filename=file,encoding="utf-8")

            handler2.setFormatter(formatter)

            self.addHandler(handler2)

            pass

        pass

    pass

  

后话

上述即为简单的自定义日志及其分装,如果对你有所帮助希望能点个小赞,今后会持续更新更多的自动化测试学习技术和方法

上面是我收集的一些视频和面试题资料,对于软件测试的的朋友来说应该是最全面最完整的面试备战仓库

为了更好地整理每个模块,我也参考了很多网上的优质博文和项目,力求不漏掉每一个知识点,很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer,这个仓库也已经帮助了很多的软件测试的学习者,希望也能帮助到你

关注微信公众号【测试菜鸟小家洛】即可领取软件测试超硬核资源!也可以点击这里进入群聊领取

总之,学习如逆水行舟,不进则退。想要多高的薪资,就要付出多大的努力。

 

以上是关于Python自动化测试之自定义日志及其封装的主要内容,如果未能解决你的问题,请参考以下文章

python自动化web自动化:4.测试框架讲解

常用python日期日志获取内容循环的代码片段

Python接口自动化之logging封装及实战

python之logging封装

python之logging封装

Python接口自动化之logging日志