接口出參
在實(shí)際壓測場景中,您可以使用出參功能來提取壓測接口的返回信息作為下一個(gè)請求的輸入。在一個(gè)壓測請求API中可以定義多個(gè)出參。本文介紹如何提取出參。
出參配置
出參的配置項(xiàng)說明如下。
配置項(xiàng) | 說明 |
出參名 | 可包含英文字母、數(shù)字、下劃線(_)和短劃線(-),并且只能以字母開頭。 |
來源 | 標(biāo)記Response的解析方式,可選擇以下類型:
|
解析表達(dá)式 | 從Response截取需要的內(nèi)容,對應(yīng)到當(dāng)前變量。 |
第幾個(gè)匹配項(xiàng) | 僅用于來源為Body : TEXT時(shí)。若上一步定義的解析表達(dá)式在Response中有多個(gè)匹配時(shí),指定第幾個(gè)字符串作為出參。從0開始,-n表示倒數(shù)第n個(gè),取值區(qū)間為 [-99,99]。如果想要取隨機(jī)匹配項(xiàng),請?zhí)顚?b data-tag="uicontrol" id="uicontrol-855-376-kzx" class="uicontrol">random。 |
Body : JSON類型
JSON格式解析支持兩種類型的返回信息:application/json和text/json。
PTS目前支持新舊版本兩種JSONPath的寫法,為了說明新版與舊版JSONPath之間的區(qū)別,下面分別給出兩者的使用示例。
建議您使用新版JSONPath寫法。
JSONPath表達(dá)式(新版)
以此處提供的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] | 數(shù)組訪問,其中num是數(shù)字。例如 |
[num0,num1,num2...] | 數(shù)組多個(gè)元素訪問,其中num是數(shù)字,返回?cái)?shù)組中的多個(gè)元素。例如 |
[start:end] | 數(shù)組范圍訪問,其中start和end是開始下標(biāo)和結(jié)束下標(biāo),返回?cái)?shù)組中的多個(gè)元素。例如 |
[?(@.key)] | 對象屬性非空過濾。例如 |
[?(@.key > 123)] | 數(shù)值類型對象屬性比較過濾,比較操作符支持=、!=、>、>=、<、<=。例如 |
[?(@.key = '123')] | 字符串類型對象屬性比較過濾,比較操作符支持=、!=、>、>=、<、<=。例如 |
[?(@.key like 'aa%')] | 字符串類型like過濾,通配符只支持%,支持not like。例如 |
[?(@.key rlike 'regexpr')] | 字符串類型正則匹配過濾,正則語法為jdk,支持not rlike。例如 |
[?(@.key in ('v0', 'v1'))] | IN過濾,支持字符串和數(shù)值類型,支持not in。例如 |
[?(@.key between 234 and 456)] | BETWEEN過濾,支持?jǐn)?shù)值類型,支持not between。例如 |
length() 或者 size() | 數(shù)組長度。例如 |
.. | 深度屬性訪問。例如 |
* | 對象的所有屬性。例如 |
randomIndex() | 數(shù)組中的隨機(jī)元素。例如 |
['key'] | 屬性訪問。例如 |
['key0','key1'] | 多個(gè)屬性訪問。例如 |
$.store.book[0].title
和$['store']['book'][0]['title']
兩種寫法的語義是相同的。
JSONPath表達(dá)式(舊版)
以此處提供的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"}
]
}
}
期望獲取出參的位置 | 舊版解析表達(dá)式 | 新版解析表達(dá)式(供對比參考) |
獲取info的值 |
|
|
獲取data的ID的值 |
|
|
獲取items第一個(gè)對象(支持相對位置)的value的值 |
|
|
獲取items倒數(shù)第二個(gè)對象(支持相對位置)的value的值 |
| 不支持 |
獲取items整個(gè)數(shù)組 |
|
|
獲取items數(shù)組中隨機(jī)一個(gè)對象 |
|
|
Body : TEXT類型
TEXT格式解析支持任意文本格式且可使用正則表達(dá)式提取。當(dāng)一個(gè)正則表達(dá)式有多個(gè)匹配項(xiàng)時(shí),可指定第幾個(gè)匹配項(xiàng),默認(rèn)用0表示匹配第一個(gè)。
API的Response示例如下:
<input name="id" value="34729XXXX">
<input name="token" value="acdfo4dfopasdf44dXXXX">
...
<script>
var planId=4587;
var planId=5689;
var planId=8906;
</script>
出參的值 | 解析表達(dá)式 | 匹配數(shù)字 |
獲取name為ID的value |
| 0 |
獲取name為Token的value |
| 0 |
獲取第三個(gè)PlanID的值 |
| 2 |
隨機(jī)PlanID的值 |
| random |
格式規(guī)范:
順序匹配原則:按照順序匹配出參信息。一旦匹配到之后即賦予該出參變量值,不會再匹配后續(xù)的信息,故需保證解析表達(dá)式的唯一性(除非多個(gè)中選第一個(gè)即可)。
被匹配的文本內(nèi)容不能包含大括號({})、小括號(())等特殊字符。
使用正則表達(dá)式提取JSON類型的Response時(shí),無需在K/V間隔的冒號后面加空格(JSON格式化展現(xiàn)中加入空格是為了展現(xiàn)優(yōu)化)。可查看Response原文信息,參考下圖:
Cookie : K/V和Header : K/V類型
Cookie : K/V和Header : K/V分別用于提取Cookie字段和Header字段,解析表達(dá)式中直接寫需要提取的Key即可。例如,Cookie信息為token=1234;path=/
,需要提取Token的值,則解析表達(dá)式直接填寫token
即可。
響應(yīng)狀態(tài)碼類型
響應(yīng)狀態(tài)碼支持提取請求的狀態(tài)碼,一般情況下用于檢查點(diǎn)或者條件跳轉(zhuǎn)(不同狀態(tài)碼返回不同頁面信息)。
JDBC節(jié)點(diǎn)出參
從SQL查詢結(jié)果提取出參,需要選擇上文介紹的Body : JSON類型,查詢結(jié)果對應(yīng)JSON數(shù)據(jù)結(jié)構(gòu)關(guān)系如下:
{
"data": [
{
"列名1": "value",
"列名2": "value"
},
{
"列名1": "value",
"列名2": "value"
}
...
]
}
示例:SQL查詢結(jié)果如下,希望解析第一行name列的值“name1”作為出參。
id | name |
1 | name1 |
2 | name2 |
出參表達(dá)式為:
$.data[0].name
出參調(diào)試
若您不能判斷解析表達(dá)式是否正確時(shí),可以在場景調(diào)試中測試解析表達(dá)式并設(shè)置出參。操作步驟如下:
單擊創(chuàng)建PTS場景頁面下方的調(diào)試場景,然后在彈出的場景調(diào)試對話框中單擊場景名稱,對話框右側(cè)將顯示詳細(xì)信息,在右側(cè)對話框中,選中某條API,單擊點(diǎn)此去測試出參正則表達(dá)式。
在彈出的對話框,選擇來源格式,填寫正則表達(dá)式,指定為第幾個(gè)匹配項(xiàng),填寫出參參數(shù)名,單擊測試表達(dá)式。通過響應(yīng)詳情匹配結(jié)果,預(yù)判提取的內(nèi)容是否符合預(yù)期。
若需重新設(shè)置出參,則單擊同步出參配置,將此正則表達(dá)式同步到該API的出參列表中。
說明場景調(diào)試結(jié)束后,如有同步的出參,需返回壓測場景配置頁簽,在對應(yīng)的API出參定義頁簽下,設(shè)置出參名。
出參示例
在理財(cái)業(yè)務(wù)中,需要根據(jù)用戶的消費(fèi)能力,推薦適當(dāng)產(chǎn)品。則需要在前置接口中提取出消費(fèi)能力等級作為出參,在當(dāng)前的產(chǎn)品推薦接口中,使用該出參。
操作步驟如下:
登錄PTS控制臺,在左側(cè)導(dǎo)航欄選擇 ,然后單擊PTS壓測。
在創(chuàng)建PTS場景頁面,添加消費(fèi)能力(含出參)和產(chǎn)品推薦API,并填寫對應(yīng)的URL。
在消費(fèi)能力(含出參)API中,基于請求的響應(yīng)詳情,提取消費(fèi)能力信息作為出參。填寫出參名(如output)和具體的解析表達(dá)式(如
data.items[0].value
)。單擊創(chuàng)建PTS場景頁面左下角的參數(shù)列表,在彈出的自定義參數(shù)頁簽可查看已創(chuàng)建的出參。單擊出參參數(shù)名稱(如output)或圖標(biāo),系統(tǒng)將自動復(fù)制參數(shù)內(nèi)容。
在產(chǎn)品推薦API的Body中帶入已提取的出參,在Body定義編輯框內(nèi),粘貼參數(shù)內(nèi)容。
此外,您也可以對Body內(nèi)容進(jìn)行編輯,如組合字符串、參數(shù)或函數(shù)等。