jmeter load testing , Parameterization - json

I am running a HTTP request test in jmeter where I send a json input. For example:
{ "id":"0", "fieldvalue":"sanket","Source":"todays date" }
I need to parametrize this so that for each thread iteration a different value for id, fieldvalue, source is chosen, possibly from a json file only (not CSV file). Is this possible?

Everything is possible. Here are the options
JMeter can read almost any files. Check out the following functions:
__FileToString()
_StringFromFile()
You can also use HTTP Request sampler to read the file, just use file as protocol and UNC path.
Values for parametrization can be obtained using JSON Path PostProcessor. See:
JSONPath - XPath for JSON - for JSON Path language overview and syntax
Advanced Usage of the JSON Path Extractor in JMeter - for some not obvious scenarios covered

Related

I have been trying to add a dynamic value in the url path of an api in Jmeter script from response code of other api. Help me out

I have an api which has many folder to it and each folder have more than two contents and I want to compare each contentid in folder from response code with other duplicate api response code which has same contents as this api in Jmeter
For eg. The folders are in a path something like https://apple.test.com/user/folder(just an example url)
To extract each folder I have used json extractor for above url in http request and extracted the folder id (with json path as $..folderid...if I select ALL in the extractor and try to use ${folderid_ALL} in url path I am getting an error), then created another http request and passed this variable in the url something like
https://apple.test.com/user/folder/${folderid}
And used beanshell assertion to compare their contentid
When I execute this only the first folder is picking up and it's contents are compared and rest of the folders are not shown
Can you help me out on how to extract all the files and compare their contents!!
If you have multiple folder IDs extracted into JMeter Variables using JSON Extractor you can use ForEach Controller to iterate all the IDs.
Also since JMeter 3.1 it's recommended to use JSR223 Test Elements and Groovy language for scripting so consider migrating to the JSR223 Assertion
In order to get the comprehensive answer you should include:
The JMeter Variables generated by the JSON Extractor
The format of the "next" request for the "folder"
The response you're getting
What do you want to compare with what

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

How do I invoke multiple http requests dynamically in jmeter

I have fetched multiple paths of multiple urls from the JSON response using JSON Path extractor in jmeter. The paths are stored in the jmeter variables like url_0,url_1, url_2 and so on. The server IP address is constant.
These urls fetched from the JSON response have to be invoked after parsing the JSON response as stated earlier. How do I achieve this particular behaviour in jmeter?
Use ForEach Controller as it described in Using Regular Expressions in JMeter
If you have variables like:
url_0=/some/path
url_1=/some/other/path
url_2=/some/another/path
etc.
Configure ForEach Controller as follows:
Input Variable Prefix: url
Start index for loop: -1
Output variable name: path
Add "_" before number: check
And use ${path} variable in underlying HTTP Request sampler

How to use JSON response from server to send POST request with parameters from JSON (jmeter)

I have some specific scenario for retrieving Access Token from API using jmeter.
I need to implement following test case and have no idea how to implement this (I am new in jmeter):
Send GET request to server.
Server will return following response: {"RequestToken":"81d1fcd6146d41f69a966a2c083382c7","Expires":3600}
After that I need to send POST request to server with parameter of "RequestToken" from step #2.
Thanks!
Answer of Dmitri T really helped me! Thanks a lot!
If your response {"RequestToken":"81d1fcd6146d41f69a966a2c083382c7","Expires":3600} is the full one you can add a Regular Expression Extractor Post Processor to GET request configured as follows:
Reference Name: anything meaningful, i.e. token
Regular Expression: {"RequestToken":"(.+?)","Expires":3600}
Template: $1$
After that you can refer to extracted value as ${token} or ${__V(token)} in POST request.
If you need to deal with more complex JSON structures I would recommend using JSON Path Extractor available via JMeter Plugin. It allows fetching data from JSON responses in more "intelligent" way as big JSON entities cannot be easily parsed via regular expressions.
In this case relevant JSON Path query will look like $.RequestToken.
See Using the XPath Extractor in JMeter guide for more details (scroll down to Parsing JSON).
Hope this helps.