提取响应结果,生成全局变量:extract
import ast from jsonpath import jsonpath from api.tools.handle_attribute import HandleAttr """ 核心功能: 鉴权 参数依赖提取 设置全局变量(设置类属性) """ class HandleExtract: """ 思路: 1、在excel中新增extract_data,用于存储提取数据的key以及提取表达式(jsonpath) 2、在请求需要鉴权的接口之前,去请求登录接口,读取extract_data中的数据,获取字典的key(响应结果中key),values(json) 从响应结果中提取到鉴权信息,设置到类属性作为全局变量 3、如果是鉴权,就在请求需要鉴权的接口之前,将这个鉴权的token设置到请求头里面 4、如果是参数依赖,其他接口在发送请求之前,去获取到相应的参数,替换自己的请求参数 """ # extract_data {"access_token":"$..access_token"} # {'response_type': 'json', 'response': {'access_token': '383be57e-3c93-45ee-a0ee-80d3ae10a218', 'token_type': 'bearer', 'refresh_token': '2ff76de6-0f6f-48d3-96be-4f9444a8fac5', 'expires_in': 1295999} def handle_extract(self, extract_data, response): """ :param extract_data (str): 字符串类型,取数来源读取excel :param response (dict): 字典类型,取数来源接口返回 :return: """ if extract_data: # 三元运算,判断extract_data请求类型 ast.literal_eval将字符串转换为dict extract_data = extract_data if isinstance(extract_data, dict) else ast.literal_eval(extract_data) # items():获取所有的键值对,每个键值对是元祖形式 for key, value in extract_data.items(): # access_token $..access_token # 通过jsonpath将响应结果中的token提取出来 token = jsonpath(response, value)[0] # 将提取到的access_token属性设置为全局变量 setattr(HandleAttr, key, token) # 读取全局变量的属性值 print("获取的token:", getattr(HandleAttr, key)) else: print("extract_data:数据为空,无需设置全局变量") if __name__ == '__main__': extract_data = '{"access_token":"$..access_token"}' requests = {'response': {'access_token': '383be57e-3c93-45ee-a0ee-80d3ae10a218', 'token_type': 'bearer', 'refresh_token': '2ff76de6-0f6f-48d3-96be-4f9444a8fac5', 'expires_in': 1295999}} cl = HandleExtract() cl.handle_extract(extract_data, requests)