Python+requests+pytest+allure封装接口自动化7-日志封装
一、日志接口的封装
在common目录下新建一个logger.py的文件
-
import logging.handlers
-
## 单例模式的思想:通过逻辑控制,只生成一个对象
-
import os
-
-
-
class GetLogger:
-
'''
-
当已经创建了logger对象的时候,那么之后就不在创建了,也就是只创建一次对象
-
'''
-
# 把logger对象的初始值设置为None
-
logger = None
-
-
# 创建logger,并且返回这个logger
-
-
def get_logger(cls):
-
if cls.logger is None:
-
########创建日志器,控制他的创建次数
-
cls.logger = logging.getLogger('communityApiAutoTest') # 这里的值是自定义的
-
# 设置总的级别,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='H', # 间隔多长时间把日志存放到新的文件中
-
interval=1,
-
backupCount=3, # 除了原日志文件,还有3个备份
-
encoding='utf-8'
-
)
-
logging.basicConfig(level=logging.DEBUG,format=fmt) #这是在控制台上打印日志信息
-
-
# 在处理器中添加格式器
-
tf.setFormatter(fm)
-
# 在日志器中添加处理器
-
cls.logger.addHandler(tf)
-
-
# return cls.logger
-
return cls.logger
-
-
-
-
if __name__ == '__main__':
-
# 单例模式
-
logger = GetLogger.get_logger()
-
print(id(logger))
-
logger1 = GetLogger.get_logger()
-
print(id(logger1))
-
logger.debug('调试') # 相当print小括号中的信息
-
logger.info('信息')
-
logger.warning('警告')
-
name = '测试'
-
logger.error('这个变量是{}'.format(name))
-
logger.critical('致命的')
二、封装request的类,打印请求的相应日志
修改requests_client.py,具体的思路是,变量kwargs,即可获取相应的header\body\url\post等;
-
import requests
-
-
from common.encry_decry import md5
-
from common.logger import GetLogger
-
-
-
class RequestsClient:
-
# 使用类属性来定一个session,他将作为所有接口发起的全局对象
-
session = requests.session()
-
-
# 初始化数据,如果参数没传的情况下将参数置为None
-
def __init__(self):
-
self.session = RequestsClient.session
-
self.method = None
-
self.url = None
-
self.data = None
-
self.headers = None
-
self.files = None
-
self.json = None
-
self.params = None
-
self.resp = None
-
self.logger = GetLogger.get_logger()
-
-
# 封装requests请求
-
def sendRequest(self, **kwargs):
-
# 如果调用方,没有传任何的参数,那么就使用该对象的默认属性参数
-
if 'url' not in kwargs.keys():
-
kwargs['url'] = self.url
-
if 'method' not in kwargs.keys():
-
kwargs['method'] = self.method
-
if 'headers' not in kwargs.keys():
-
kwargs['headers'] = self.headers
-
if 'data' not in kwargs.keys():
-
kwargs['data'] = self.data
-
if 'json' not in kwargs.keys():
-
kwargs['json'] = self.json
-
if 'files' not in kwargs.keys():
-
kwargs['files'] = self.files
-
if 'params' not in kwargs.keys():
-
kwargs['params'] = self.params
-
-
# 等价于
-
# self.resp = self.session.request(**kwargs)
-
# 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'])
-
-
# 将接口发起前的信息记录到日志中
-
for key, value in kwargs.items():
-
self.logger.info(f'接口的{key}是:{value}')
-
try:
-
self.resp = self.session.request(**kwargs)
-
self.logger.info(f'接口响应状态码是:{self.resp.status_code}')
-
self.logger.info(f'接口相应信息是:{self.resp.text}')
-
except BaseException as e:
-
self.logger.exception('接口请求报错!')
-
raise BaseException(f'接口报错信息:{e}')
-
return self.resp
-
-
-
if __name__ == '__main__':
-
json = {
-
"userName": "admin",
-
"password": md5("123456")
-
}
-
request = RequestsClient()
-
resp = request.sendRequest(method='post', url='http://localhost:8888/community/flogin', json=json)
-
print(resp.json())
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfjaiij
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01