全部產品
Search
文件中心

Performance Testing Service:介面出參

更新時間:Feb 16, 2025

在實際壓測情境中,您可以使用出參功能來提取壓測介面的返回資訊作為下一個請求的輸入。在一個壓測請求API中可以定義多個出參。本文介紹如何提取出參。

出參配置

image出參的配置項說明如下。

配置項

說明

出參名

可包含英文字母、數字、底線(_)和短劃線(-),並且只能以字母開頭。

來源

標記Response的解析方式,可選擇以下類型:

  • Body : JSON :以JSON格式解析Response Body。

  • Body : TEXT:以TEXT格式解析Response Body。

  • Header : K/V :以索引值對格式解析Response Header。

    說明

    當來源使用Header : K/V時,解析運算式的格式必須是標準的MIME類型。

  • Cookie : K/V :以索引值對格式解析Cookie。

  • 響應狀態代碼:提取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完整樣本

{
    "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

說明

$

根對象,例如$.menu.header對應的值為SVG Viewer

[num]

數組訪問,其中num是數字。例如$.menu.items[0]對應的值為{"id":0}

[num0,num1,num2...]

數組多個元素訪問,其中num是數字,返回數組中的多個元素。例如$.menu.items[0,3],返回結果是長度為2的數組,第2個元素為 {"id":2,"label":"Zoom In"}

[start:end]

數組範圍訪問,其中start和end是開始下標和結束下標,返回數組中的多個元素。例如$.menu.items[0:3],返回結果是長度為3的數組,第1個元素為{"id":1,"label":"Open New"} ,第2個元素為null

[?(@.key)]

對象屬性非空過濾。例如$.menu.items[?(@.label)],返回結果是長度為12的數組,第1個元素為{"id":1,"label":"Open New"}

[?(@.key > 123)]

數實值型別對象屬性比較過濾,比較操作符支援=、!=、>、>=、<、<=。例如$.menu.items[?(@.id > 5)],返回結果是長度為12的數組,第1個元素為{"id":6}

[?(@.key = '123')]

字串類型對象屬性比較過濾,比較操作符支援=、!=、>、>=、<、<=。例如$.menu.items[?(@.label = 'Copy Again')],返回結果是長度為1的數組,第1個元素為 {"id":11,"label":"Copy Again"}

[?(@.key like 'aa%')]

字串類型like過濾,萬用字元只支援%,支援not like。例如$.menu.items[?(@.label like 'Copy%')],返回結果是長度為2的數組,第1個元素為{"id":11,"label":"Copy Again"}$.menu.items[?(@.label not like 'Copy%')]返回結果是長度為10的數組,第1個元素為{"id":1,"label":"Open New"}

[?(@.key rlike 'regexpr')]

字串類型正則匹配過濾,正則文法為jdk,支援not rlike。例如$.menu.items[?(@.label rlike 'Copy ([A-Z]+)')]返回結果是長度為1的數組,第1個元素為{"id":12,"label":"Copy SVG"}$.menu.items[?(@.label not rlike 'Copy ([A-Z]+)')]返回結果是長度為11的數組,第1個元素為{"id":1,"label":"Open New"}

[?(@.key in ('v0', 'v1'))]

IN過濾,支援字串和數實值型別,支援not in。例如$.menu.items[?(@.id in (1, 2))],返回結果是長度為2的數組,第1個元素為{"id":1,"label":"Open New"}$.menu.items[?(@.id not in (1, 2))]返回結果是長度為16的數組,第1個元素為{"id":0}

[?(@.key between 234 and 456)]

BETWEEN過濾,支援數實值型別,支援not between。例如:$.menu.items[?(@.id between 0 and 3)],返回結果是長度為4的數組,第1個元素為{"id":0}i返回結果是長度為15的數組,第1個元素為{"id":0}

length() 或者 size()

數組長度。例如$.menu.items.size()$.menu.items.length()均返回22。

..

深度屬性訪問。例如$.menu.items..id返回結果是長度為18的數組,數組元素為每個ID對應的值。

*

對象的所有屬性。例如$.menu.items.*返回結果是items對應的值。

randomIndex()

數組中的隨機元素。例如$.menu.items[randomIndex()]返回items對應數組的隨機元素。

['key']

屬性訪問。例如$['menu']['items'],返回結果是items對應的值。

['key0','key1']

多個屬性訪問。例如$['menu']['items'][3]['id', 'label']返回結果是長度為2的數組,其中第2個元素為"Zoom In"

說明

$.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的值

info

$.info

擷取data的ID的值

data.id

$.data.id

擷取items第一個對象(支援相對位置)的value的值

data.items[0].value

$.data.items[0].value

擷取items倒數第二個對象(支援相對位置)的value的值

data.items[-2].value

不支援

擷取items整個數組

data.items[ALL]

$.data.items[*]

擷取items數組中隨機一個對象

data.items[RANDOM]

$.data.items[randomIndex()]

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

<input name="id" value="([0-9]*)">

0

擷取name為Token的value

name="token" value="([A-Za-z0-9]*)"

0

擷取第三個PlanID的值

var planId=([0-9]*);

2

隨機PlanID的值

var planId=([0-9]*);

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,指定為第幾個匹配項,填寫出參參數名,單擊測試運算式。通過響應詳情匹配結果,預判提取的內容是否符合預期。

  • 若需重新設定出參,則單擊同步出參配置,將此Regex同步到該API的出參列表中。

    說明

    情境調試結束後,如有同步的出參,需返回壓測情境配置頁簽,在對應的API出參定義頁簽下,設定出參名。

出參樣本

在理財業務中,需要根據使用者的消費能力,推薦適當產品。則需要在前置介面中提取出消費能力等級作為出參,在當前的產品推薦介面中,使用該出參。

操作步驟如下:

  1. 登入PTS控制台,選擇效能測試 > 建立情境,然後單擊PTS壓測

  2. 建立PTS情境頁面,添加消費能力(含出參)產品推薦API,並填寫對應的URL。

  3. 消費能力(含出參)API中,基於請求的響應詳情,提取消費能力資訊作為出參。填寫出參名(如output)和具體的解析運算式(如data.items[0].value)。

  4. 單擊建立PTS情境頁面左下角的參數列表,在彈出的自訂參數頁簽可查看已建立的出參。單擊出參參數名稱(如output)或複製表徵圖表徵圖,系統將自動複製參數內容。

  5. 產品推薦API的Body中帶入已提取的出參,在Body定義編輯框內,粘貼參數內容。image

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