场景用例参数输出
场景用例表达式作用域范围:
同一个场景中,当多条用例输出相同key的参数,后执行的用例会覆盖该参数,引用时的值采用就近原则。
同一个场景中,当用例引用变量参数时,先从上游用例输出参数中获取,若获取不到变量参数则从用例相应的作用域范围的公共参数中获取。
1、场景用例表达式基本使用方法。
输出表达式分为三部分:输出的key值、数据来源以及输出表达式。
1、输出的key值:下游步骤用例获取上游用例值的唯一标识,可随意命名。若key值相同,后执行的用例输出会覆盖前面的用例输出。
2、数据来源:响应体、响应头、MD5、时间戳(秒)、时间戳(毫秒)、请求体、请求头、请求url。
响应体:表示数据来源为当前用例执行返回的响应body。
响应头:表示数据来源为当前用例执行返回的响应header。
MD5:表示对用例输出的值或公共参数或上游用例参数输出值进行MD5加密。
时间戳(秒):表示单位为秒的执行用例时的时间戳。
时间戳(毫秒):表示单位为毫秒的执行用例时的时间戳。
请求体:表示数据来源为当前用例中的请求体。
请求头:表示数据来源为当前用例中的请求头。
请求url:表示数据来源为当前用例中的请求url。
3、输出表达式:输出值的表达式是定义获取输出值的方式,根据输出值的类型可以分为以下几种情况。
2.在场景用例表达式中处理响应头数据。
若响应头headers为:
Set-Cookie:BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
Server:bfe/1.0.8.18
Last-Modified:Mon, 23 Jan 2017 13:24:58 GMT
Date:Wed, 14 Mar 2018 07:15:44 GMT
获取响应头中数据,如获取上述响应头中Date
的值,输出表达式为Date
。在后续用例步骤中通过${dateKey}
来使用。
3、在场景用例表达式中处理请求体数据。
如请求body数据为:
timeMS=1522811956561&phoneNum=18257164855&fixed=caroline
- 若获取请求体中数据,如获取请求
body
中phoneNum
的值,输出表达式为phoneNum
。在后续步骤中通过${phoneNumkey}
使用。
4、在场景用例表达式中处理请求头数据。
如请求头数据为:
Connection:keep-alive
Cookie:route=ed12f5; _ga=GA1.2.6876.1596;SESSION=b6a08c-4de7-49ec-9882-eef1f0e2ee;hb_MA-B87E-44F27729;
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/537.36 Chrome/64.32.186 Safari/57.36
获取请求头中数据,如获取上述响应头中Cookie
的值,输出表达式为Cookie
。在后续用例步骤中通过${Cookie}
来使用。
5、在场景用例表达式中处理请求url数据。
如请求url数据为:
http://api.help.bj.cn/apis/aqi/?id=hangzhou
- 若获取请求url中数据,如获取请求query中
id
的值,输出表达式为id
。在后续步骤通过${idkey}
使用。
6、在场景用例表达式中处理json数据。
如响应body数据为:
BODY
"{...}":
"code": 200,
"msg": "success",
"output":{
"csd":"123_w",
"value":75,412
},
"data":
0:
"position_name": "滨江"
"aqi": "61"
"level": "良"
...
9: 5 properties
10: 5 properties
- 若获取Json中所有的响应体,输出表达式为
$
。如输出上述示例响应体值,输出表达式为$
,在在后续步骤用例中通过${all}
来使用。
- 若获取Json中数组的长度,输出表达式为
len{数组的索引路径}
。如输出响应body中data
数组的长度值,输出表达式为len{data}
,在后续步骤用例中通过${data_array}
来使用。
- 若获取Json中第一层级,如输出响应body中
code
的值,输出表达式为code
,在后续步骤用例中通过${codeKey}
来使用。
- 若获取Json中多层级,如输出响应body中
csd
的值,输出表达式为output.csd
,在后续步骤用例中通过${csdKey}
来使用。
- 获取响应body数组中元素顺序是动态变化的值,使用过滤器是用于过滤数组的逻辑表达式,一个通常的输出表达式形如:
[?(@.code >=200)]
,可以通过逻辑表达式&&或||组合多个过滤器表达式。如获取响应中position_name
为滨江
的aqi
值,输出表达式为{$.data[?(@.position_name == "滨江")].aqi}[0]
后续步骤用例中通过${aqi}
来使用。
- 获取响应body中数组对象中的值,若取数组中最后一个值使用
result[-1]
倒数第二个值使用result[-2]
,以此类推。如获取响应body中data数组下aqi
的值,输出表达式为data[-1].aqi
,后续步骤用例中通过${aqiKey}
来使用。
- 获取响应body中某个字符串部分值,使用
sub(参数索引路径,n)
或sub(${start}${end},n)
n为截取的位数。如获取响应body中csd参数前三位,输出表达式为sub($.output.csd,3)
或sub(${"csd":"}${"},3)
后续步骤用例中通过${csd}来使用。
- 获取响应body中某个数字字符串转换为Int类型后的部分值,使用
num(参数索引路径,m)
m为截取的位数。如获取响应body中value
参数前四位,输出表达式为num($.output.value,4)
,后续步骤用例中通过${value}
来使用。
7、在场景用例表达式中处理字符串数据。
若字符串为:
product=6d5c12345b9a6953b69233&userip=123.123.191.60&username=urstest_123@163.com&email=test_123@163.com
- 获取
product
的值可以通过截取product=
与&userip
之间的字符串,输出表达式为${product=}${&userip}
即得到product
的值6d5c12345b9a6953b69233
。
8、场景用例表达式中处理预留字符串。
定义的预留字符为start
和end
。start
表示字符串开头,end
表示字符串结尾。
若字符串为:
product=6d5c12345b9a63732d73d85953b69233&userip=123.123.191.60&username=urstest_123@163.com
${start}${userip}
所截取的值为product=6d5c12345b9a63732d73d85953b69233&
${username}${end}
所截取的值为=urstest_123@163.com
${start}${end}
所截取的值为全部。
9、场景用例中参数加减乘除逻辑运算。
场景中用例的参数逻辑运算是在参数输出时进行计算的,然后在下游用例中引用。若响应体为:
BODY
"{...}":
"code": 200
"msg": "Success"
"data":
"name": "交易额"
"field": "payAmount"
"allValue": 7430
"momValue": "-"
"appValue": "83.8%"
"key": null
- 加减乘除运算。如输出
allValue
值加m
减去n
乘以x
值作为下游用例参数的输入,输出表达式为{$.data.allValue}+m-n*x
。后续步骤用例中通过${allValue}
来使用。