pytest+requests+allure实现接口自动化测试系列(4)-logging模块

2022-07-21 15:00:12 浏览数 (1)

接着上一篇继续分享

一个自动化测试框架一般配备日志管理模块,配备该模块主要是为了记录我们运行过程中的日志,在测试用例执行失败时,可以通过日志查找到失败的原因。python内置了一个库logging,今天主要分享logging模块的基本使用。

一、logging介绍

logging库是python记录日志比较常用的一个库,日志记录常用对象主要包括记录器对象logger,处理器对象handler,格式器对象formatter,同时日志分多个级别,主要DEBUG、INFO、WARNING、ERROR、CRITICAL这几个级别,我们可以根据可能出错的级别记录日志。

二、logging基本使用

2.1 获取记录器并记录日志

代码语言:javascript复制
#!/usr/bin/python
# -*- coding: utf-8 -*-
import logging

logger = logging.getLogger("log")
logging.basicConfig(level=logging.DEBUG) #设置默认级别日志是DEBUG
logger.info("info message")
logger.debug("debug message")
logger.error("error message")
logger.critical("critical message")
logger.warning("warning message")
# 默认的级别是WARNING,只有大于warning级别的才会输出
# 日志级别排序
# CRITICAL > ERROR > WARNING > INFO > DEBUG
# 上述代码大于等于DEBUG的都会被输出,输出结果

2.2 使用处理器handler

比较常用的两个handler类型是StreamHandler、FileHandler,StreamHandler主要是输出到控制台,FileHandler是输出到文件

StreamHandler使用

代码语言:javascript复制
#!/usr/bin/python
# -*- coding: utf-8 -*-
import logging
from logging import StreamHandler

logger = logging.getLogger("log")
logging.basicConfig(level=logging.DEBUG)
stream_handler = StreamHandler() # 新建streamhandler对象
logger.addHandler(stream_handler) # 将handler对象添加到logger对象
logger.debug("debug message")

FileHandler使用

代码语言:javascript复制
#!/usr/bin/python
# -*- coding: utf-8 -*-
import logging
from logging import StreamHandler, FileHandler

logger = logging.getLogger("log")
logging.basicConfig(level=logging.DEBUG)
stream_handler = StreamHandler()
file_handler = FileHandler('test.log', encoding="utf-8")  # 新建一个filehandler
logger.addHandler(stream_handler)
logger.addHandler(file_handler)
logger.debug("debug message")
# 将日志同时输出控制台和写入test.log

2.3格式器使用

格式器主要控制输出日志的格式示例代码

代码语言:javascript复制
#!/usr/bin/python
# -*- coding: utf-8 -*-
import logging
from logging import StreamHandler, FileHandler, Formatter

logger = logging.getLogger("log")
logging.basicConfig(level=logging.DEBUG)
stream_handler = StreamHandler()
file_handler = FileHandler('test.log', encoding="utf-8")  # 新建一个filehandler

formater = Formatter(
    "%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")  # 定义一个格式器对象,参数是记录属性,为字符串

stream_handler.setFormatter(formater) # 将格式器对象添加到handler
file_handler.setFormatter(formater)  
logger.addHandler(stream_handler)
logger.addHandler(file_handler)

logger.debug("debug message")

再次输出日志后,日志格式是

附上常用的记录属性

三、封装自己的日志记录对象

项目中,我们一般只用一个记录器对象,记录器对象是根据名字来,所以我们需要定义记录的记录器,让每个文件记录的日志都输出到同一文件里面,新建一个文件logger.py,示例代码

代码语言:javascript复制
#!/usr/bin/python
# -*- coding: utf-8 -*-
import logging
import time
import os

BASE_PATH = os.path.dirname(os.path.realpath(__file__))
# 定义日志文件路径
LOG_PATH = os.path.join(BASE_PATH, "log")
if not os.path.exists(LOG_PATH):
    os.mkdir(LOG_PATH)

# 封装自己的logging
class MyLogger:
    def __init__(self):
        self._logName = os.path.join(LOG_PATH, "{}.log".format(time.strftime("%Y%m%d")))
        self._logger = logging.getLogger("logger")
        self._logger.setLevel(logging.DEBUG)
        self._formatter = logging.Formatter('[%(asctime)s][%(filename)s %(lineno)d][%(levelname)s]:%(message)s')
        self._streamHandler = logging.StreamHandler()
        self._fileHandler = logging.FileHandler(self._logName, mode='a', encoding="utf-8")
        self._streamHandler.setFormatter(self._formatter)
        self._fileHandler.setFormatter(self._formatter)
        self._logger.addHandler(self._streamHandler)
        self._logger.addHandler(self._fileHandler)

    # 获取logger日志记录器
    def get_logger(self):
        return self._logger


logger = MyLogger().get_logger()  # 记录定义一个logger对象,让其他文件只能获取该logger对象

在测试脚本使用logger

代码语言:javascript复制
#!/usr/bin/python
# -*- coding: utf-8 -*-
import pytest
from request_handler import request_handler
from yamlRead import read_yaml
from logger import logger


class Testrequests:
    @pytest.mark.parametrize('test_data', read_yaml('login.yml'))
    def test_requests(self, test_data):
        logger.debug("===========")
        logger.debug(f"测试的数据是{test_data}")
        url = test_data['url']
        method = test_data['method']
        data = test_data['data']
        r = request_handler(method, url, data)
        print(r.json())
        assert r.status_code == 200

执行测试用例,控制台输出

生成log目录,存放每天记录一个log日志文件(可以根据自己需要进行定义)

今天的分享就到这里了,明天分享如何对json格式返回数据取值

0 人点赞