目录:导读
- 前言
- 一、Python编程入门到精通
- 二、接口自动化项目实战
- 三、Web自动化项目实战
- 四、App自动化项目实战
- 五、一线大厂简历
- 六、测试开发DevOps体系
- 七、常用自动化测试工具
- 八、JMeter性能测试
- 九、总结(尾部小惊喜)
前言
在自定义日志之前,需要了解如下信息:
日志收集器:可以理解为用于收集日志信息的容器;
日志级别(Level):DEBUG、INFO、WARNING、ERROR以及CRITICAL
输出渠道(Handle):控制台输出,StreamHandle
将日志信息保存在文件中:FileHandle
日志格式(Format):
一般包含如下信息:日志时间-日志名称-日志级别名称-文件名称-行号-日志信息等
示例:
# 设置日志的输出格式
fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s-%(lineno)d:%(message)s"
formatter = logging.Formatter(fmt)
说明:
在logging模块中,默认的是root日志收集器,默认的输出级别为:WARNING
自定义日志的操作流程
导入logging模块:import logging
创建日志收集器:logger = logging.getLogger(“日志收集器的name”)
设置日志收集器的日志级别:logger.setLevel(logging.INFO) #设置收集器的级别为INFO
给日志收集器创建输出渠道(根据第一部分的内容知:日志输出渠道包含控制台输出和文件输出):下面以控制台输出为例进行介绍,文件输出与之类似
创建日志的输出渠道:handle1 = logging.StreamHandle()
可以单独设置日志输出渠道的级别:handle1.setLevel(logging.ERROR) 此步骤可选
说明:
在未设置日志输出渠道的日志级别时,默认使用日志收集器设置的Level
若需单独设置日志输出渠道的日志级别,则它的日志级别需高于日志收集器级别,否则设置无效。
设置日志输出的内容格式:
# 4、设置日志的输出格式
fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s-%(lineno)d:%(message)s"
ormatter = logging.Formatter(fmt)
将设置的日志格式绑定到创建的输出渠道中,即将日志格式与输出渠道关联起来
handler1.setFormatter(formatter)
将设置好的输出渠道,添加到日志收集器中
logger.addHandler(handler1)
补充:将日志信息输出到文件的操作流程与之类似,只是和上面有一点区别而已
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
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图 |
一、Python编程入门到精通
二、接口自动化项目实战
三、Web自动化项目实战
四、App自动化项目实战
五、一线大厂简历
六、测试开发DevOps体系
七、常用自动化测试工具
八、JMeter性能测试
九、总结(尾部小惊喜)
奋斗是生命的底色,努力是实现梦想的步骤。扬起理想的风帆,踏上追求的征途,即使困难千重万折,也要坚持前行,因为只有奋斗,才能书写出辉煌的篇章。
拥有梦想是人生的财富,付出努力是实现梦想的途径。不论遭遇多少挫折和困境,勇往直前、永不放弃,只有奋斗才能点亮心中的星火,终将引领我们走向辉煌的彼岸。
困难是人生的试金石,奋斗是成就的钥匙。挑战自我,超越极限,拼搏的汗水将织就辉煌的篇章。相信自己的能力,勇往直前,不忘初心,持续努力。