在实际压测场景中,您可以使用出参功能来提取压测接口的返回信息作为下一个请求的输入。在一个压测请求API中可以定义多个出参。本文介绍如何提取出参。
出参配置
出参的配置项说明如下。
配置项 | 说明 |
出参名 | 可包含英文字母、数字、下划线(_)和短划线(-),并且只能以字母开头。 |
来源 | 标记Response的解析方式,可选择以下类型:
|
解析表达式 | 从Response截取需要的内容,对应到当前变量。 |
第几个匹配项 | 仅用于来源为Body : TEXT时。若上一步定义的解析表达式在Response中有多个匹配时,指定第几个字符串作为出参。从0开始,-n表示倒数第n个,取值区间为 [-99,99]。如果想要取随机匹配项,请填写random。 |
Body : JSON类型
JSON格式解析支持两种类型的返回信息:application/json和text/json。
PTS目前支持新旧版本两种JSONPath的写法,为了说明新版与旧版JSONPath之间的区别,下面分别给出两者的使用示例。
建议您使用新版JSONPath写法。
JSONPath表达式(新版)
以此处提供的JSON示例为例,您可以在下方表格中查看新版JSONPath的语法及说明。
JSONPath | 说明 |
$ | 根对象,例如 |
[num] | 数组访问,其中num是数字。例如 |
[num0,num1,num2...] | 数组多个元素访问,其中num是数字,返回数组中的多个元素。例如 |
[start:end] | 数组范围访问,其中start和end是开始下标和结束下标,返回数组中的多个元素。例如 |
[?(@.key)] | 对象属性非空过滤。例如 |
[?(@.key > 123)] | 数值类型对象属性比较过滤,比较操作符支持=、!=、>、>=、<、<=。例如 |
[?(@.key = '123')] | 字符串类型对象属性比较过滤,比较操作符支持=、!=、>、>=、<、<=。例如 |
[?(@.key like 'aa%')] | 字符串类型like过滤,通配符只支持%,支持not like。例如 |
[?(@.key rlike 'regexpr')] | 字符串类型正则匹配过滤,正则语法为jdk,支持not rlike。例如 |
[?(@.key in ('v0', 'v1'))] | IN过滤,支持字符串和数值类型,支持not in。例如 |
[?(@.key between 234 and 456)] | BETWEEN过滤,支持数值类型,支持not between。例如 |
length() 或者 size() | 数组长度。例如 |
.. | 深度属性访问。例如 |
* | 对象的所有属性。例如 |
randomIndex() | 数组中的随机元素。例如 |
['key'] | 属性访问。例如 |
['key0','key1'] | 多个属性访问。例如 |
$.store.book[0].title
和$['store']['book'][0]['title']
两种写法的语义是相同的。
JSONPath表达式(旧版)
以此处提供的JSON示例为例,您可以在下方表格中查看旧版JSONPath的语法及说明。
{
"info": "success",
"message": "处理成功",
"data": {
"id":13509, "code":0,
"items": [
{"name": "name1", "value": "1234"},
{"name": "name2", "value": "8448"},
{"name": "name3", "value": "1298"},
{"name": "name4", "value": "3049"},
{"name": "name5", "value": "7648"}
]
}
}
期望获取出参的位置 | 旧版解析表达式 | 新版解析表达式(供对比参考) |
获取info的值 |
|
|
获取data的ID的值 |
|
|
获取items第一个对象(支持相对位置)的value的值 |
|
|
获取items倒数第二个对象(支持相对位置)的value的值 |
| 不支持 |
获取items整个数组 |
|
|
获取items数组中随机一个对象 |
|
|
Body : TEXT类型
TEXT格式解析支持任意文本格式且可使用正则表达式提取。当一个正则表达式有多个匹配项时,可指定第几个匹配项,默认用0表示匹配第一个。
API的Response示例如下:
<input name="id" value="34729XXXX">
<input name="token" value="acdfo4dfopasdf44dXXXX">
...
<script>
var planId=4587;
var planId=5689;
var planId=8906;
</script>
出参的值 | 解析表达式 | 匹配数字 |
获取name为ID的value |
| 0 |
获取name为Token的value |
| 0 |
获取第三个PlanID的值 |
| 2 |
随机PlanID的值 |
| random |
格式规范:
顺序匹配原则:按照顺序匹配出参信息。一旦匹配到之后即赋予该出参变量值,不会再匹配后续的信息,故需保证解析表达式的唯一性(除非多个中选第一个即可)。
被匹配的文本内容不能包含大括号({})、小括号(())等特殊字符。
使用正则表达式提取JSON类型的Response时,无需在K/V间隔的冒号后面加空格(JSON格式化展现中加入空格是为了展现优化)。
Cookie : K/V和Header : K/V类型
Cookie : K/V和Header : K/V分别用于提取Cookie字段和Header字段,解析表达式中直接写需要提取的Key即可。例如,Cookie信息为token=1234;path=/
,需要提取Token的值,则解析表达式直接填写token
即可。
响应状态码类型
响应状态码支持提取请求的状态码,一般情况下用于检查点或者条件跳转(不同状态码返回不同页面信息)。
JDBC节点出参
从SQL查询结果提取出参,需要选择上文介绍的Body : JSON类型,查询结果对应JSON数据结构关系如下:
{
"data": [
{
"列名1": "value",
"列名2": "value"
},
{
"列名1": "value",
"列名2": "value"
}
...
]
}
示例:SQL查询结果如下,希望解析第一行name列的值“name1”作为出参。
id | name |
1 | name1 |
2 | name2 |
出参表达式为:
$.data[0].name
出参调试
若您不能判断解析表达式是否正确时,可以在场景调试中测试解析表达式并设置出参。操作步骤如下:
单击创建PTS场景页面下方的调试场景,然后在弹出的场景调试对话框中单击场景名称,对话框右侧将显示详细信息,在右侧对话框中,选中某条API,单击点此去测试出参正则表达式。
在弹出的对话框,选择来源格式,填写正则表达式,指定为第几个匹配项,填写出参参数名,单击测试表达式。通过响应详情匹配结果,预判提取的内容是否符合预期。
若需重新设置出参,则单击同步出参配置,将此正则表达式同步到该API的出参列表中。
说明场景调试结束后,如有同步的出参,需返回压测场景配置页签,在对应的API出参定义页签下,设置出参名。
出参示例
在理财业务中,需要根据用户的消费能力,推荐适当产品。则需要在前置接口中提取出消费能力等级作为出参,在当前的产品推荐接口中,使用该出参。
操作步骤如下:
登录PTS控制台,选择 ,然后单击PTS压测。
在创建PTS场景页面,添加消费能力(含出参)和产品推荐API,并填写对应的URL。
在消费能力(含出参)API中,基于请求的响应详情,提取消费能力信息作为出参。填写出参名(如output)和具体的解析表达式(如
data.items[0].value
)。单击创建PTS场景页面左下角的参数列表,在弹出的自定义参数页签可查看已创建的出参。单击出参参数名称(如output)或图标,系统将自动复制参数内容。
在产品推荐API的Body中带入已提取的出参,在Body定义编辑框内,粘贴参数内容。
此外,您也可以对Body内容进行编辑,如组合字符串、参数或函数等。