1、接口数据保存源码
import re
import ast
import jmespath
class BaseModel:
'''
返回值参数化保存的全局变量视图
'''
var_map = {}
class SaveResponseData:
def save_data(self, save_key_list, raw_data):
"""
:param save_key_list: 需要保存的数据列表
:param raw_data: 接口返回的json数据
:return: None
"""
if not save_key_list:
return None
save_key_list = ast.literal_eval(save_key_list) if isinstance(save_key_list, str) else save_key_list
for saveKey in save_key_list:
if isinstance(saveKey, tuple):
value_list = []
if '.' in saveKey[0]:
key = saveKey[0].replace('"', "'")
BaseModel.var_map[saveKey[1]] = jmespath.search(key, raw_data)
else:
self.get_response_key_value(saveKey[0], raw_data, value_list)
BaseModel.var_map[saveKey[1]] = value_list
if isinstance(saveKey, str):
value_list = []
self.get_response_key_value(saveKey, raw_data, value_list)
BaseModel.var_map[saveKey] = value_list
if isinstance(saveKey, list):
var_path_list = saveKey[0].split('.')
var_path = ''
for var in var_path_list:
if re.findall(r'^\d+$', var):
var_path += f'[{var}]'
else:
var_path += f'["{var}"]'
BaseModel.var_map[saveKey[1]] = [eval('raw_data' + var_path)]
def get_response_key_value(self, save_key, raw_data, value_list):
"""
遍历返回的json数据获取想要保存的值
:param save_key: save_key接口返回值中需要保存的key —> str,tuple,list
:param raw_data: 接口返回的json数据
:param value_list: 用来保存获得的key对应的value
:return:
"""
if isinstance(raw_data, dict):
for key, value in raw_data.items():
if key == save_key:
if isinstance(value, str):
value = value.replace(r'\n', '').replace(r'\r', '')
value_list.append(value)
self.get_response_key_value(save_key, value, value_list)
elif isinstance(raw_data, (list, tuple)):
for value in raw_data:
self.get_response_key_value(save_key, value, value_list)
2、接口返回值保存方法
2.1 使用返回数据的key值保存为临时变量
response = {"code":0,
"message": "操作成功",
"data": [
{"id": 1, "name": "大众", "car_info": {"product_id": 123}},
{"id": 2, "name": "本田", "car_info": {"product_id": 123}},
{"id": 3, "name": "奥迪", "car_info": {"product_id": 123}}
]}
saveKey = ['employee_id', 'employee_name']
SaveResponseData().save_data(saveKey, response)
print(BaseModel.var_map)
>>> var_map = {'id': [1, 2, 3], 'name': ['大众', '本田', '奥迪']}
2.2 给保存的key值取别名
response_a = {
"code": 0,
"message": "操作成功",
"data": [{"id": "421", "group_name": "前台1","employee_id": "915","employee_name": "李俊",},
{"id": "422", "group_name": "前台2","employee_id": "915","employee_name": "李俊",}]}
response_b = {
"code": 0,
"message": "操作成功",
"data": [{"id": "01", "car_name": "大众"},
{"id": "02", "car_name": "本田"}]}
saveKey_a = ['id']
saveKey_b = ['id']
SaveResponseData().save_data(saveKey_a, response_a)
SaveResponseData().save_data(saveKey_b, response_b)
print(BaseModel.var_map)
>>> var_map = {'id': ['01', '02']}
response_a = {
"code": 0,
"message": "操作成功",
"data": [{"id": "421", "group_name": "前台1","employee_id": "915","employee_name": "李俊",},
{"id": "422", "group_name": "前台2","employee_id": "915","employee_name": "李俊",}]}
response_b = {
"code": 0,
"message": "操作成功",
"data": [{"id": "01", "car_name": "大众"},
{"id": "02", "car_name": "本田"}]}
saveKey_a = [('id', 'group_id')]
SaveResponseData().save_data(saveKey_a, response_a)
saveKey_b = [('id', 'car_id')]
SaveResponseData().save_data(saveKey_b, response_b)
print(BaseModel.var_map)
>>> var_map = {'group_id': ['421', '422'], 'car_id': ['01', '02']}
2.3 以字典格式精确保存某个key
response = {
"code": 0,
"message": "操作成功",
"data": [{"id": "421", "group_name": "前台1","employee_id": "915","employee_name": "李俊",},
{"id": "422", "group_name": "前台2","employee_id": "915","employee_name": "李俊",}]}
saveKey = [['data.0.id', 'group_id']]
SaveResponseData().save_data(saveKey, response)
print(BaseModel.var_map)
>>> var_map = {'group_id': ['421']}
2.4 条件保存某个key
response = {
"code": 0,
"message": "操作成功",
"data": [{"id": "421", "group_name": "前台1","employee_id": "915","employee_name": "李天一",},
{"id": "422", "group_name": "前台2","employee_id": "916","employee_name": "李俊",}]}
saveKey = [("data[?id=='421'].employee_name", 'employee_name')]
SaveResponseData().save_data(saveKey, response)
print(BaseModel.var_map)
>>> var_map = {'employee_name': ['李天一']}
"data[?id=='421'].employee_name"
下一章:python自动化关联接口参数化(3)高阶