前言:
在软件测试的日常工作中,日志是个十分重要的模块
对于测试来说,日志的作用次要有以下四点:
- 调试程序
- 理解零碎程序运行的状况是否失常
- 零碎城西运行故障剖析和问题定位
- 用来做用户行为剖析和数据统计
因而在编写自动化测试脚本和搭建自动化测试框架时,最好加上日志的收集性能,能够通过日志来定位问题。
注释
相干概念
在自定义日志之前,咱们须要理解如下信息:
- 日志收集器
能够了解为用于收集日志信息的容器; - 日志级别 (Level):
常见的日志级别有:debug、info、warning、error 以及 critical - 输入渠道 (Handle):
控制台输入:StreamHandle
将日志信息保留在文件中:FileHandle -
日志格局 (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
自定义日志的操作流程
- 导入 logging 模块:import logging
- 创立日志收集器:logger = logging.getLogger(“日志收集器的 name”)
- 设置日志收集器的日志级别:logger.setLevel(logging.INFO) #设置收集器的级别为 INFO
- 给日志收集器创立输入渠道(依据第一局部的内容知:日志输入渠道蕴含控制台输入和文件输入):上面以控制台输入为例进行介绍,文件输入与之相似
4.1 创立日志的输入渠道:handle1 = logging.StreamHandle()
4.2 能够独自设置日志输入渠道的级别:handle1.setLevel(logging.ERROR)(此步骤可选)
【非凡阐明】
4.3 在未设置日志输入渠道的日志级别时,默认应用日志收集器设置的 Level
4.4 若需独自设置日志输入渠道的日志级别,则它的日志级别需 高于 日志收集器级别,否则设置有效。 - 设置日志输入的内容格局
1 # 设置日志的输入格局
2 fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s-%(lineno)d:%(message)s"
3 formatter = logging.Formatter(fmt)
- 将设置的日志格局绑定到创立的输入渠道中,行将日志格局与输入渠道关联起来
handler1.setFormatter(formatter)
- 将设置好的输入渠道,增加到日志收集器
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 出错")
自定义日志的封装
因为自定义日志的操作流程绝对比拟固定,因而咱们能够将自定义的日志封装成一个类。当咱们须要应用时,只需引入该模块即可。
- 通过查看源码知,封装的类须要继承 logging.Logger 类,这样就能够继承父类的 debug()、info()等函数;
- 从第二局部的操作流程知,不同的用户在引入该模块时,可能会设置不同日志名称、日志级别以及日志文件信息,因而这些参数能够让用户在实例化日志对象对象时进行初始化设置;
- 当咱们须要应用自定义的日志类时,引入这一模块即可。
代码参考
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,这个仓库也曾经帮忙了很多的软件测试的学习者,心愿也能帮忙到你
关注微信公众号【测试菜鸟小家洛】即可支付软件测试超硬核资源!也能够点击这里进入群聊支付
总之,学习如逆水行舟,逆水行舟。想要多高的薪资,就要付出多大的致力。