前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pytest+requests+allure实现接口自动化测试系列(4)-logging模块

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

作者头像
搁浅同学
发布2022-07-21 15:00:12
7030
发布2022-07-21 15:00:12
举报

接着上一篇继续分享

一个自动化测试框架一般配备日志管理模块,配备该模块主要是为了记录我们运行过程中的日志,在测试用例执行失败时,可以通过日志查找到失败的原因。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格式返回数据取值

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 暴走的软件测试Tester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
日志服务
日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档