1. 程式人生 > >JMeter中對於Json資料的處理方法

JMeter中對於Json資料的處理方法

 Json作為一種資料交換格式在網路開發,特別是AjaxRestful架構中應用的越來越廣泛。而ApacheJMeter也是較受歡迎的壓力測試工具之一,但是它本身沒有提供對於Json資料的響應處理。本文中假設需要從HTTP的響應頭中返回的Json格式的資料流中抽取某些特定的資料,資料格式如下:

{

   "name":"Simpsons family",

   "members":[

                {"firstName":"Homer", "lastName":"Simpson"},

                {"firstName":"Marge", "lastName":"Simpson"},

                {"firstName":"Bart", "lastName":"Simpson"},

                {"firstName":"Lisa", "lastName":"Simpson"},

                {"firstName":"Maggie", "lastName":"Simpson"}

            ]

}

下面我們使用不同的方法來進行資料的抽取工作:

正則表示式提取

JMeter安裝了正則表示式外掛之後,可以按照固定的格式從字串中提取資料,而本例中正則表示式如下所示:

"firstName":"(.+?)"

使用了該表示式之後會返回所有服從表示式的字串,但是隻有一個表示式是我們所關注的。可以使用$1$來作為模板,而3則會返回第三個資料。


 當偶爾需要對Json資料進行處理時,正則表示式是一個合適的選擇,它的一個優勢在於JMeter本身就內建了Json處理模組。但是,閱讀處理正則表示式卻是比較複雜的,特別是對於某些複雜的Json資料。

JMeter JSON外掛

另一種處理Json資料的方法是使用JMeter的外掛,該外掛可以使用JSONPath來獲取JSON資料中特定位置的資料。類似於XML檔案中的XPathJSONPath可以使用簡單的表示式來操作Json物件。JSON Path Extractor

是一個開源的增加了post處理器的外掛,可以將該外掛的Lib檔案拷貝到JMeterlib目錄下即可。

而上文中提及的需要定位的資料可以使用如下的JSONPath進行描述:

$.members[2].firstName

JMeter中,只需要從PostProcessor選單中開啟JSON Path Extractor然後輸入變數名與預設值即可,如下所示:

 

JSONPath表示式較短並且易於閱讀,能夠有效提高測試指令碼的易維護性,該外掛並不隨著標準的JMeter一起安裝。

BeanShell Post Processor

最後一種方法即是借用了JMeter的對於BeanShell支援的特性,BeanShell是一個輕量級的面向Java的指令碼語言。BeanShell Post Processor允許使用標準的Java語法來處理Json資料,使用方法如下圖所示:

 

總結

本文列舉出了三種可用的從Json格式的返回值中提取資料的方法,正則表示式對於簡單的Json格式的資料的快速標準化非常佔優勢。而JsonPath外掛可以用於建立能夠被維護修改的指令碼,但是需要額外的外掛安裝工作。而最後的帶JSON庫的BeanShell確實非常詳細並且依賴於Java語言的靈活性可以進行進一步的開發。

相關推薦

JMeter對於Json資料處理方法

 Json作為一種資料交換格式在網路開發,特別是Ajax與Restful架構中應用的越來越廣泛。而Apache的JMeter也是較受歡迎的壓力測試工具之一,但是它本身沒有提供對於Json資料的響應處理。本文中假設需要從HTTP的響應頭中返回的Json格式的資料流中抽取某些

JMeter返回Json資料處理方法

Json 作為一種資料交換格式在網路開發,特別是 Ajax 與 Restful 架構中應用的越來越廣泛。而 Apache 的 JMeter 也是較受歡迎的壓力測試工具之一,但是它本身沒有提供對於 Js

JMeter返回Json資料處理方法(轉)

Json 作為一種資料交換格式在網路開發,特別是 Ajax 與 Restful 架構中應用的越來越廣泛。而 Apache 的 JMeter 也是較受歡迎的壓力測試工具之一,但是它本身沒有提供對於 Json&nb

Promise.all對於reject的處理方法

寫了個小爬蟲,用axios.all同時請求多個頁面時,國內網路的原因很容易就超時然後reject了,佛系resolve不可取啊,然後想到可以實現一個“重發失敗請求”的功能。 Promise.all(requestPromises).then(…).catch(…) 會在所有request

向db2插入大量資料處理方法

在DB2中插入資料一般LOAD最快,其次是IMPORT,最後是INSERT。因為PROCEDURE中不能使用LOAD和IMPORT語句,所以在這裡我只談INSERT。 在INSERT的時候要考慮加快速度,你可以此表的日誌功能取消,並且INSERT的時候不要一條一條記錄去插入

pythonjson資料處理

1、從redis中提取的資料為byte,在使用json.loads()時,需要先轉化為字串,另外單引號要轉變為雙引號          data.decode('utf-8').replace("'", "\"") 2、報錯型別如下:json.decoder.JSONDe

JS及JSPjson資料處理

在做h5開發過程中,通常我們會使用EL表示式將java層獲取到的資料通過<input type='hidden' value='${data}'>的方式獲取到當前jsp頁面,然後在js檔案中使用jQuery的方式獲取資料進行資料處理很使用。這裡就個人使用中遇到的問

C#對於json格式資料處理

基本環境 vs2013 .NetFramework4.5 名稱空間:using Newtonsoft.Json.Linq Json字串不知道key值如何獲得value //假設瀏覽器返回的資料如下:     string response={"672":

pythonpost請求json資料且返回json資料處理

上篇講到以json形式傳送post請求。 此次為 post請求返回物件對json 時的處理辦法 請求 #請求 response = requests.post(url, data=json.dumps(pyload),headers=headers).text

SpringMvcjson資料處理

1、使用@ResponseBody實現資料輸出       @ResponseBody的作用:       將標註此註解的處理方法的返回值結果直接寫入HTTP  ResponseBody (Re

前端工作常用的資料處理的js方法

1.函式:split()  功能:使用一個指定的分隔符把一個字串分割儲存到陣列 例子: str=”aaa|sss|ddd|fff|ggg”; arr=str.split(”|”); //arr是一個包含字元值”aaa”、”sss”、”ddd”、”fff”和”ggg”的陣列

關於Post請求流處理的gzip格式的json資料處理

今天遇到一個問題,就是關於遠端服務呼叫返回json資料一致為亂碼的問題,各種常規的處理亂碼的辦法都試了,就是不行,最後看了一篇大神的博文終於得以解決,在這表示感謝! 問題描述: 1、使用URLConnection傳送post請求,請求遠端伺服器中的json資料,一直返回亂

java對於大量資料採用批量處理來提高效率

  設計的話, 是在dao層寫批量新增的方法,以及實現類dao的實現類, 在service呼叫這個dao就可以了!   不過最終走的還是單個只不過是集合的遍歷, 所以不用再mapper.xml裡面配置方法。 IReconBankOrderCpsBatchDao裡面的方法:

Json 資料處理 django request.post/body 區別

專案描述 CMDB 資產入庫時,需要在客戶端採集資料通過requests模組傳送請求到服務端,服務端通過django 定義檢視函式接收資料並返回狀態 方式一:服務端通過request.body 接收請求 client 程式碼 import requests import jso

JS判斷JSON資料是否存在某欄位的方法 JavaScript判斷json是否有某個欄位

方式一 !("key" in obj) 方式二 obj.hasOwnProperty("key")  //obj為json物件。 例項: var jsonworld_pose = JSON.parse(data[0].world_pose); var jsonorie

Java後臺返回和處理JSon資料方法

1.下載JsonObject相關jar包 2.JsonObject的使用程式碼示例 JSONObject jsonObject = new JSONObject(); //建立Json物件 jsonObject.put("username",

java執行shell命令有空格的處理方法

java執行shell命令中有空格的處理?Runtime.getRuntime().exec(cmdstring);如果此時cmdstring中的參數(例如cp文件時文件名)含有特殊符號空格,此時就會出現錯誤,因為源碼會按照一些特殊字符(" \t\n\r\f",註意到其中含有空格)去切分cmdstring

Promise.all對於reject的處理

進一步 結果的處理 The lte png 內網 math info 如果 昨天寫了個小爬蟲,用axios.all同時請求多個頁面時,國內網絡的原因很容易就超時然後reject了,佛系resolve不可取啊,然後想到可以實現一個“重發失敗請求”的功能。 Promise.al

由散列表到BitMap的概念與應用(三):面試的海量資料處理

一道面試題 在面試軟體開發工程師時,經常會遇到海量資料排序和去重的面試題,特別是大資料崗位。 例1:給定a、b兩個檔案,各存放50億個url,每個url各佔64位元組,記憶體限制是4G,找出a、b檔案共同的url? 首先我們最常想到的方法是讀取檔案a,建立雜湊表,然後再讀取檔案b,遍歷檔

Jmeter的多種引數化方法

一、前置處理器-使用者引數 1.新增前置處理器-使用者引數,新增所需要的名稱以及使用者內容 2.將引數同步到請求中需要的引數值中(eg:${searchtxt}) 3.新增相應斷言及斷言結果 斷言結果 ps:注意執行緒的數量需是使用者的倍數方可