有时一个接口的入参可能依赖另一个接口返回,但该返回值字段比入参字段多,无法使用**kwagrs,因此我们可以编写一个映射类来解决该问题。
class JsonUtils:
@classmethod
def to_json_str(cls, obj):
return json.dumps(obj, default=lambda o:o__dict__, indent=2, sort_keys=True)
@classmethod
def to_json_obj(cls, obj):
return json.loads(cls.to_json_str(obj))
def to_json(obj):
return JsonUtils.to_json_obj(obj)
# 映射类
class Mapping:
# data_source 数据源 classes 实体类
@classmethod
def mapping(cls, data_source, classes):
obj = JsonUtils.to_json_obj(classes)
for source_key in dict(data_source).keys():
for class_key in dict(classes).keys():
if class_key.__eq__(source_key):
obj[class_key] = data_source[source_key]
return obj
@classmethod
def mappings(cls, data_sources, classes):
objs = []
for i in data_sources:
objs.append(cls.mapping(i, classes))
return objs
将requests封装成restful风格
class Session:
__session = None
def __new__(cls, *args, **kwargs):
if cls.__session is None:
cls.__session = requests.session()
return cls.__session
class HttpClient:
@classmethod
def request(cls, method=None, url=None, data=None, json=None, params=None, headers=None, files=None):
with Session() as se:
res = se.request(methond=method, url=url, data=to_json(data), json=to_json(json), params=to_json(params), headers=headers, files=files, timeout=30)
try:
return res.json()
except Exception:
return res.text
@classmethod
def get(cls, **kwargs):
return cls.request('get', **kwargs)
@classmethod
def post(cls, **kwargs):
return cls.request('post', **kwargs)
@classmethod
def delete(cls, **kwargs):
return cls.request('delete', **kwargs)
@classmethod
def put(cls, **kwargs)
return cls.request('put', **kwargs)
发送请求
class TestCase:
def test_case(self):
params = {
'name': '张三',
'age': 18,
'address': '123456'
}
resp = HttpClient.get(url='get请求地址', params=params)
print(resp)