17
votes

I have following JSON format in response body

[
    {
        "Name" : "Prashant",
        "City" : "Sydney"
    },
    {
        "Name" : "Yogi",
        "City" : "London"
    }
]

What is the better way for checking if this array has any records and if yes give me "Name" for first array index. I am using jp@gc JSON extractor plugin for jMeter.

Is it possible to parse this using a plugin or do I need to do it using regular expressions?

6
Does jmeter provide any programming language? I've tried to find some info on it and seems to be pure GUI thing.Tomas
If not, this question seems to be offtopic for SO.Tomas
It has If, While, For, Switch controls but in a visual way, so it has a kind of GUI DSLpmpm
If possible, always use Regular Expression Extractor. Try to avoid JSON / XPATH / Other extractors. They might look easy to use. But they consume more memory and time. It will affect the performance of your test plan. source: testautomationguru.com/…vins
See this complete guide explaining how to extract data from Json responses using the Json extractor: octoperf.com/blog/2017/03/09/…Jerome L

6 Answers

10
votes

Using Ubik Load Pack JSON plugin for JMeter which is part of JMeter since version 3.0 (donated plugin) and called JSON Extractor, you can do it:

Test Plan overview:

enter image description here

ULP_JSON PostProcessor:

enter image description here

If Controller:

enter image description here

And here is the run result:

enter image description here

So as you can see it is possible with plain JMeter

If you're looking to learn JMeter, this book by 3 developers of the project will help you.

6
votes

I am not sure about your plugin but if it supports JSON path expressions it should be possible.
Try with this expression: $.[0].Name.

This is the plugin I use: http://jmeter-plugins.org/wiki/JSONPathExtractor/ and given expression works with it.

You can find more about JSON Path expressions here: http://goessner.net/articles/JsonPath/index.html#e2.

5
votes

Working with JSON in JMeter is not quite easy as JMeter was designed long ago before JSON was invented. There are some extensions however that make life easier:

http://www.ubik-ingenierie.com/blog/extract-json-content-efficiently-with-jmeter-using-json-path-syntax-with-ubik-load-pack/

3
votes

We can add a regular expression extractor for fetching the value from the response.

Like This:

Regular expression extractor

0
votes

If possible, always use Regular Expression Extractor. Try to avoid JSON / XPATH / Other extractors. They might look easy to use. But they consume more memory and time. It will affect the performance of your test plan.

source: http://www.testautomationguru.com/jmeter-response-data-extractors-comparison/

0
votes

Rest Get service sample:

{
    "ObjectIdentifiers": {
        "internal": 1,
        "External1": "221212-12121",
        "External3": "",
        "Name": "koh"
    },
    "PartyType": "naturalPerson",
    "NaturalPerson": {
        "idNo": "221212-12121",
        "Title": "Mr",
        "Name": "koh",
        "FirstName": "",

We had a similar requirement in our project for parsing json responses using jmeter. The requirement was to validate all the fields in the json response and the expected values of field would be provided from external data source.

I found the JSR223 PostProcessor quite usefule in this case as we are able to implement Groovy scripts with this. it comes as a default plugin with the recent Jmeter version


Edit:

Below is the code snippet:

//get the JSON response from prev sampler
String getResponse = prev.getResponseDataAsString();

//parse the response and convert to string
JSONParser parser = new JSONParser(JSONParser.MODE_JSON_SIMPLE);
String parResponse = parser.parse(getResponse);

String preResponse = parResponse.toString();

JsonObject NaturalPerson = JsonObject.readFrom(preResponse);


//replace all commas with a semi-colon
String csvResponse = preResponse.replaceAll(",", ";");

//log response to file
logFileName = "C:/apache-jmeter-5.1.1/Web_Service_Output.csv";
BufferedWriter outLog = new BufferedWriter(new FileWriter(logFileName, true));
outLog.write(csvResponse + "\n");
outLog.close();