自动化笔记 日志封装{***}

1、创建一个logs文件夹,用来放log文件

2、创建一个工具文件夹utils,里面新建一个log_manager.py 文件  封装log日志,给其他模块调用

utils>log_manager.py

import sys
import time
from time import strftime

from loguru import logger
import os
from functools import wraps  #导入写装饰器的模块


class LoggerManager:

    def __init__(self):
        '''按日期来命名日志文件的名字,同时对日志的格式做出一些定义'''
        self.logger = logger
        logger.remove()  #移除控制台自己打印的一些日志,防止出现日志重复打印的情况出现
        filename = strftime('%Y%m%d-%H%M%S')  #设定日期,防止日志信息产生重复时间的问题
        log_file_path = os.path.join('../logs', filename + '.log')  # 调用os库的join方法,在相对路径下的logs文件夹中生成filename文件
        log_format = '<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> {level} {message}'  #定义filename日志的格式
        level_ = 'DEBUG'  #定义日志的等级  设定为调试等级
        rotation_ = '5MB'  #定位日志最大多少MB
        '''以上都是日志的配置信息,下面是输出日志配置信息到文件中'''

        self.logger.add(log_file_path,
                        enqueue=True,
                        backtrace=True,
                        diagnose=True,
                        encoding='utf8',
                        rotation=rotation_) #把日志输出到文件中去了

        self.logger.add(sys.stderr,
                        format=log_format,
                        backtrace=True,
                        diagnose=True,
                        colorize=True,
                        level=level_
                        )  # 把日志输出到控制台
    def runtime_logger(self,func):   #func的含义是代表将来可能要执行的用例    方法装饰器
        @wraps(func)
        def wrapper(*args,**kwargs):  #python相关的知识,可以去查,也可直接套用
            self.logger.info(f"{func.__name__}当前测试用例开始执行")
            '''f代表格式化输出,{}中的是变量,有f不会改变{}中的变量,__name__代表当前用例的名字,也就是func这个变量对应的用例'''
            now1 = time.time()
            try:
                func(*args,**kwargs)
            except Exception as e:
                self.logger.error(f'{func.__name__}当前用例执行失败,失败的原因是{e}')
            now2 = time.time()
            self.logger.success(f'{func.__name__} 执行成功. 耗时:{now2-now1}ms')
            return func
        return wrapper

    def runtime_logger_class(self,cls):
        '''测试类装饰器书写思路,遍历测试类中的所有测试方法,将上面写的测试方法装饰器都加上'''
        for attr_name in dir(cls):
            '''测试类的方法都是以test_开头的'''
            if attr_name.startswith('test_') and callable(getattr(cls,attr_name)):
                setattr(cls,attr_name,self.runtime_logger(getattr(cls,attr_name)))
        return cls




my_logger = LoggerManager()  #创建一个对象,至此,就可以使用一个日志输出调用就行

3、创建一个testcases文件夹,生成一个test_logger_demo.py 文件用于测试封装的日志是否正常

testcases>test_logger_demo.py

import pytest

from utils.log_manager import my_logger

@my_logger.runtime_logger_class
class TestDemo():

    @pytest.mark.parametrize('num',[[1],[2],[3]])  #装饰器不会影响数据驱动
    def test_logeer01_demo(self,num):
        my_logger.logger.info("这是一条日志")
        my_logger.logger.info(f'当前的数字是{num}')
        print(1/0)


    def test_logger02_demo(self):
        pass


if __name__ =='__main__':
    pytest.main()
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值