简体   繁体   中英

Jmeter extracting fields/parsing JSON response

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?

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:

在此处输入图片说明

ULP_JSON PostProcessor:

在此处输入图片说明

If Controller:

在此处输入图片说明

And here is the run result:

在此处输入图片说明

So as you can see it is possible with our solution

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 .

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/

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

Like This:

正则表达式提取器

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/

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();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM