How to create multi-request based on last json response in JMeter? - json

I will get json response from last request, then I will parse the response and get a variable array, then create new request base on each element in that array one by one. I don't know how to implement it.

Use JSON Extractor and ForEach Controller combination. The idea is to have variables like:
var_1=foo
var_2=bar
var_3=baz
So you would be able to iterate them using foreach loop. See Using Regular Expressions in JMeter article to get the overall idea.

Steps to follow:
Add JSON Extractor (>= 3.0 version) Or JSON Path Extractor (< 3.0 version) plugin, to the HTTP Request sampler, as a child, in which JSON response is received.
Add the JSON Path Expressions to capture the specific values and store it in variable names, say capturedArray. refer JSON Path Syntax.
In later requests, i.e., HTTP Request Samplers, you can retrieve the array value by using the syntax ${capturedArray}

Related

JMeter Json Extractor for Multiple Http Requests

I have setup a ForEach Controller to execute multiple HTTP requests but I would like to then extract JSON values from the response bodies from each of the HTTP requests.
When I try to add a JSON Extractor PostProcessor to the HTTP Request, I am only able to get a json value from the last HTTP Request. Is it possible to get values from all of the HTTP requests?
You're getting the values from each HTTP Request, you just overwrite the previous value when the next iteration of the ForEach Controller starts, you can double check yourself by adding Debug Sampler after the HTTP Request sampler under the ForEach Controller
Just add ${__jm__ForEach Controller__idx} pre-defined variable as a prefix or postfix for the name of the created variable in JSON Extractor so on each iteration it will create a separate JMeter Variable holding the current value extracted from the response.
Example configuration:
Demo:
JSON extractor is ok but something that you can try and is more flexible i add beanshell post processor and choose your language, then you can extract the JSON from HTTP requests.
You can choose java as language and use following code to extract the JSON as string
String jsonString = prev.getResponseDataAsString();

I am trying to get token but not able to extract it using JSON extractor

This is my JSON extractor
Debug sampler
Token I am getting in response
But the token is null
Your setup is wrong, the JSON attribute you're looking for is token, not the access_token therefore you need to amend your JSON Path expression to look like:
$.token
also it's hard to say looking at the image on which level the token lives, you might need to use deep scan operator instead like:
$..token
More information: API Testing With JMeter and the JSON Extractor

Jmeter - Extract JSON field value of a SENT request

I am trying to obtain data from sent JSON and use it further in another request.
My sent JSON also has dynamic variables like ${data} so the trick is that it has to execute first in order to be able to extract.
Let's say I have the following SENT JSON:
{
"field_one": ${data1},
"field_three": [more data],
"field_two": ${data2}
}
Question is: How can I extract "field_one" and "field_two" values from the sent request?
Thanks
You don't need to extract them, they are ${data1} and ${data2} so you can re-use these JMeter Variables anywhere in the script.
If I don't understand something obvious or you need to copy the values to another JMeter Variables, you can extract them as follows:
Add JSR223 PostProcessor as a child of the request which sends above JSON
Put the following code into "Script" area:
def requestBody = new groovy.json.JsonSlurper().parseText(sampler.getArguments().getArgument(0).getValue())
vars.put('field_one', requestBody.field_one)
vars.put('field_two', requestBody.field_two)
That's it, now you should have ${field_one} and ${field_two} JMeter Variables holding the values you're looking for.
In the above example sampler stands for HTTPSamplerProxy and vars for JMeterVariables, check out Top 8 JMeter Java Classes You Should Be Using with Groovy for details on the above and other JMeter API shorthands available for JSR223 Test Elements.
More informaion:
JsonSlurper
Apache Groovy: Parsing and producing JSON

JMETER store request JSON Element as variable

Trying to figure out how I can access elements of a post request body (JSON) and store it as a variable. One of my tests creates a user using ${__UUID}#gmail.com - and I'd like to then check that my response includes this same information.
I'm guessing I could probably create the UUID before the request and store it as a variable, and then check against that, but wondering if there is anything similar to JSON Path Extractor for request elements.
There is a JSR223 PreProcessor you can use to fulfil your requirement.
Assuming you have JSON Payload like:
{
"user": "${__UUID}#gmail.com"
}
Add JSR223 PostProcessor and put the following code into "Script" area:
def user = com.jayway.jsonpath.JsonPath.read(sampler.getArguments().getArgument(0).getValue(), '$..user').get(0).toString()
log.info('Random user email:' + user)
vars.put('user', user)
The above code will:
Extract from the request everything which matches $..user JSON Path expression
Print it to jmeter.log file
Store the value into a JMeter Variable so you will be able to refer it as ${user} where required.
More information:
Apache Groovy - Why and How You Should Use It
Groovy - Parsing and Producing JSON

use a rest webservice response in another request using jmeter

suppose I have a webservice that generate random password and return json response, this password is used in the following request. is there anyway to do this in jmeter, i.e to extract the password from the first response and use it in the next request
We have Regualr Expression Extractor Or JSON Path Extractor in JMeter to extract the values from 1 response & use it in subsequent requests.
As Vinoth S said, JSON extractor is the way to go. You can download it from here. Document how to use it is here. Just put it in request from which you want to extract, type vairable_name that you will use in the next request as ${variable_name}, JSON Path is quite easy to set, probably, if the response is not to complicateg just the property name from JSON will be enough, or something like $.varName and you're ready to go.