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”}
]
}
下面我们使用不同的方法来进行数据的抽取工作:
正则表达式提取
JMeter
安装了正则表达式插件之后,可以按照固定的格式从字符串中提取数据,而本例中正则表达式如下所示:
“firstName”:”(.+?)”
使用了该表达式之后会返回所有服从表达式的字符串,但是只有一个表达式是我们所关注的。可以使用$1$
来作为模板,而
3
则会返回第三个数据。
当偶尔需要对Json数据进行处理时,正则表达式是一个合适的选择,它的一个优势在于JMeter本身就内置了Json处理模块。但是,阅读处理正则表达式却是比较复杂的,特别是对于某些复杂的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
格式的返回值中提取数据的方法,正则表达式对于简单的
Json
格式的数据的快速标准化非常占优势。而
JsonPath
插件可以用于创建能够被维护修改的脚本,但是需要额外的插件安装工作。而最后的带
JSON
库的
BeanShell
确实非常详细并且依赖于
Java
语言的灵活性可以进行进一步的开发。