关于程序员:Python自动化测试之自定义日志及其封装

40次阅读

共计 2865 个字符,预计需要花费 8 分钟才能阅读完成。

前言:

在软件测试的日常工作中,日志是个十分重要的模块
对于测试来说,日志的作用次要有以下四点:

  1. 调试程序
  2. 理解零碎程序运行的状况是否失常
  3. 零碎城西运行故障剖析和问题定位
  4. 用来做用户行为剖析和数据统计

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

注释

相干概念

在自定义日志之前,咱们须要理解如下信息:

  1. 日志收集器
    能够了解为用于收集日志信息的容器;
  2. 日志级别 (Level):
    常见的日志级别有:debug、info、warning、error 以及 critical
  3. 输入渠道 (Handle):
    控制台输入:StreamHandle
    将日志信息保留在文件中:FileHandle
  4. 日志格局 (Format):
    个别蕴含如下信息:日志工夫 - 日志名称 - 日志级别名称 - 文件名称 - 行号 - 日志信息等

    示例

1 # 4、设置日志的输入格局
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. 设置日志输入的内容格局
1 # 设置日志的输入格局
2 fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s-%(lineno)d:%(message)s"
3 formatter = logging.Formatter(fmt)
  1. 将设置的日志格局绑定到创立的输入渠道中,行将日志格局与输入渠道关联起来

handler1.setFormatter(formatter)

  1. 将设置好的输入渠道,增加到日志收集器
    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,这个仓库也曾经帮忙了很多的软件测试的学习者,心愿也能帮忙到你

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

总之,学习如逆水行舟,逆水行舟。想要多高的薪资,就要付出多大的致力。

正文完
 0