Parsing JSON responses with JMeter

What is JSON


JSON is becoming more and more important as a data exchange format, especially in Ajax web frameworks and RESTful web services. Apache JMeter, which is a very popular tool to perform load tests for web applications, does not come with native support to handle HTTP responses with JSON bodies. This post shows different possibilities how to deal with JSON responses in JMeter.

Task


Let’s assume the task is to extract a specific value from an HTTP response body, containing data in JSON format (e.g. for validation or further processing in the JMeter test script).As an example, the response body consists of the following JSON snippet:

{
   "name":"Simpsons family",
   "members":[
                {"firstName":"Homer", "lastName":"Simpson"},
                {"firstName":"Marge", "lastName":"Simpson"},
                {"firstName":"Bart", "lastName":"Simpson"},
                {"firstName":"Lisa", "lastName":"Simpson"},
                {"firstName":"Maggie", "lastName":"Simpson"}
            ]
}

I’ll demonstrate the different techniques with the task to extract the first name of theinfamous oldest son of the Simpson family, which is the third element in the members
array.

Regular Expression Extractor


With each JMeter installation comes the Regular Expression Extractor which allows to extract data from a String, using the notorious regular expressions.
In our example, the expression

"firstName":"(.+?)"

returns the values of all firstName attributes. Only one attribute is interesting to us (the first name), so $1$ can be used as a template. Match No. 3 returns the third match of the expression which is the first name of the third element of the members array:


Regular expressions are a valid choice for occasional parsing of JSON. An advantage is also that it is a default feature of every JMeter installation. However creating and reading regular expressions requires some practice, and they get complicated very soon when it comes to more complex JSON constructs.

JMeter JSON plug-in


Another way is to install a JMeter plug-in which allows to use JSONPath to access specific elements in JSON. Similar to XPath for XML, JSONPath offers a simple expression syntax to navigate through JSON objects. The JSON Path Extractor is an open source plug-in which adds a post processor for JSON responses to JMeter. For installation, the JAR files of the plug-in simply have to be copied to the lib
folder of the JMeter installation folder.
The attribute in need can be located using the following JSONPath expression:

$.members[2].firstName

In JMeter, simply insert a JSON Path Extractor from the Post-Processors menu and enter variable name, JSONPath expression and default value:


JSONPath expressions are short and easy to read, improving considerably the maintainability of the test script. They do not come with a standard JMeter installation but have to be installed separately. One small drawback is the forced bundling of the plug-in with other plug-ins, summing up to more than 5 MB of JARs to be installed.

BeanShell Post Processor with external JSON library


Another powerful feature of JMeter is its support for the BeanShell which is a scripting language for Java. The BeanShell Post Processor allows to access the JSON response body as a String. For practical use however, the standard String operations offered by Java are too cumbersome to use for JSON parsing.
Fortunately it is possible to add external Java libraries to JMeter which (since BeanShell is a supplement on top of Java) can be used from within the BeanShell scripts. Simply put a JAR file containing your favorite Java JSON Parser into the lib
folder of the JMeter installation directory and restart JMeter.
In our example, I added Ralf Sternberg’s slim JSON parser for Java to JMeter and afterwards used its classes from within the BeanShell:


The BeanShell is very powerful since it offers the full capabilities of the Java world. To parse JSON, installation of additional libraries is highly recommended. In comparison with the JSONPath expression, extracting data with the BeanShell is quite verbose. It’s the best choice however when additional, more complex operations have to be performed after extraction of the data.

Conclusion


This post lined out three possibilities to extract data from JSON response bodies. Regular expressions are excellent for quick prototyping and simple JSON constructs, or if you want to have a life-long job guarantee. The JSONPath extractor plug-in allows to create maintainable test scripts due to its simplicity and the shortness of the expressions, but requires additional installation steps. So does the BeanShell with external JSON library, which tends to be quite verbose but offers the full flexibility of the Java language for further processing of the data.

推荐阅读更多精彩内容

  • PLEASE READ THE FOLLOWING APPLE DEVELOPER PROGRAM LICENSE...
    念念不忘的阅读 10,480评论 7 6
  • 经历了一次又一次的欺骗和背叛,我已经心如死灰。其实也是我一直抱有幻想,不想去相信十几年相伴的身边人其实我真的没有看...
    出发MM阅读 22评论 0 0
  • 最舒适的老歌 是你把着摇篮 轻柔的月光弥漫 梦乡里 我声喃喃 最舒适的老歌 是你扶着栏杆 黄昏的夕阳还在打闹 ...
    垄上行云阅读 41评论 5 1
  • 文/卡兰诺 01 古人云:“做官当做执金吾,娶妻当娶阴丽华。” 可见阴丽华是典型美女加贤妻的代表人物,那么阴丽华到...
    卡兰诺阅读 748评论 29 31
  • 我的朋友少,大部分人都被我自动屏蔽啦,留下来的心中还有些温情在。姑娘的心气都高,很正常啊!我的心气也高啊!既然当啦...
    兔子1235阅读 28评论 0 0