• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Python+requests+pytest+allure封装接口自动化7-日志封装

武飞扬头像
Yasar.l
帮助1

一、日志接口的封装

在common目录下新建一个logger.py的文件

  1.  
    import logging.handlers
  2.  
    ## 单例模式的思想:通过逻辑控制,只生成一个对象
  3.  
    import os
  4.  
     
  5.  
     
  6.  
    class GetLogger:
  7.  
    '''
  8.  
    当已经创建了logger对象的时候,那么之后就不在创建了,也就是只创建一次对象
  9.  
    '''
  10.  
    # 把logger对象的初始值设置为None
  11.  
    logger = None
  12.  
     
  13.  
    # 创建logger,并且返回这个logger
  14.  
    @classmethod
  15.  
    def get_logger(cls):
  16.  
    if cls.logger is None:
  17.  
    ########创建日志器,控制他的创建次数
  18.  
    cls.logger = logging.getLogger('communityApiAutoTest') # 这里的值是自定义的
  19.  
    # 设置总的级别,debug/info/warning/error
  20.  
    cls.logger.setLevel(logging.DEBUG) #设置debug级别,意味着高于debug的都会被收集
  21.  
    # 2获取格式器
  22.  
    # 2.1 要给格式器设置要输出的样式
  23.  
    fmt = "%(asctime)s %(levelname)s [%(name)s] [%(filename)s (%(funcName)s:%(lineno)d] - %(message)s"
  24.  
    # 2.2创建格式器,并且给他设置样式
  25.  
    fm = logging.Formatter(fmt)
  26.  
    # 获取项目路径
  27.  
    project_path = os.path.dirname(os.path.abspath(__file__)).replace("common","")
  28.  
    # 3.创建处理器 按照时间进行切割文件
  29.  
    tf = logging.handlers.TimedRotatingFileHandler(filename=project_path f'/logs/requests.log', # 原日志文件
  30.  
    when='H', # 间隔多长时间把日志存放到新的文件中
  31.  
    interval=1,
  32.  
    backupCount=3, # 除了原日志文件,还有3个备份
  33.  
    encoding='utf-8'
  34.  
    )
  35.  
    logging.basicConfig(level=logging.DEBUG,format=fmt) #这是在控制台上打印日志信息
  36.  
     
  37.  
    # 在处理器中添加格式器
  38.  
    tf.setFormatter(fm)
  39.  
    # 在日志器中添加处理器
  40.  
    cls.logger.addHandler(tf)
  41.  
     
  42.  
    # return cls.logger
  43.  
    return cls.logger
  44.  
     
  45.  
     
  46.  
     
  47.  
    if __name__ == '__main__':
  48.  
    # 单例模式
  49.  
    logger = GetLogger.get_logger()
  50.  
    print(id(logger))
  51.  
    logger1 = GetLogger.get_logger()
  52.  
    print(id(logger1))
  53.  
    logger.debug('调试') # 相当print小括号中的信息
  54.  
    logger.info('信息')
  55.  
    logger.warning('警告')
  56.  
    name = '测试'
  57.  
    logger.error('这个变量是{}'.format(name))
  58.  
    logger.critical('致命的')
学新通
学新通

二、封装request的类,打印请求的相应日志

修改requests_client.py,具体的思路是,变量kwargs,即可获取相应的header\body\url\post等;

  1.  
    import requests
  2.  
     
  3.  
    from common.encry_decry import md5
  4.  
    from common.logger import GetLogger
  5.  
     
  6.  
     
  7.  
    class RequestsClient:
  8.  
    # 使用类属性来定一个session,他将作为所有接口发起的全局对象
  9.  
    session = requests.session()
  10.  
     
  11.  
    # 初始化数据,如果参数没传的情况下将参数置为None
  12.  
    def __init__(self):
  13.  
    self.session = RequestsClient.session
  14.  
    self.method = None
  15.  
    self.url = None
  16.  
    self.data = None
  17.  
    self.headers = None
  18.  
    self.files = None
  19.  
    self.json = None
  20.  
    self.params = None
  21.  
    self.resp = None
  22.  
    self.logger = GetLogger.get_logger()
  23.  
     
  24.  
    # 封装requests请求
  25.  
    def sendRequest(self, **kwargs):
  26.  
    # 如果调用方,没有传任何的参数,那么就使用该对象的默认属性参数
  27.  
    if 'url' not in kwargs.keys():
  28.  
    kwargs['url'] = self.url
  29.  
    if 'method' not in kwargs.keys():
  30.  
    kwargs['method'] = self.method
  31.  
    if 'headers' not in kwargs.keys():
  32.  
    kwargs['headers'] = self.headers
  33.  
    if 'data' not in kwargs.keys():
  34.  
    kwargs['data'] = self.data
  35.  
    if 'json' not in kwargs.keys():
  36.  
    kwargs['json'] = self.json
  37.  
    if 'files' not in kwargs.keys():
  38.  
    kwargs['files'] = self.files
  39.  
    if 'params' not in kwargs.keys():
  40.  
    kwargs['params'] = self.params
  41.  
     
  42.  
    # 等价于
  43.  
    # self.resp = self.session.request(**kwargs)
  44.  
    # self.resp = self.session.request(url=kwargs['url'],method=kwargs['method'],headers=kwargs['headers'],data=kwargs['data'],json=kwargs['json'],params=kwargs['params'],files=kwargs['files'])
  45.  
     
  46.  
    # 将接口发起前的信息记录到日志中
  47.  
    for key, value in kwargs.items():
  48.  
    self.logger.info(f'接口的{key}是:{value}')
  49.  
    try:
  50.  
    self.resp = self.session.request(**kwargs)
  51.  
    self.logger.info(f'接口响应状态码是:{self.resp.status_code}')
  52.  
    self.logger.info(f'接口相应信息是:{self.resp.text}')
  53.  
    except BaseException as e:
  54.  
    self.logger.exception('接口请求报错!')
  55.  
    raise BaseException(f'接口报错信息:{e}')
  56.  
    return self.resp
  57.  
     
  58.  
     
  59.  
    if __name__ == '__main__':
  60.  
    json = {
  61.  
    "userName": "admin",
  62.  
    "password": md5("123456")
  63.  
    }
  64.  
    request = RequestsClient()
  65.  
    resp = request.sendRequest(method='post', url='http://localhost:8888/community/flogin', json=json)
  66.  
    print(resp.json())
学新通
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfjaiij
系列文章
更多 icon
同类精品
更多 icon
继续加载