我是靠谱客的博主 任性宝贝,最近开发中收集的这篇文章主要介绍【接口平台】接口之间的数据传递,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、使用场景

B接口请求参数依赖于A接口返回的数据,希望B接口发送请求的时候能获取A接口返回的数据作为请求参数

二、实现思路

A接口使用后置操作->提取变量功能将请求完成后返回的对应数据提取到变量
B接口对应的参数值直接引用前面设置的变量

三、使用示例

3.1 前置脚本接口请求提取变量

在前置脚本的Tab,添加接口请求前置,将接口返回Response JSON数据里的token值提取到名为token的变量
在这里插入图片描述

3.2 接口参数引用变量

对应的参数值里写入${token}$,即引用可名为token的变量

四、解析数据

往往执行的结果并不能直接赋予变量,比如获取到某一个json数据{"clazz": 1,"grade":{"unitId":20180220}},需要将该unitId字段的值赋给变量p1,如何获取呢?

4.1 key value的方式

将返回值中{"name": "lluozh平台"…}的name赋值给变量NameStr,填写方式如:
在这里插入图片描述

4.2 多级子节点

将返回值中{…"address": {"street": "科学城", "city": "广东广州", "country": "中国"}"…}的street赋值给 StreetStr,填写方式如:
在这里插入图片描述

4.3 数组

将返回值中{…"links": [{"name": "Google", "url": "http://www.google.com"}, {"name": "Baidu", "url":"http://www.baidu.com"}, {"name": "SWServer", "url": "http://swqa.gz.cvte.cn/devices"}]…}第三个name,即SWServer赋值给LinkNameStr,填写方式如:
在这里插入图片描述
支持links[-1].name的方式获取数组数据

五、系统变量

平台提供系统变量 BODY 和 RESPONSE

  • BODY:前置条件接口请求的body信息
  • RESPONSE:前置条件接口请求的响应值

使用栗子:
RESPONSE为json类型

@{getResponseConfigId(${RESPONSE}$)}@

RESPONSE为string类型

@{getResponseConfigId("${RESPONSE}$")}@

六、变量调用

对于不同方式赋值的变量,在运行过程中,都存储于变量池中

在所有输入框输入$时,该输入框出现下拉列表,下拉列表中为全局变量,选中某个变量后,会自动补全该变量的调用${变量名称}$

支持变量中嵌套变量的方式${变量名称1[${变量名称2}$]}$

类型自动识别
支持自动识别变量的数据类型

{
   "resetPasswordDto": {
      "dynamicCode": "${dynamicCode}$",
      "newPassword": "${pwd}$",
      "username": "${phone}$",
      "userInfo": "${userInfo}$"

   }
}

如上json格式,四个变量值分别为

dynamicCode = 2356
newPassword = "swapi"
phone = "15800000000"
userInfo = {
                "class":"高一"
           }

其中dynamicCode 为int类型,newPassword 和phone 为string类型,userInfo 为dict类型

替换后结果是

"resetPasswordDto": {
      "dynamicCode": 2356,
      "newPassword": "swapi",
      "username": "15800000000",
      "userInfo": {
                "class":"高一"
           } 
   }
}

针对替换的变量的数据类型进行识别,自动替换数据(如int类型自动去掉双引号)

七、实现源码

def _variable_placeholder_(self, value):
    """
    处理全局变量占位符
    :param value:
    :return:
    """
    try:
        if isinstance(value, dict):
            for key in value:
                value[key] = self._variable_placeholder_(value[key])
            return value
        # 匹配字符串中${}$字符
        matches = re.findall('\${([\w\.\-\[\]]+)}\$', str(value))
        # 标志位,是否替换成功
        g_flag = True
        for match in matches:
            # 截取首个字符,判断是否在全局变量中
            match_first = str(match).split(".")[0].split("[")[0]
            if match_first in HttpsGlobalVar.globalVariables:
                # 调用函数处理变量
                _value_ = JsonParse().parse_var(str(match), HttpsGlobalVar.globalVariables)
                # 非字符串数据类型的value需要替换外面包围的""双引号
                if not isinstance(_value_,str):
                    # 判断是否是None
                    _value_ = 'null' if _value_ is None else _value_
                    # findall中[]需要特殊处理
                    match_replace = match if match_first == match else str(match).replace("[","\[").replace("]","\]")
                    # 匹配字符串中"${}$"字符
                    if len(re.findall('"\${'+match_replace+'}\$"', str(value))) > 0:
                        # 如果匹配上即,替换"${}$"变量值
                        value = str(value).replace('"${' + match + '}$"', str(_value_))
                    elif len(re.findall("'\${"+match_replace+"}\$'", str(value))) >0:
                        # 如果匹配上即,替换'${}$'变量值
                        value = str(value).replace("'${" + match + "}$'", str(_value_))
                    else:
                        # 如果匹配不了,即替换${}$变量值
                        value = str(value).replace('${' + match + '}$', str(_value_))
                else:
                    # 字符串类型的数据,直接替换变量值
                    if len(re.findall("'\${"+match_first+"}\$'", str(value))) > 0:
                        value = str(value).replace("'${" + match + "}$'", '"'+str(_value_)+'"')
                    else:
                        value = str(value).replace('${' + match + '}$', str(_value_))
            else:
                g_flag = False
        if g_flag:
            # 判断是否仍有匹配的变量
            if len(re.findall('\${([\w\.\-\[\]]+)}\$', str(value))) != 0:
                value = self._variable_placeholder_(value)
        return value
    except Exception as e:
        HttpsGlobalVar.errorObject.error_record("[过程处理-处理全局变量占位符]" + str(e))
        traceback.print_exc(e)
        return value

最后

以上就是任性宝贝为你收集整理的【接口平台】接口之间的数据传递的全部内容,希望文章能够帮你解决【接口平台】接口之间的数据传递所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部