首页 > 编程语言 >Python接口自动化测试的学习笔记9——logging日志

Python接口自动化测试的学习笔记9——logging日志

时间:2024-03-27 10:29:42浏览次数:32  
标签:logging 请求 Python self 接口 日志 logger

1、引言

在进行Python接口自动化测试时,日志记录是一项至关重要的任务,它可以帮助开发者追踪测试过程中的详细信息,包括请求与响应数据、错误消息、调试信息等,从而有效地定位问题并提高测试效率。下面,我们将探讨如何在Python接口自动化测试项目中构建和配置一个强大的日志记录系统。

2、引入logging模块

首先,我们需要初始化logging模块并设置相关配置。基本步骤包括定义日志级别、日志格式和日志输出位置。例如:

# filepath = './common/logging.py'
import os
import logging.handlers


class GetLogger:
    """
    当已经创建了logger对象的时候,那么之后就不在创建了,也就是只创建一次对象
    """
    # 把logger对象的初始值设置为None
    logger = None

    # 创建logger,并且返回这个logger
    @classmethod
    def get_logger(cls):
        # 判断日志器为空
        if cls.logger is None:
            # 创建日志器,控制他的创建次数
            cls.logger = logging.getLogger('Test_API')  # 这里的值是自定义的
            # 设置日志级别,debug/info/warning/error
            cls.logger.setLevel(logging.DEBUG)  # 设置debug级别,意味着高于debug的都会被收集
            # 2.获取格式器
            # 2.1 要给格式器设置要输出的样式
            fmt = "%(asctime)s %(levelname)s [%(name)s] [%(filename)s (%(funcName)s:%(lineno)d)] - %(message)s"
            # 2.2 创建格式器,并且给他设置样式
            fm = logging.Formatter(fmt)
            # 获取项目路径
            project_path = os.path.dirname(os.path.abspath(__file__)).replace("common", "")
            # 3.创建处理器 按照时间进行切割文件
            tf = logging.handlers.TimedRotatingFileHandler(filename=project_path + f'/logs/requests.log',  # 原日志文件
                                                           when='midnight',  # 间隔多长时间把日志存放到新的文件中
                                                           interval=1,
                                                           backupCount=7,  # 除了原日志文件,还有7个备份
                                                           encoding='utf-8'
                                                           )
            logging.basicConfig(level=logging.DEBUG, format=fmt)  # 这是在控制台上打印日志信息

            def namer(filename):
                dir_name, base_name = os.path.split(filename)
                base_name = base_name.replace('requests.log.', 'requests')
                rotation_filename = os.path.join(dir_name, base_name)
                return rotation_filename

            tf.namer = namer
            tf.suffix = "_%Y-%m-%d_%H-%M-%S.log"
            # 在处理器中添加格式器
            tf.setFormatter(fm)
            # 在日志器中添加处理器
            cls.logger.addHandler(tf)

        # return cls.logger
        return cls.logger

(注意:需要先在根目录下创建logs目录,日志才会保存在logs目录下)

3、在接口测试中应用logging

接下来,在实际的接口自动化测试代码中,我们可以利用这个logger实例来记录HTTP请求和响应的关键信息,直接在接口统一请求方法中引用:

# filepath = './common/requests_utils.py'
import requests
from requests import ReadTimeout, RequestException

from common.logger import GetLogger


class RequestsUtil:

    def __init__(self):
        """session管理器"""
        # 实例化session
        self.session = requests.session()
        self.logger = GetLogger.get_logger()

    # 统一请求封装
    def send_request(self, method, url, headers=None, params=None, data=None, json=None, **kwargs):
        """
            统一封装HTTP请求方法
            :param method: 请求方法,如'GET', 'POST', 'PUT', 'DELETE'等
            :param url: 请求URL
            :param headers: 请求头信息,可选参数
            :param params: URL查询参数,适用于GET请求,可选参数
            :param data: 发送的数据,适用于POST等请求,可选参数
            :param json: 以json格式发送的数据,适用于POST等请求,可选参数
            :return: 返回requests库的Response对象
            """
        try:
            response = self.session.request(method, url, headers=headers, params=params, data=data, json=json, **kwargs)
            res_json = response.json()
            res_code = response.json()['code']
            self.logger.info(f'接口请求地址:{url}')
            print('接口请求地址:', url)
            self.logger.info(f'接口请求方式:{method}')
            print('接口请求方式:', method)
            self.logger.info(f'接口请求主体:{kwargs}')
            print('接口请求主体:', kwargs)
            self.logger.info(f'接口返回状态码:{res_code}')
            print('接口返回状态码', res_code)
            self.logger.info(f'接口返回信息:{res_json}')
            print('接口返回信息', res_json)
            return response
        except ReadTimeout:
            self.logger.error(u"请求超时")
        except ConnectionError:
            self.logger.error(u"请求连接错误")
        except RequestException:
            self.logger.error(u"返回错误")

最后,查看下执行结果,控制台已经打印了相关信息,logs目录下也生成了log日志文件

4、结论

通过上述方法,我们不仅能在Python接口自动化测试中实现对每一步操作的精确记录,而且可以根据不同需求灵活调整日志级别,确保既能满足日常调试需求,又不会因过多日志而影响性能。这样构建的日志系统有助于团队快速定位问题,提高测试效率,同时也为后期的性能分析、回归测试和持续集成提供了有力的支持。因此,在接口自动化测试实践中,合理运用logging模块进行日志管理是十分重要的实践策略。

标签:logging,请求,Python,self,接口,日志,logger
From: https://blog.csdn.net/weixin_44186358/article/details/137068758

相关文章

  • python的应用 | 提取指定文件夹下所有PDF文件的页数
    需求背景:由于要打印几十页pdf,跟打印店对接的时候,为了防止被坑,提前了解一下,所有文档一共有多少页,于是想到了用python来提取pdf文件的页数完整代码:importosfromPyPDF2importPdfReaderdefget_pdf_page_count(folder_path):#初始化总页数变量total_pages=0......
  • Python-VBA编程500例-020-02(入门级)
    第k个组合(ThekthCombination)的问题在实际应用中具有广泛的用途,它涉及从n个不同元素中选出k个元素的所有可能组合。这种组合的概念在许多领域都有重要的应用,常见的一些具体应用有:1、彩票与赌博:在某些彩票或赌博游戏中,参与者需要选择特定数量的号码或符号。这些号码或符号的......
  • [Python]细节与使用经验
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/18031983出自【进步*于辰的博客】纯文字阐述,内容比较干。并且,由于考虑到时间长了恐有所遗漏,便即兴记录,并没有对内容进行筛选、排序。因此,大家在阅读时可以直接Ctrl+F进行......
  • 肖sir__python之模块7.1
    ython之模块一、模块的介绍(1)python模块,是一个python文件,以一个.py文件,包含了python对象定义和pyhton语句(2)python对象定义和python语句(3)模块让你能够有逻辑地组织你的python代码段。(4)把相关的代码分配到一个模块里能让你的代码更好用,更易懂(5)模块能定义函数,类和变量,模块里也能包含可......
  • python 常用包
    python对于从git下载的内容,进入包内使用以下命令: pythonsetup.pybuildinstall 对于whl包,可省去后面的whl直接安装,假如有whl包是test123.whlpipinstalltest123 pip: 是Python包管理工具,python的其它包安装一般都是通过pip操作。python3.4+自带有此包。下载......
  • 市场数据和金融数据API的获取步骤,支持Python、Java、Go等接入方式,轻松实现量化数据交
    今天我想分享一个非常实用的技术内容,即如何通过接口API来实现订阅并接入实时行情数据源的报价信息。这个技术可以帮助你获取最新的市场数据,为你的应用程序或交易策略提供及时的信息支持。接入实时行情数据源可以让你了解市场动态并快速作出决策,非常有助于优化你的交易策略和投资决......
  • Python中Keras微调Google Gemma:定制化指令增强大型语言模型LLM
    全文链接:https://tecdat.cn/?p=35476原文出处:拓端数据部落公众号像谷歌、Meta和Twitter这样的大公司正大力推动其大型语言模型(LLM)的开源。最近,谷歌DeepMind团队推出了Gemma——一个由与创建谷歌Gemini模型相同的研究和技术构建的轻量级、开源LLM系列。本文,我们将帮助客户了解Ge......
  • 【python】服务端和客户端 RESTful 接口上传 E
    哈喽,大家好,我是木头左,物联网搬砖工一名,致力于为大家淘出更多好用的AI工具!服务端代码1.安装Flask和Flask-RESTful需要安装Flask和Flask-RESTful这两个库。Flask是一个轻量级的Web框架,而Flask-RESTful则是一个为Flask添加了RESTfulAPI支持的扩展。pipinstall......
  • 【Azure Service Bus】启用诊断日志来获取客户端访问Azure Service Bus的IP地址 [2024
    问题描述在使用ServiceBus中,遇见了莫名奇妙,不知来源的访问,但是又不敢直接修改AccessKey(担心影响正常业务),所以想通过访问服务的客户端IP地址来分析,到底是那里的客户端在访问ServiceBus服务? 问题解答经过调查,可以通过开启AzureServiceBus的诊断日志来实现此目的。......
  • 分析nginx日志统计接口情况
    一、背景近来打算对后端接口进行优化,所以要先对现有接口的情况进行统计。因为相关业务接口是index.php?action=XXX的形式,所以公司运维的管理平台并不能满足需求,所以要自行处理nginx日志获取接口的情况了。二、处理思路1.nginx日志中不止包含相关接口的日志,所以先要根据关键字......