在實際壓測情境中,您可以使用出參功能來提取壓測介面的返回資訊作為下一個請求的輸入。在一個壓測請求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格式解析支援任意文字格式設定且可使用Regex提取。當一個Regex有多個匹配項時,可指定第幾個匹配項,預設用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 |
格式規範:
-
順序匹配原則:按照順序匹配出參資訊。一旦匹配到之後即賦予該出參變數值,不會再匹配後續的資訊,故需保證解析運算式的唯一性(除非多個中選第一個即可)。
-
被匹配的常值內容不能包含大括弧({})、小括弧(())等特殊字元。
-
使用Regex提取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,單擊点此去测试出参正则表达式。
-
在彈出的對話方塊,選擇來源格式,填寫Regex,指定為第幾個匹配項,填寫出參參數名,單擊测试表达式。通過響應詳情匹配結果,預判提取的內容是否符合預期。
-
若需重新設定出參,則單擊同步出参配置,將此Regex同步到該API的出參列表中。
說明情境調試結束後,如有同步的出參,需返回壓測情境配置頁簽,在對應的API出参定义頁簽下,設定出參名。
出參樣本
在理財業務中,需要根據使用者的消費能力,推薦適當產品。則需要在前置介面中提取出消費能力等級作為出參,在當前的產品推薦介面中,使用該出參。
操作步驟如下:
-
登入PTS控制台,選擇效能測試 - 创建场景,然後單擊PTS壓測。
-
在建立PTS情境頁面,添加消費能力(含出參)和產品推薦API,並填寫對應的URL。
-
在消費能力(含出參)API中,基於請求的響應詳情,提取消費能力資訊作為出參。填寫出參名(如output)和具體的解析運算式(如
data.items[0].value)。 -
單擊建立PTS情境頁面左下角的參數列表,在彈出的自訂參數頁簽可查看已建立的出參。單擊出參參數名稱(如output)或
表徵圖,系統將自動複製參數內容。 -
在產品推薦API的Body中帶入已提取的出參,在Body定义編輯框內,粘貼參數內容。

此外,您也可以對Body內容進行編輯,如組合字元串、參數或函數等。