JMeter - Sent GET request with square brackets on path - jmeter

I need to make an HTTP GET reques using JMeter 3.1, the point is that the path calls a function which has an array as a parameter.
Something like this:
path: /getData(userIds[1,2,3])
The request works well on Fiddler, but it fails on JMeter due to the square brackets characters. Error is java.net.URISyntaxException: Illegal character in path
Could someone help me with this? Thanks in advance.

Change the implementation type to Java in the HTTP Request Sampler.

Related

Passing a mobile number from a CSV with spaces as a param to Jmeter HTTP GET request

New to Jmeter, I want to pass a variable of say "1234 567 8910" from a CSV file as a Param value to a HTTP GET request and I just can't seem to get it to work, tried a number of ways, any ideas ?
Complains with "java.net.URISyntaxException: Illegal character in query at index 71" which is the first space in the param.
Fixed by changing the csv file.....
If you need to pass this phone number as a GET request parameter just tick URL Encode? box in the HTTP Request sampler:
If you need to pass this phone number as a part of a GET request URL path - you can use __urlencode() function to wrap your variable from the CSV file:
${__urlencode(${variableFromCSV})}
Check out Apache JMeter Functions - An Introduction article to get familiarized with JMeter Functions concept.

How to get URL having ".../?where={'key1' : 'value1' , 'key2' : 'value2':.........}" in Jmeter http request

I need to load test one Python api in below URL format:
//IP:PORT/Sub_Part/?where={"KEY1":"VALUE1","KEY2":"VALUE2","KEY3":"VALUE3"}
I tried to pass the key value pair through csv as well as directly in http request but getting error message.
java.net.URISyntaxException: Illegal character in query at index 47:
http://IP:PORT/Sub_Part/?where={"KEY1":"VALUE1","KEY2":"VALUE2","KEY3":"VALUE3"}
Here key and value are dummy data I have placed here for easy understanding.
Please help me with correct syntax for this URL.
Thanks in advance for all your help.
In REST APIs, JSON objects are typically sent (POST) or returned in the body of the request. They are not typically encoded as part of the URL.
For a GET request, you can either pass the information as segments in the url or as querystring parameters.
For more details refer here, How to send a GET request with a "/" in the query
As per HTML URL Encoding Reference:
URLs can only be sent over the Internet using the ASCII character-set.
so you need to define the request in JMeter's HTTP Request sampler as follows:
Pay attention to URL Encode? checkbox, it has to be ticked otherwise the parameter will be sent "as is"
Another option is using __urlencode() function like:
http://IP:PORT/Sub_Part/?where=${__urlencode({"KEY1":"VALUE1"\,"KEY2":"VALUE2"\,"KEY3":"VALUE3"})}
which will generate an encoded sequence which you could use in the URL path:
%7B%22KEY1%22%3A%22VALUE1%22%2C%22KEY2%22%3A%22VALUE2%22%2C%22KEY3%22%3A%22VALUE3%22%7D
as you can see, all non-ASCII characters where removed.
Check out Apache JMeter Functions - An Introduction to learn more about JMeter Functions concept.

Jmeter Debug Sampler Not Showing Regular Expression Extractor variables

I'm having some issues getting the variables from a Regular Expression Extractor to show in the View Results Tree.
Reg Ex and Test Plan
The Regular Expression Extractor is a child of the HTTP Request. The Debug Sampler and the View Results Tree are at the same level as the HTTP Request. I am trying to extract the Authorization Token.
API response
As you can see, I get a 200 response from the server with the Token.
View Results Tree with no RegEx variables
But I'm not even seeing the RegEx variables in the Debug Sampler. I would expect to see them, even if the Extractor didn't pull anything from the response. Am I missing a node? Looking in the wrong place? Using the wrong elements?
I've burned half a day researching and trying different things, please help.
Thanks.
Your regular expression is not correct, you should be using something like (.*) as your one will not match anything if you don't provide right boundary which you don't have. You can attempt sticking to line break character but it might not work if your token comes last
You're looking into wrong tab of the View Results Tree listener, JMeter Variables (including pre-defined ones) live under Response Data -> Response Body path
Check out How to Debug your Apache JMeter Script article to learn more about JMeter tests troubleshooting techniques.

Response Assertion / Regex Extractor Not Working in JMeter

I'm trying to extract the CSRF token so I can log in, and be able to obtain cookies, but I'm not able to.
I'm able to get a 200 response code when accessing the URL that contains the CSRF token, and I'm able to see it on the browser and the console, but my response assertion is not able to assert anything regardless of me changing the apply to, field to test, and pattern matching rules sections. My regular expression extractor isn't able to get anything either. All the headers to get to the URL are there. Any suggestions?
Forgot to mention, I'm able to get it on one server that's exactly (or should be) exactly the same as this one...
EDIT:
I placed it under the HTTP Sampler that has that response, and here is an example of what I get for my response assertion. I've also added various images.
Unfortunately you didn't share your output, so I cannot tell for sure, but although it seems your RegEx is correct in both cases, it could be that it doesn't match due to some extra spacing.
It appears that you are expecting a valid JSON, so instead of RegEx you could use JSON Extractor and/or JSON Assertion, for which extra spacing will not matter.
Example: if Response Data is
{"token":"12345"}
I can specify JSON Extractor as
(most important line is JSON Path: $.token)
and the result will be variable token with value 12345.
Here's a good online JSON Path tester, which can help you to figure out the right JSON Path.
If your goal is to check presence of a JSON Object with name of token and an arbitrary value I would recommend going for JSON Assertion instead.
Add JSON Assertion as a child of the request you would like to assert.
Use the following JSON Path query:
$.token
JSON Assertion is available since JMeter 4.0
If you still want to go for the Response Assertion - configure it as follows:
Pattern Matching Rules: Contains
Patterns to Test: {"token":"(.+?)"}

JSON Path Extractor in JMeter

I am new to jmeter. Can anyone help me to use a response object of one request to be passed as a request header of next HTTP request ?
Let me explain.
I am getting an access token along with the response of login in my app:
{: "responseCode":18, : "message":"Successfully logged in.", : "responseObject":"8zWExE4eSdhcJDwnW9MgIw=="}
No I want to use this access token (8zWExE4eSdhcJDwnW9MgIw) as one of the parameter of next request.
I used JSON Path Extractor for this.But its not working.
I am using JSON Path Extractor as well and it works great if it is properly configured.
Just put it into request and fill fields:
Variable Name: access_token (or any other you want to use later in request like this ${access_token})
JSON Path: responseObject should be enough if the JSON you pasted is full response (thjose additional colons are just some mistakes when copy-pasting or the JSON is corrupted?)
Default Value: I always use some value like 'NotUpdated!' here so I can assert in the next step or at least see it easily in request.
Not seeing the full response it is quote hard to come up with a correct JSON Path expression.
Given what you posted it should be something like $.responseObject
See JSON Path Syntax guide for queries syntax examples and Using the XPath Extractor in JMeter (scroll down to "Parsing JSON") for plugin installation instructions and XPath to JSON syntax mapping.
Just in case anybody would face an issue with multiple variable extractions using JSON Extractor (like me), make sure to:
List the names of variables/path expressions/default values using a semicolon as a separator.
Provide default values for every variable.
The second point is apparently required, and I only found out about it from this
Medium post.

Resources