python自动化关联接口参数化(2)高阶

it2025-02-09  30

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临时变量值 >>> var_map = {'id': [1, 2, 3], 'name': ['大众', '本田', '奥迪']} #使用-->eg-01# 备注:saveKey = [key1, key2, ```keyn] 多个key同时保存

2.2 给保存的key值取别名

# 场景多个接口返回数据中包含相同的key # 接口A返回数据 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": "李俊",}]} # 接口B返回数据 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']} # 接口A返回数据 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": "本田"}]} # 当我们需要保存的值key相同时后面的变量会覆盖前一个变量 # 此时需要在保存时给变量取别名 # 接口A保存时 saveKey_a = [('id', 'group_id')] # 使用-->eg-02 SaveResponseData().save_data(saveKey_a, response_a) # 接口B保存时 saveKey_b = [('id', 'car_id')] # 使用-->eg-02 SaveResponseData().save_data(saveKey_b, response_b) # 执行代码保存后var_map临时变量值 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": "李俊",}]} # 保存data数据结构的第一个id值,取别名group_id(必须) saveKey = [['data.0.id', 'group_id']] SaveResponseData().save_data(saveKey, response) # 执行代码保存后var_map临时变量值 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": "李俊",}]} # 保存id为421的employee_name saveKey = [("data[?id=='421'].employee_name", 'employee_name')] SaveResponseData().save_data(saveKey, response) print(BaseModel.var_map) # 执行代码保存后var_map临时变量值 >>> var_map = {'employee_name': ['李天一']} "data[?id=='421'].employee_name" # 此处支持jmespath取值,知识扩展:https://blog.csdn.net/a200822146085/article/details/90044086

下一章:python自动化关联接口参数化(3)高阶

最新回复(0)