概述
一、使用场景
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
最后
以上就是任性宝贝为你收集整理的【接口平台】接口之间的数据传递的全部内容,希望文章能够帮你解决【接口平台】接口之间的数据传递所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复