『動善時』JMeter基礎 — 35、JMeter接口關聯【JSON提取器】詳解


1、JSON提取器介紹

相信做過自動化測試的朋友經常會遇到這樣的場景:我想調用系統中的某個業務接口,但是需要先登錄系統。也就是現在很多接口的訪問,都是需要登錄接口的token做為基礎。

在JMeter中先訪問登錄接口,使用后置處理器提取出來token或者Cookie的值,然后將該值帶到后續的業務接口中,這時就會用到JSON提取器組件。

為什么要用 JSON 提取器

  • JSON是目前大多數接口響應內容的數據格式。
  • 在接口測試中,不同接口之間可能會有數據依賴,在JMeter中可以通過后置處理器來提取接口的響應內容。
  • JSON 提取器是其中一個可以用來提取響應內容的元件。

2、JSON提取器界面詳解

添加JSON提取器組件操作:選中“取樣器”右鍵 —> 添加 —> 后置處理器 —> JSON提取器

界面如下圖所示:

image

下面是JSON提取器組件的詳細說明:

  • 名稱JSON提取器組件的自定義名稱,見名知意最好。
  • 注釋:即添加一些備注信息,對該JSON提取器組件的簡短說明,以便后期回顧時查看。

(1)Apply to:作用范圍(返回內容的取值范圍)

  • Main sample and sub-samples:作用於父節點的取樣器及對應子節點的取樣器。
  • Main sample only:僅作用於父節點的取樣器。(選默認的 main sample only 就行了)
  • Sub-samples only:僅作用於子節點的取樣器。
  • JMeter Variable Name to use:作用於JMeter變量(輸入框內可輸入JMeter的變量名稱),從指定變量中提取需要的值。

(2)第二部分內容

  • Names of created variables:定義引用提取值的變量名,后面接口中使用${變量名}引用,必填項。
  • JSON Path expression:填寫JSON Path表達式,用來提取某個值。必填項。
  • Match No.(0 for Random):表示取值是第幾個匹配結果,因為有可能XPath表達式會匹配到多個值。0表示隨機,-1表示全部,1代表第一個,2代表第二個,以此類推。(非必填項)
  • Compute concatenation var(suffix_ALL):勾選此項后,如果匹配到多個結果,JMeter會使用,將他們連接起來,存儲在的變量中,會自動命名為<variable name>_ALL
  • Default Values:缺省值,如果JSON Path表達式匹配不到值的時候,將使用該默認值。(非必填項)

3、JSON提取器的使用

需求:用戶登錄系統,並在系統中查詢個人信息。

實現思路:

  1. 登陸系統,記錄Cookie信息。
  2. 提取出用戶的ID信息。
  3. 保持登陸的狀態,根據用戶ID,查詢用戶信息。

(1)測試計划內包含的元件

添加元件操作步驟

  1. 創建測試計划。
  2. 創建線程組:選中“測試計划”右鍵 —> 添加 —> 線程(用戶) —> 線程組
  3. 在線程組里面,添加配置原件“HTTP Cookie管理器”組件:選中“線程組”右鍵 —> 添加 —> 配置元件 —> HTTP Cookie管理器
  4. 在線程組下,添加取樣器“HTTP請求”組件:選中“線程組”右鍵 —> 添加 —> 取樣器 —> HTTP請求
  5. 在取樣器下,添加后置處理器“JSON提取器”組件:選中“取樣器”右鍵 —> 添加 —> 后置處理器 —> JSON提取器
  6. 在線程組下,添加監聽器“察看結果樹”組件:選中“線程組”右鍵 —> 添加 —> 監聽器 —> 察看結果樹

提示:需要重復添加的組件這里不重復描述。

最終測試計划中的元件如下:

image

點擊運行按鈕,會提示你先保存該腳本,腳本保存完成后會直接自動運行該腳本。

(2)HTTP Cookie管理器內容

什么都不用填寫,保持原樣即可。

image

簡單說明一下:

  • JMeter中自動收集的Cookie,是不會在HTTP Cookie管理器中進行展示的,但是運行后通過查看結果樹可以查看到Cookie信息,接受到的Cookie會被自動存儲在線程變量中。(使用Debug Sampler組件查看)
  • HTTP Cookie管理器會自動記錄每一個請求所產生的Cookie,在后邊對同源站點進行的請求中,都可以自動的使用對應Cookie進行發送。

(3)用戶登陸請求界面內容

發送一個標准POST請求,參數格式為JSON,這里就不做解釋了。

界面內容如下圖所示:

image

(4)JSON提取器界面內容

我們在編輯JSON提取器組件之前,一般先請求一下需要提取返回數據的接口。

因為我們需要先查看一下需要提取的數據在什么位置,同時我們也能夠提前編寫一下JSON Path表達式。

如下圖所示:

image

然后選擇JSON Path Tester視圖模式,先手動編寫JSON Path表達式,看看是否能夠取到需要的數據。

如下圖所示:

image

之后我們就可以編寫JSON提取器組件界面了,如下:

編寫引用名稱、JSON表達式、匹配數據選擇,如下圖:

image

提示:如果要獲取多個元素,則可以在HTTP請求組件中,加入多個后置處理器來提取需要的值。即:每一個后置處理器只能獲取一個值。

JSON提取器組件提取出來的數據,會存儲在線程變量中,供其他后續接口使用。

(5)查看用戶信息請求頁面內容

填寫接口的基本請求信息,然后把JSON提取器提取出來的數據,作為參數化變量應用到請求中。

如下圖所示:

image

(6)查看結果

我們可以看到在第二個請求中,拿到了第一個請求提取出來的用戶ID數據。

如下圖所示:

image

再來看看第二個請求響應的結果,可以看到對應用戶的信息我們已經查詢到了。

image

提示:可以添加Debug PostProcessor(調試后置處理器),或者Debug Sampler(調試取樣器),來查看JSON提取器中,提取出的內容是否正確。

注意:正常跑用例時刪除或禁用它們。

4、總結

JSON提取器通常在接口返回是JSON格式的數據,並提取數據時用的比較多。提取完參數后,相當於把參數以 key-value 的形式放到參數池,以便后面的請求使用。

注意:不能超前引用。

5、補充:JSON Path表達式說明

JSON提取器用於提取請求返回結果中的某個值或者某一組值,用法比正則表達式要簡單,標准寫法為$.key,其中key為返回結果map中的一個鍵,如果是多層則繼續用.key進行即可,如果遇到key的value值為一個List,則使用.key[n],其中n為list中元素的編號。

image

常用JSON Path表達式使用實例,如下:

  1. 獲取第一層中的某個屬性的值:$.key
  2. 獲取List中某個key的value值:$.result[0].name
  3. 獲取列表中的某個列表的屬性值:$.result[1].approver[0]
  4. 獲取一個列表下全部的某一個元素:$.result[*].name
  5. 獲取N個值:
    取前兩條數據:$.result.records[2].id
    取后兩條數據:$.result.records[-2].id
  6. 提取特定條件的某個值:$.result.records[?(@.object_id==0)].id
  7. 獲取固定條件下的多個key的value值:$.result.records[?(@.object_id==0)].["id","name","is_active"]

參考:https://blog.csdn.net/df0128/article/details/86535117


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM