使用JMeter從JSON響應的URL引數中提取特定值

查拉图斯特拉面条發表於2024-03-21

在使用Apache JMeter進行API測試時,我們經常需要從JSON格式的響應中提取特定欄位的值。這可以透過使用JMeter內建的JSON提取器和正規表示式提取器來完成。以下是一個具體的例子,展示瞭如何從一個JSON響應中提取rowId的值,同時處理字串終止符。

假設我們有以下JSON響應:

{
  "flag": "success",
  "formulaStatus": -1,
  "encryption": "0",
  "changestate": 1,
  "href": "/pf/ovdf/bd/openPage?pr=od&ll=115dfc704f96b039825a66f15b04&rowId=D96DB6B24EEE412BB0DE7E728EE193E6",
  "closer": false
}

我們的目標是提取rowId引數的值D96DB6B24EEE412BB0DE7E728EE193E6。這個值不是直接作為JSON物件的一個屬性呈現的,而是作為一個URL的一部分,巢狀在href欄位中。因此,我們需要兩步來提取這個值。

步驟 1: 提取href欄位

首先,我們使用JSON提取器來捕獲href欄位的值。JSON提取器可以直接從JSON結構中提取值。我們可以按照以下步驟配置JSON提取器:

  1. 新增JSON提取器到請求:在JMeter中,選擇HTTP請求元件,然後右鍵選擇“新增” -> “後置處理器” -> “JSON提取器”。
  2. 配置JSON提取器:在JSON提取器的配置介面中,設定以下引數:
    • 變數名稱extractedHref
    • JSON路徑表示式$.href
    • 預設值NOT_FOUND

這樣配置後,如果JSON響應格式正確,extractedHref變數將包含href欄位的完整URL字串。

步驟 2: 從URL中提取rowId

接下來,我們需要從extractedHref變數中提取rowId的值。我們可以使用正規表示式提取器來完成這個任務:

  1. 新增正規表示式提取器:在JSON提取器下面,右鍵選擇“新增” -> “後置處理器” -> “正規表示式提取器”。
  2. 配置正規表示式提取器:在正規表示式提取器的配置介面中,設定以下引數:
    • 應用到變數extractedHref
    • 正規表示式rowId=([^&"]+)
    • 模板$1$
    • 匹配編號1
    • 預設值NOT_FOUND

在這個正規表示式中,rowId=([^&"]+)的意思是查詢rowId=之後的任何字元序列,直到遇到&"或字串結束。圓括號()表示捕獲組,用於提取匹配的部分。這樣修改後,正規表示式將在遇到引號"時停止匹配,這可以防止提取到額外的字元,如在JSON響應中緊跟rowId值後的引號和其他欄位。

結論

透過以上步驟,我們可以有效地從JSON響應中提取rowId的值。這種方法不僅適用於本例,也可以廣泛應用於需要從巢狀資訊中提取資料的場景。JMeter的強大功能使得它成為API測試和資料提取的強有力工具。

相關文章