本文版權歸xmeter.net 所有。歡迎轉載,轉載請注明出處。
摘要##
JSON作為一種數據格式,越來越多地被用在Web 2.0和移動應用與后臺應用之間的數據交互。本文介紹如何利用JMeter的“JSON Path Extractor“插件對服務器端返回的JSON字符串進行變量抽取。
安裝插件##
在開始使用之前,需要先把相應的插件安裝到JMeter(作者使用的是JMeter 3.0)。打開網站,下載 plugins-manager.jar并把它放入$JMETER_HOME/lib/ext目錄下。如果之前已經啟動了JMeter,請關閉并重新啟動。啟動后,在“Options”菜單下應該會出現一個新的菜單選項“Plugins Manager”。單擊該選項,彈出的對話框中可以安裝新的插件。如下圖所示,請在“Available Plugins”中選擇“Dummy Sampler” 和“JSON Path Extractor”,然后單擊右下角的“Apply Changes and Restart JMeter”按鈕,等待下載完成后就自動重啟JMeter。
重啟之后,可以打開Plugins Manager確認兩個插件是否已經在“Installed Plugins”選項卡下,如果沒有出現在該選項卡下,則安裝未成功。讀者可以查看一下$JMETER_HOME/lib/ext目錄下是否有新加入的JAR包,沒有的話再重新安裝一次。
插件介紹##
Dummy Sampler:該插件可以用于模擬服務器端返回的數據,而且返回的數據可以是手工在“Response Data”文本框中輸入,這樣可以避免向實際的服務器端發送數據,該插件作為驗證JSON Path Extractor或者正則表達式非常有幫助。
JSON Path Extractor:該插件可以使用JSON路徑表達式來提取JSON返回值中的內容,并且可以把提取出的值放入JMeter變量中,供后面的測試步驟來使用。
測試數據##
本文以下面的JSON片段為例來解釋如何使用JSON Path Extractor來提取內容。
{ "store": {
"book": [
{ "category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{ "category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
},
{ "category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
},
{ "category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
}
}
請按照以下的內容來生成一個測試腳本,并在jp@gc - Dummy Sampler的“Response Data”。
在JSON Path Extractor中,“Destination Variable Name”指的是將抽取出來的值放在指定的變量中,如圖所示是把抽取出來的值賦值給author變量。JSONPath Expression中輸入JSON表達式,如圖所示的表達式“$..author”的意思是把JSON表達式中所有的author都取出。
以上的表達式會生成下列的變量:
author=["Nigel Rees","Evelyn Waugh","Herman Melville","J. R. R. Tolkien"]
author_1=Nigel Rees
author_2=Evelyn Waugh
author_3=Herman Melville
author_4=J. R. R. Tolkien
author_matchNr=4
可以通過變量${author_1}取得值“Nigel Rees”,${author_2}取得“Evelyn Waugh”等依此類推。
再看如上所示的表達式,取得數組下標為0的JSON串下的author字段,該插件會生成以下的變量:
author=["Nigel Rees"]
author_1=Nigel Rees
author_matchNr=1
JSONPath表達式甚至可以根據條件來過濾復合條件的數據,更多關于JSONPath表達式的例子可以參考這里。
JSON數據的其它處理方法##
除了JSONPath表達式之外,讀者也可以考慮使用正則表達式來抽取內容,正則表達式的問題在于如果要處理的JSON字符串比較復雜,正則表達式的寫法也會變得很復雜,不如JSONPath表達式那么簡明易懂。
另外的一種處理方法是采用BeanShell和第三方JSON庫來抽取內容,這種方式下讀者可以采用自己比較熟悉的庫來解析和抽取相應的內容,但是這種方式需要讀者對第三方的JSON庫的使用有所了解,而且部署起來也不是特別方便,另外,使用BeanShell會對性能產生一定的影響。
讀者對這兩種方式感興趣的話,可以參考這篇文章。
關于我們##
XMeter成立于2016年,核心團隊都來自于IBM,是一家領先技術的性能測試持續集成咨詢與服務提供商。我們致力于提供給客戶可靠,簡單,低成本的性能測試解決方案。