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)高阶
转载请注明原文地址: https://lol.8miu.com/read-22999.html