標籤:jmeter json beanshell plug-in
http://eclipsesource.com/blogs/2014/06/12/parsing-json-responses-with-jmeter/
Json作為一種資料交換格式在網路開發,特別是Ajax與Restful架構中應用的越來越廣泛。而Apache的JMeter也是較受歡迎的壓力測試工具之一,但是它本身沒有提供對於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"}
]
}
下面我們使用不同的方法來進行資料的抽取工作:
Regex提取
JMeter安裝了Regex外掛程式之後,可以按照固定的格式從字串中提取資料,而本例中Regex如下所示:
"firstName":"(.+?)"
使用了該運算式之後會返回所有服從運算式的字串,但是只有一個運算式是我們所關注的。可以使用$1$來作為模板,而3則會返回第三個資料。
當偶爾需要對Json資料進行處理時,Regex是一個合適的選擇,它的一個優勢在於JMeter本身就內建了Json處理模組。但是,閱讀處理Regex卻是比較複雜的,特別是對於某些複雜的Json資料。
JMeter JSON外掛程式
另一種處理Json資料的方法是使用JMeter的外掛程式,該外掛程式可以使用JSONPath來擷取JSON資料中特定位置的資料。類似於XML檔案中的XPath,JSONPath可以使用簡單的運算式來操作Json對象。JSON Path Extractor是一個開源的增加了post處理器的外掛程式,可以將該外掛程式的Lib檔案拷貝到JMeter的lib目錄下即可。
而上文中提及的需要定位的資料可以使用如下的JSONPath進行描述:
$.members[2].firstName
在JMeter中,只需要從PostProcessor菜單中開啟JSON Path Extractor然後輸入變數名與預設值即可,如下所示:
JSONPath運算式較短並且易於閱讀,能夠有效提高測試指令碼的易維護性,該外掛程式並不隨著標準的JMeter一起安裝。
BeanShell Post Processor
最後一種方法即是借用了JMeter的對於BeanShell支援的特性,BeanShell是一個輕量級的面向Java的指令碼語言。BeanShell Post Processor允許使用標準的Java文法來處理Json資料,使用方法如所示:
總結
本文列舉出了三種可用的從Json格式的返回值中提取資料的方法,Regex對於簡單的Json格式的資料的快速標準化非常佔優勢。而JsonPath外掛程式可以用於建立能夠被維護修改的指令碼,但是需要額外的外掛程式安裝工作。而最後的帶JSON庫的BeanShell確實非常詳細並且依賴於Java語言的靈活性可以進行進一步的開發。