在實際壓測場景中,您可以使用出參功能來提取壓測接口的返回信息作為下一個請求的輸入。在一個壓測請求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的語法及說明。
{
"menu":{
"header":"SVG Viewer",
"items":[
{
"id":0
},
{
"id":1,
"label":"Open New"
},
null,
{
"id":2,
"label":"Zoom In"
},
{
"id":3,
"label":"Zoom Out"
},
{
"id":4,
"label":"Original View"
},
null,
{
"id":5
},
{
"id":6
},
{
"id":7
},
null,
{
"id":8,
"label":"Find..."
},
{
"id":9,
"label":"Find Again"
},
{
"id":10
},
{
"id":11,
"label":"Copy Again"
},
{
"id":12,
"label":"Copy SVG"
},
{
"id":13,
"label":"View SVG"
},
{
"id":14,
"label":"View Source"
},
{
"id":15,
"label":"Save As"
},
null,
{
"id":16
},
{
"id":17,
"label":"About Adobe CVG Viewer..."
}
]
}
}
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內容進行編輯,如組合字符串、參數或函數等。