注意:这是我自己的封装思路,大家可以起到借鉴的作用。也可以跟着我的思路来,他的好处在于如果项目发送改变,代码健壮性会比较高,改动代码会比较小
1.可以新建一个api的文件夹用于封装请求数据的参数
2.处理返回的数据,返回给调用层
3.process_response 函数封装的东西,
4.创建一个空的类 ResultResponse, 用来组装response
5.在写一个函数,用于存放接口地址
6.在写一个类,用于真正的请求和存放域名以及拼接接口地址和设置日志等等,,注意:这个类应该继承下面写的类 RestClient
import requests, json
from ApiTest.utils.log_util import logger
from ApiTest.utils.read import base_data
api_root_url = base_data.read_ini()["host"]["api_sit_url"]
class RestClient:
def __init__(self):
self.api_root_url = api_root_url
self.session = requests.Session()
def get(self, url, **kwargs):
self.request_log(url, "GET", **kwargs)
return self.request(url, "GET", **kwargs)
def post(self, url, **kwargs):
self.request_log(url, "POST", **kwargs)
return self.request(url, "POST", **kwargs)
def put(self, url, **kwargs):
self.request_log(url, "PUT", **kwargs)
return self.request(url, "PUT", **kwargs)
def delete(self, url, **kwargs):
self.request_log(url, "DELETE", **kwargs)
return self.request(url, "DELETE", **kwargs)
def request(self, url, method, **kwargs):
if method == "GET":
return self.session.get(self.api_root_url + url, **kwargs)
if method == "POST":
return self.session.post(self.api_root_url + url, **kwargs)
if method == "PUT":
return self.session.put(self.api_root_url + url, **kwargs)
if method == "DELETE":
return self.session.delete(self.api_root_url + url, **kwargs)
def request_log(self, url, method, **kwargs):
data = dict(**kwargs).get("data")
json_data = dict(**kwargs).get("json")
params = dict(**kwargs).get("params")
headers = dict(**kwargs).get("headers")
logger.info(f"接口请求的方法>>>{method}")
logger.info(f"接口请求的地址>>>{self.api_root_url + url}")
if data is not None:
logger.info("接口请求的data参数>>>\n{}".format(json.dumps(data, indent=2)))
if json_data is not None:
logger.info("接口请求的json_data参数>>>\n{}".format(json.dumps(json_data, indent=2)))
if params is not None:
logger.info("接口请求的params参数>>>\n{}".format(json.dumps(params, indent=2)))
if headers is not None:
logger.info("接口请求的headers参数>>>\n{}".format(json.dumps(params, indent=2)))