一、使用场景
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类型
1
2@{getResponseConfigId(${RESPONSE}$)}@
RESPONSE为string类型
1
2@{getResponseConfigId("${RESPONSE}$")}@
六、变量调用
对于不同方式赋值的变量,在运行过程中,都存储于变量池中
在所有输入框输入$
时,该输入框出现下拉列表,下拉列表中为全局变量,选中某个变量后,会自动补全该变量的调用${变量名称}$
支持变量中嵌套变量的方式${变量名称1[${变量名称2}$]}$
类型自动识别
支持自动识别变量的数据类型
1
2
3
4
5
6
7
8
9
10{ "resetPasswordDto": { "dynamicCode": "${dynamicCode}$", "newPassword": "${pwd}$", "username": "${phone}$", "userInfo": "${userInfo}$" } }
如上json格式,四个变量值分别为
1
2
3
4
5
6
7dynamicCode = 2356 newPassword = "swapi" phone = "15800000000" userInfo = { "class":"高一" }
其中dynamicCode 为int类型,newPassword 和phone 为string类型,userInfo 为dict类型
替换后结果是
1
2
3
4
5
6
7
8
9
10"resetPasswordDto": { "dynamicCode": 2356, "newPassword": "swapi", "username": "15800000000", "userInfo": { "class":"高一" } } }
针对替换的变量的数据类型进行识别,自动替换数据(如int类型自动去掉双引号)
七、实现源码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55def _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
最后
以上就是任性宝贝最近收集整理的关于【接口平台】接口之间的数据传递的全部内容,更多相关【接口平台】接口之间内容请搜索靠谱客的其他文章。
发表评论 取消回复