Testing Struts application: token handling - jmeter

I'm using JMeter to test a Struts application that uses the saveToken and isTokenValid mehods.
I have a page to select a list of items and then a page to update 1 of the items. When token is set going to the update page, but somehow it changes when I submit the form. Any Ideas?
Note: I follow the same path with the JMeter test as I do within the browser.

Here's what I've done to overcome the formToken problem in our app:
Duplicate the HTTP request. Remove all parameters, and turn it into a GET. Place it before your original request (the POST), and add a regex to the GET, retrieving the token. In the original POST, reference the token as a variable.
The tree would look like this:
. . .
GET
+ Regex for Token
POST
. . .
Let me know if this helps.

In jmeter archives I found the regex you need to use to take the token from first response and add it to next sampler:
name="org\.apache\.struts\.taglib\.html\.TOKEN".*?value="(.*?)"

Related

How I extract the x-csrf-token in request header and pass to post https request in jmeter?

I can't extract the x-csrf-token and pass . I got error like csrf token expired [![enter image description here]
Anyone give some exact ans and support.
Your question doesn't contain sufficient level of details so it cannot be answered comprehensively.
First of all check your ${x} JMeter Variable value using Debug Sampler and View Results Tree listener combination
Then check the request header using the aforementioned View Results Tree listener. The token should be exactly the same as the one returned in the previous request.
Also it seems that your token comes in JSON-like structure, JSON is not a regular language so it would be a better idea considering using JSON Extractor instead of Regular Expression Extractor

Dynamic Refid is appended to the URL but i can't find refid in the response

When i perform the action on UI a dynamic refid is appended to the URL using query string parameter. I can't find that refid in the response but its part of the request. In the code i only found the variable.
Here is the URL on UI.
https://XXXXXX.XXXXXXXXXXXX.com/Recruiter/#!/candidate/new/157072048
I captured the Get request for the same action using the developer tool on Chrome and it looks like this.
Request URL: https://XXXXXX.XXXXXXXXXXXX.com/Pages/candidate/new.aspx?refid=157072048&mode=quick
This Get request has 2 query string parameter.
refid: 157072048
mode: quick
Now i need to captured that refid and pass it the step 2 to be able to create that record. I need help to figure this out.
I found comment in the html that may be help full.
// referenceid - only used with the "Web" app, gets mapped to "&refid=123" in the query string, and ends up as Page.ReferenceID in WebForms.
If this is not a part of a response data then it might be the case it's generated on the client by JavaScript code. You need to figure out how the value is being generated and replicate the same code using JSR223 Test Elements and Groovy language.
Another possibility is that the value comes from an Ajax request which JMeter doesn't execute because it cannot execute client-side JavaScript. In this case you need to simulate the same request and extract the value from there.
And last but not the least, the number you're looking for may reside in one of the sub-samples which may appear as the result of Redirection and you're trying to find it in main sampler response:

JMETER 5.2.1 : Why parameters tab is disabled in some of the requests and how to handle requsts in this case

I am new to JMETER , I am trying to record my web application and correlate JSESSION IDs and other details.
JSESSION ID , i want to capture from previous request and send as parameter in next request.
But in the next request parameters tab is disabled. I see in some posts that body should be empty to have parameters tab.
In the attached screenshot , if I make body empty , how do I pass the parameters.can anyone please help me . I am not able to proceed further
If you're testing a REST API and want to parameterize the contents of your payload you can just inline the relevant JMeter Function and/or Variable directly into the request body like:
{"sessionId":"","ipAddress":"","autoLogin":"N","numberLoginAttempts":0,"cookie":"JSESSIONID=${JSESION}"}
If you will still be experiencing problems use Debug Sampler and View Results Tree listener combination in order to check that:
Your JSESION variable exists
It has expected value

How to pass the response header to authorized api using Jmeter?

I am using Regular Expression Extractor for extracting the header values.
Here is my test plan structure.
I am getting a response in login api is
I want to extract the SRToke, Id1, Id2 and Id3 values from above response header. So I have used Regular Expression Extractor as below
I have also used BeanShell PostProcessor
Now I am getting the error 401 in result
Please give me the solution, what I have done wrong here?
First you need to extract the variables from Response Header section of your Login request. Please refer how to capture from here. https://stackoverflow.com/a/57391175/4481179
After extracting, use HTTP Header Manager as a child of Eventlist Sampler and pass that extracted value as shown below:
You get an error about 401 because you did not add authorized success. You need to know the flow of the system. Maybe its need another parameter beside one parameter BEARER like you.
I think Beanshell won't be required as you are not correlating from cookies, try to find the missing header under the 401 transaction something like Authorization and place the correlated variable there.

JMeter RegUx User Parameters not adding parameter

New to JMeter, and I'm probably missing some simple thing but I can't find it anywhere.
I'm trying to log into a web application so I send a GET request to the home page to retrieve the csrf token and then I use the regular expression extractor to retrieve it:
I then try to place the extracted token into the POST request:
But the extracted token doesn't show up in the request sent via the View Results Tree. Only the UserId and Password are passed which I manually defined:
My regular expression is finding a match as you can see here:
but even if it wasn't finding a match, it should still pass "NotFound" correct?
Any help is greatly appreciated!
Edit: Added a Debug Sampler and it is correctly showing the variable Token with it's correct value. So Token just isn't being added to the request via the RegEx User Parameter Pre Processor.
It's difficult to see what you're doing without seeing the LoginPage step, but you need to make sure you are adding the csrf token you've extracted in the right place.
Typically it could be as a query param, part of a post body or an http header.
As you can see the token has been extracted from your initial response in the Debug sampler, there must be something wrong in how or where the token is being applied to the LoginPage request. (As you say the RegEx User Parameter Pre Processor isn't adding it)
I've never used the PreProcessor and the Jmeter documentation explanation is a bit vague on what it does, but you can add the variables into your request without it using the variable saved for the capture groups - for input name this will be ${Token_g1} and for value it will be ${Token_g2} - which you will be able to see from the Debug Sampler. You'll need to add a Header or Cookie Manager to the Login Page element if this is where the token is.
By setting the template in the Extractor to $1$$2$ you create a variable with the name and value concatenated together. I'm not sure why you would need this, and I would guess that the name doesn't change - in which case you can just use capture group 2, or if you want to use the Variable name Token then update your template to be $2$

Resources