淺談后置處理器之JSON提取器

淺談后置處理器之JSON提取器

JMeter 的 JSON 提取器(JSON Extractor)是一個強大的后置處理器,它允許用戶從HTTP響應、數據庫查詢或其他類型的響應中提取JSON數據,并將這些數據存儲為變量,以便在后續的請求中重用。這對于需要動態處理基于JSON格式API測試的場景尤為有用。以下是對JSON提取器的詳細說明和使用教程。

使用場景

● 參數化請求:從一個API響應中提取token或其他標識符,用于后續請求的認證或數據關聯。
● 數據驅動測試:提取JSON數組中的多個值,用于遍歷測試不同的數據集。
● 驗證響應內容:檢查特定的JSON字段是否存在或其值是否符合預期。

配置步驟

添加JSON提取器

  1. 在你的JMeter測試計劃中,選擇一個采樣器(如HTTP請求)。
  2. 右鍵點擊該采樣器,選擇“添加” > “后置處理器” > “JSON 提取器”。

配置參數

JSON 提取器提供了多個配置選項,以下是關鍵參數的解釋:
● 名稱: 給這個后置處理器一個描述性的名稱,便于識別。
● Names of created variables:變量名稱
● JSON Path expressions: 輸入JSON路徑表達式,用于定位你想要提取的數據。例如$.username會提取根對象下的username字段。
● Match No. (0 for Random):
○ 0: 隨機選擇一個匹配項。
○ n: 提取第n個匹配項(n為正整數)。
○ -1: 提取所有匹配項,并以變量數組形式存儲。
● Compute concatenation var(suffix_ALL):匹配到的所有數值并保存,默認為空即可
● Default Values: 如果沒有找到匹配的JSON路徑,可以設置一個默認值。
變量命名與引用
● 變量名: 為提取的數據指定一個變量名。如果Match No.設置為-1,則應使用數組形式的變量名,如users_,這樣每個匹配項將會被命名為users_1、users_2等。

示例

假設你有一個API響應如下:

{"status": "success","data": {"userId": 12345,"username": "exampleUser"}
}

要提取username值,你可以配置JSON Extractor如下:
● JSON Path expressions: $.data.username
● Names of created variables: userNameVar
● Match No.: 1
之后,在JMeter中任何地方可以通過${userNameVar}引用提取到的用戶名。

應用實例

首先我們使用SpingBoot編寫部分測試接口代碼

@PostMapping(value = "/login",produces = "application/json;charset=UTF-8")public String authenticate(@RequestBody JSONObject request) {String validUsername = "admin";String validPassword = "password";String response = "{\"total\":2,\"data\":[{\"id\":123,\"name\":\"John Doe\",\"email\":\"johndoe@example.com\",\"phone\":\"123-456-7890\",\"address\":{\"street\":\"123 Main St\",\"city\":\"New York\",\"state\":\"NY\",\"zip\":\"10001\"},\"interests\":[\"sports\",\"music\",\"travel\"]},{\"id\":456,\"name\":\"Jane Smith\",\"email\":\"janesmith@example.com\",\"phone\":\"987-654-3210\",\"address\":{\"street\":\"456 Elm St\",\"city\":\"Los Angeles\",\"state\":\"CA\",\"zip\":\"90001\"},\"interests\":[\"reading\",\"cooking\",\"hiking\"]}]}";if (request.getString("username").equals(validUsername) && request.getString("password").equals(validPassword)) {return response;} else {return response;}}

我們編寫如下測試腳本
在這里插入圖片描述線現程組:保持默認
HTTP信息頭管理器:名稱content-type,值為application/json;charset=UTF-8
HTTP請求:協議http,服務器名稱或IP為127.0.0.1,端口設置為8091,方法為post,路徑/login,內容編碼為utf-8,消息體數據設置如下

{"username": "admin","password": "password"}

運行腳本,查看結果樹,在HTTP請求的響應數據中Response Body查看結果如下(已經美化JSON格式):

{"total": 2,"data": [{"address": {"zip": "10001","city": "New York","street": "123 Main St","state": "NY"},"phone": "123-456-7890","name": "John Doe","id": 123,"interests": ["sports","music","travel"],"email": "johndoe@example.com"},{"address": {"zip": "90001","city": "Los Angeles","street": "456 Elm St","state": "CA"},"phone": "987-654-3210","name": "Jane Smith","id": 456,"interests": ["reading","cooking","hiking"],"email": "janesmith@example.com"}]
}

情況1:返回值中提取total數據

JSON提取器中Names of created variables設置為var,JSON Path expressions設置為total或者$.total,兩種效果一致,Match No. (0 for Random)設置為-1,Default Values設置為NotFound。
運行腳本,查看結果樹中響應數據的Response Body

var_1=2
var_matchNr=1

情況2:返回值中提取address數據

JSON提取器中Names of created variables設置為var,JSON Path expressions設置為data[*].address或者$.data[*].address,兩種效果一致,Match No. (0 for Random)設置為-1,Default Values設置為NotFound。
運行腳本,查看結果樹中響應數據的Response Body

var_1={“zip”:“10001”,“state”:“NY”,“city”:“New York”,“street”:“123 Main St”}
var_2={“zip”:“90001”,“state”:“CA”,“city”:“Los Angeles”,“street”:“456 Elm St”}
var_matchNr=2

情況3:返回值中提取address數只需要上述情況2中var_1的數據

JSON提取器中Names of created variables設置為var,JSON Path expressions設置為data[0].address或者$.data[0].address,兩種效果一致,Match No. (0 for Random)設置為-1,Default Values設置為NotFound。
運行腳本,查看結果樹中響應數據的Response Body

var_1={“zip”:“10001”,“state”:“NY”,“city”:“New York”,“street”:“123 Main St”}
var_matchNr=1

情況4:返回值中提取interests的數據

JSON提取器中Names of created variables設置為var,JSON Path expressions設置為data[*].interests[*]或者$.data[*].interests[*],兩種效果一致,Match No. (0 for Random)設置為-1,Default Values設置為NotFound。
運行腳本,查看結果樹中響應數據的Response Body

var_1=sports
var_2=music
var_3=travel
var_4=reading
var_5=cooking
var_6=hiking
var_matchNr=6

情況5:返回值中提取interests的數據第一行的數據,即Sports和Reading

JSON提取器中Names of created variables設置為var,JSON Path expressions設置為data[*].interests[0]或者$.data[*].interests[0],兩種效果一致,Match No. (0 for Random)設置為-1,Default Values設置為NotFound。
運行腳本,查看結果樹中響應數據的Response Body

var_1=sports
var_2=reading
var_matchNr=2

情況6:勾選Compute concatenation var(suffix_ALL)

初勾選Compute concatenation var(suffix_ALL),其他設置跟情況5一直。
運行腳本,查看結果樹中響應數據的Response Body

var_1=sports
var_2=reading
var_ALL=sports,reading
var_matchNr=2

注意事項

● 確保JSON路徑表達式正確無誤。
● 當提取多個值時,合理設置Match No.和變量名格式,避免數據混亂。
● 對于復雜的JSON結構,深入理解JSONPath語法將大大提高提取效率。
通過以上步驟和注意事項,你應該能夠有效地使用JMeter的JSON提取器來處理和利用JSON響應數據,進而構建更加動態和強大的性能測試腳本。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/44551.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44551.shtml
英文地址,請注明出處:http://en.pswp.cn/web/44551.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Mojo AI編程語言(三)數據結構:高效數據處理

目錄 1. Mojo AI編程語言簡介 2. 數據結構在數據處理中的重要性 3. Mojo AI中的基礎數據結構 3.1 數組 3.2 列表 3.3 字典 4. 高效數據結構的實現與優化 4.1 哈希表 4.2 樹結構 4.3 圖結構 5. 高效數據處理技術 5.1 并行處理 5.2 內存優化 5.3 數據壓縮 6. 實戰…

【Redis】哨兵(sentinel)

文章目錄 一、哨兵是什么?二、 哨兵sentinel文件參數三、 模仿主機redis宕機四、哨兵運行流程和選舉原理SDOWN主觀下線ODOWN客觀下線 五、 使用建議 以下是本篇文章正文內容 一、哨兵是什么? 哨兵巡查監控后臺master主機是否故障,如果故障了…

js項目生產環境中移除 console

1、terser-webpack-plugin webpack 構建的項目中安裝使用 安裝: npm install terser-webpack-plugin --save-dev 配置 在webpack.config.js文件中 new TerserPlugin({terserOptions: {output: {comments: false, // 去除注釋},warnings: false, // 去除黃色警告,co…

nx上darknet的使用-目標檢測-自定義訓練與制作預訓練模型

目錄 1 訓練yolov4-tiny 1.1 文件準備 1.1.1 Annotations 1.1.2 JPEGImages 1.1.3 labels 1.1.4 trained_models 1.1.5 classes.name 1.1.6 create_labels_txt.py 1.1.7 custom_training.data 1.1.8 get_labels.py 1.1.9 get_train_val.py 1.1.10 train…

python制作甘特圖的基本知識(附Demo)

目錄 前言1. matplotlib2. plotly 前言 甘特圖是一種常見的項目管理工具,用于表示項目任務的時間進度 直觀地看到項目的各個任務在時間上的分布和進度 常用的繪制甘特圖的工具是 matplotlib 和 plotly 主要以Demo的形式展示 1. matplotlib 功能強大的繪圖庫&a…

內網對抗-基石框架篇單域架構域內應用控制成員組成用戶策略信息收集環境搭建

知識點: 1、基石框架篇-單域架構-權限控制-用戶和網絡 2、基石框架篇-單域架構-環境搭建-準備和加入 3、基石框架篇-單域架構-信息收集-手工和工具1、工作組(局域網) 將不同的計算機按照功能分別列入不同的工作組。想要訪問某個部門的資源,只要在“網絡…

Electron運行報錯:Error Cannot find module ‘node_moduleselectroncli.js‘

Electron運行報錯:Error: Cannot find module ‘node_modules\electron\cli.js’ 顧名思義,命令行執行Electron .時候,會優先從項目目錄查找對應依賴,如果是報錯顯示是找不到項目目錄下的依賴,我們可以從安裝在全局的…

DAMA學習筆記(五)-數據存儲和操作

1.引言 數據存儲與操作包括對存儲數據的設計、實施和支持,最大化實現數據資源的價值,貫穿于數據創建/獲取到處置的整個生命周期。 數據存儲與操作包含兩個子活動(圖6-1)。 圖6-1 語境關系圖:數據存儲與操作 (1) 數據庫…

記錄vite項目中Cornerstone的兼容問題(持續更新)

🔎 在vite項目中打包提示錯誤 ESM integration proposal for Wasm" is not supported currently. ?? 問題描述 Error: Could not load /home/xxx/xxx/node_modules/icr/polyseg-wasm/dist/ICRPolySeg.wasm (imported by node_modules/icr/polyseg-wasm/di…

js ES6 part3

Number 是內置構造函數&#xff0c;用來創建數值 const price 12.345console.log(price.toFixed(2))//保留兩位小數 12.35 綜合案例購物車 <body><div class"list"><!-- <div class"item"><img src"https://yanxuan-item…

【代碼隨想錄】【算法訓練營】【第66天】 [卡碼95]城市間貨物運輸II [卡碼96]城市間貨物運輸III

前言 思路及算法思維&#xff0c;指路 代碼隨想錄。 題目來自 卡碼網。 day 66&#xff0c;周五&#xff0c;ding ding~ [卡碼95] 城市間貨物運輸II 題目描述 卡碼95 城市間貨物運輸II 解題思路 前提&#xff1a; 思路&#xff1a; 重點&#xff1a; 代碼實現 C語言 …

數據結構(Java):隊列Queue集合力扣面試OJ題

1、隊列 1.1 隊列的概念 隊列是一個特殊的線性表&#xff0c;只允許在一端&#xff08;隊尾&#xff09;進行插入數據操作&#xff0c;在另一端&#xff08;對頭&#xff09;進行刪除數據。隊列具有先進先出FIFO(First In First Out)的特性。 入隊&#xff1a;數據只能從隊尾…

有獎競猜!斗牛士軍團與法蘭西騎士的終極之戰,誰將笑傲歐洲之巔?

痛快看球&#xff0c;暢玩游戲&#xff0c;AGON愛攻帶你進入酣暢淋漓的足球世界&#xff01; 7月15日&#xff0c;綠茵賽場硝煙再起&#xff0c;兩支身披榮光的王者之師&#xff0c;一路過關斬將&#xff0c;最終會師決賽。一場萬眾矚目的巔峰對決即將拉開帷幕&#xff0c;究竟…

linux UDP通訊:接口函數示例

一、主要用的接口&#xff1a; //服務器端 1. socket() 創建套接字 2. bind() 綁定套接字 與TCP區別開來&#xff0c;沒有listen()、accept()建立連接的過程 3. 通信 recvfrom() sendto() 4. close //客戶端 1. socket() 創建套接字 與TCP區別開來&#xff0c;沒有connect()建立…

數據結構——排序算法(冒泡、快速、選擇、插入)

文章目錄 1. 概念 2. 十大排序算法 3. 冒泡排序 4. 冒泡代碼實現 5. 快速排序 6. 快速代碼實現 7. 選擇排序 8. 選擇代碼實現 9. 插入排序 10. 插入代碼實現 1. 概念 排序&#xff08;Sort&#xff09;是將無序的記錄序列&#xff08;或稱文件&#xff09;調整成有序…

LabVIEW前面板占滿整個屏幕(轉)

希望在運行一個LabVIEW程序時&#xff0c;它的前面板能夠占據整個屏幕&#xff0c;且不顯示Windows的任務欄或其他任何的LabVIEW菜單選項。怎樣才能實現這一功能&#xff1f; 您可以通過手動配置或編程的方式實現該功能。 手動配置VI屬性 您可以通過以下操作&#xff0c;將…

導入項目,JAVA文件是咖啡杯圖標

問題 從圖中可以看到&#xff0c;JAVA文件是咖啡杯圖標 原因 項目沒有識別為MAVEN項目 解決辦法 進入pom.xml文件&#xff0c;右鍵點擊Add as Maven Project即可

在Ubuntu 16.04上安裝和保護MongoDB的方法

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到網站。 簡介 MongoDB 是一個免費且開源的面向文檔的數據庫。它被歸類為 NoSQL 數據庫&#xff0c;因為它不依賴于傳統的基于表的關系型數據庫結…

Spring MVC入門3

看完這篇博客你能學到什么 理解JSON的使用理解注解PathVariable理解解注解RequestPart理解cookie和Session的基本概念理解cookie和Session的區別 如果想真正掌握&#xff0c;還需要自己勤加練習。 正文 JSON JSON概念 JSON&#xff1a;JavaScript Object Notation 【JavaS…

【YOLOv8】 用YOLOv8實現數字式工業儀表智能讀數(一)

上一篇圓形表盤指針式儀表的項目受到很多人的關注&#xff0c;咱們一鼓作氣&#xff0c;把數字式工業儀表的智能讀數也研究一下。本篇主要講如何用YOLOV8實現數字式工業儀表的自動讀數&#xff0c;并將讀數結果進行輸出&#xff0c;若需要完整數據集和源代碼可以私信。 目錄 &…