12、自动化基础:日志处理

日志处理:
怎么定位问题,怎么调试问题
1、print
2、断点调试,debug
3、 线上环境加日志

日志:
时间 正常 运行了某行代码
时间 重要 记录异常信息 – 发邮件或短信通知

需要安装第三方库 loguru

日志:

from loguru import logger

logger.info("正常日志记录")
try:
    a = [1, 2, 3]
    a[12]
except Exception as e:
    logger.error(e)

在这里插入图片描述

import unittest
from loguru import logger

class TestDemo(unittest.TestCase):
    def test_add(self):
        try:
            self.assertTrue(1 + 1 == 3)
        except AssertionError as e:
            logger.error(f"断言失败:{e}")
            # 需要手动抛出异常,否则会用例执行通过
            raise e
from loguru import logger

def login(username, passwd):
    """登录功能,开发写的"""
    response = {"messege": None,
                "code": None,
                "token": None}
    if username == "h" and passwd == "1234":
        response["messege"] = "succes"
        response["code"] = 200
        response["token"] = "good token"
        return response
    if username == "":
        response["messege"] = "用户名为空"
        response["code"] = 400
        return response
    if passwd == "":
        response["messege"] = "密码为空"
        response["code"] = 400
        return response
    else:
        response["messege"] = "用户名或密码错误"
        response["code"] = 400
        return response

case1 = {"username": "h",
         "passwd": "1234",
        "expected": {'messege1': 'succes', 'code': 200, 'token': 'good token'}
         }
case2 = {"username": "",
         "passwd": "1234",
        "expected": {'messege': '用户名为空', 'code': 400, 'token': None}
         }
case3 = {"username": "h",
         "passwd": "",
        "expected": {'messege': '密码为空', 'code': 400, 'token': None}
         }
case4 = {"username": "hk",
         "passwd": "6666",
        "expected": {'messege': '用户名或密码错误', 'code': 400, 'token': None}
         }

import unittest

class TestLogin(unittest.TestCase):

    # 类级别的
    @classmethod
    def setUpClass(cls) -> None:
        pass
        # print("每个类执行一次的前置")

    @classmethod
    def tearDownClass(cls) -> None:
        pass
        # print("每个类执行一次的后置")

    # 用例级别的
    def setUp(self) -> None:
        """前置操作,每个用例之前执行一遍"""
        # print("连接数据库...")
        pass

    def tearDown(self) -> None:
        """后置操作,每个用例之后执行一遍"""
        # print("断开数据库...")
        pass
    def test_login(self):
        logger.info("将执行被测试的函数")
        actual = login(case1["username"], case1["passwd"])
        logger.info("执行函数结束,得到实际结果")
        expected = case1["expected"]
        # 断言是否相等
        logger.info("正在断言...")

        try:
            self.assertEqual(expected, actual)
        except AssertionError as e:
            logger.error(f"断言失败:{e}")
            # 手工抛出异常
            raise e

    def test_login_2(self):
        actual = login(case2["username"], case2["passwd"])
        expected = case2["expected"]
        print(actual)
        self.assertEqual(expected, actual)

日志保存到文件中:

import unittest
from loguru import logger

# 把日志保存到文件中
logger.add(sink="py53.log", encoding="utf-8",level="INFO",
           # 当文件太大时,创建新的文件
           rotation="100 MB")

# 本地的调试环境
# logger.add(sink="py53.log", encoding="utf-8",level="DEBUG")

class TestDemo(unittest.TestCase):
    def test_add(self):
        try:
            logger.info("正在断言...")
            self.assertTrue(1 + 1 == 3)
        except AssertionError as e:
            logger.error(f"断言失败:{e}")
            # 需要手动抛出异常,否则会用例执行通过
            raise e

自己实现loguru(了解):

# 标准库:自带的 unittest

import logging

# 设置日志的等级
# logging.basicConfig(level="INFO")

# logging.info("这是标准日志")
# logging.warning("这是警告日志")
# logging.error("这是错误日志")

# 完整的 logging 流程

# 日志收集器, 笔
logger = logging.getLogger("py53")
logger.setLevel("DEBUG")  # 设置级别

# 日志处理器,显示日记的,  本子
handler = logging.StreamHandler()
handler.setLevel("DEBUG")  # 设置级别
logger.addHandler(handler)  # 把 笔和本子绑定在一起

# 文件处理器,通过文件保存日志,  另外一个本子
file_handler = logging.FileHandler(filename="my.log", encoding="utf-8")
file_handler.setLevel("DEBUG")
logger.addHandler(file_handler)

# 设置 日志格式
fmt = logging.Formatter("%(asctime)s | %(levelname)s | %(filename)s:%(lineno)d - %(message)s")
handler.setFormatter(fmt)
file_handler.setFormatter(fmt)

logger.debug("调试...")
logger.info("这是标准日志")
logger.warning("这是警告日志")
logger.error("这是错误日志")

封装:

import logging

def get_logger(name="root",level="DEBUG",filename=None,
               formatter="%(asctime)s | %(levelname)s | %(filename)s:%(lineno)d - %(message)s"):
    # 完整的 logging 流程
    # 日志收集器, 笔
    logger = logging.getLogger(name)
    logger.setLevel(level)  # 设置级别
    # 日志处理器,显示日记的,  本子
    handler = logging.StreamHandler()
    handler.setLevel(level)  # 设置级别
    logger.addHandler(handler)  # 把 笔和本子绑定在一起
    # 设置 日志格式
    fmt = logging.Formatter(formatter)
    handler.setFormatter(fmt)
    if filename != None:
        # 文件处理器,通过文件保存日志,  另外一个本子
        file_handler = logging.FileHandler(filename=filename, encoding="utf-8")
        file_handler.setLevel(level)
        logger.addHandler(file_handler)
        # 设置 日志格式
        file_handler.setFormatter(fmt)
    return logger
from PyTest08.Test15_1 import get_logger

logger = get_logger()

logger.debug("调试...")
logger.info("这是标准日志")
logger.warning("这是警告日志")
logger.error("这是错误日志")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值