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.