提取响应结果,生成全局变量: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)

 

posted on 2024-04-06 19:43  诚实的表达自己  阅读(26)  评论(0编辑  收藏  举报