Clicking an email verification link using jmeter - jmeter

I have a test plan in jmeter that does the following:
uses a mail reader sampler to retrieve email from gmail account.
uses a Regular Expression Extractor to grab a verify email link and set it to a variable
1-3 work fine the problem I am having is when I get the verify mail link it also captures the protocol https:// so once I try using a HTTP Sampler to get the link I get http:/"https:followed by the url.
How can I either exclude the http: protocol from my regular expression or is there another sampler I can use to click the link
Response I am parsing:
href="https://qa4.iqnavigator.com/routing/YTMzYThjYzctNjIyNy00MWRmLTlhOGItOTdiNWVjMDY1YWFm">
The regular expression I am using: "([^"]+?)" and what is captured: https://qa4.company.com/routing/YTMzYThjYzctNjIyNy00MWRmLTlhOGItOTdiNWVjMDY1YWFm
any ideas

I believe that the solution to your issue is careful use of character groupings and JMeter's "template" feature of the regular expression extractor.
For example, this RegEx:
https://([^/]*)/
Using the Template:
$1$
This will match urls, but not include the "https://" part or the path after the host, in the actual variable stored by JMeter. This will only store the host itself, in your example "qa4.iqnavigator.com".
Another example, lets say you only wanted to extract the routing ID, but you aren't sure it will be http or https:
href=".*://qa4.iqnavigator.com/routing/([^"]*)"
Template: $1$
For more details, check out this answer.
Let me know if I can try to clarify further.

Related

Jmeter Issue: # is getting replaced by %40 when trying to read data from CSV

I have a scenario where I want to read the data from CSV file and use the same in a POST request. The email data contains '#' symbol.
So, when I try to hit the API using Jmeter '#' is getting replaced by '%40'. I tried below solutions but it didn't worked out:
Uncheck 'URL Encode' checkbox
Used __urldecode function -> ${__urldecode(abc#xyz.com)}
Result:
I don't think JMeter converts anything, it should send POST request parameters as they are, what you see in the View Results Tree listener is the textual representation. You can use a sniffer tool like Wireshark to see what exactly JMeter sends:
If you switch to HTTP tab you should see that the username is sent with # symbol
If you have troubles building your HTTP requests manually consider recording just recording the request(s) using either HTTP(S) Test Script Recorder or JMeter Chrome Extension, both should produce syntactically correct HTTP Request samplers.

Unable to pass Jmeter recording test when running the test in real website- one section get fail?

I want to do load test as well as performance test a website and I have recorded user step by step action through jmeter recording by proxy setting. And when I run this recorded test it gets passed all the sections except one section.
During recording steps, it gets filled all the required fields like POST, GET, PATH etc by default as well as like token, session id etc in the HTTP header manager. When user login again its get unique session id and token through Regular Expression Extractor. But my test gets failed when the user wants to accept a task it says unauthorized. I have attached screenshot.
This image showing all the steps user will do from login to logout.
Here steps 2.9 section gets fail.
Here its showing the response from the server.
Please let me know where am I doing wrong.
There are multiple possible issues with your test:
Location of the Regular Expression Extractor and other Post and Pre-Processors. According to JMeter Scoping Rules they are applied to all your Samplers so please double check if this is something you're looking for. If you want to apply the Post-Processor to a single sampler - you need to move it to be a child of the particular sampler
Since JMeter 3.1 it's recommended to use JSR223 Test Elements and Groovy language for scripting so consider converting your Beanshell test elements into JSR223 ones
Since JMeter 3.0 there is JSON Extractor which you should be using instead of the plugins
In general HTTP status 401 means Unauthorized so double check that your test is doing what it is supposed to be doing using View Results Tree listener. You might also want to double check JMeter Variables values using Debug Sampler as it might be the case that the variables are being overwritten with something you don't expect due to the aforementioned Scoping Rules potential issue

Liferay p_auth correlation

In my application the value of p_auth is dynamically changes
I tried to handle it by correlation and it seems fine to me but not getting succeed.
I am attaching some screenshots , Please help me to identify where I am wrong
enter image description here
enter image description here
P_AUTH is Liferay authentication token which is used for CSRF protection, it can be handled in 3 easy steps:
Design your test scenario as follows:
Open login page
Extract p_auth
Pass extracted values from step 2 into login request
Step 2 in details:
If you look into response text from step 1 you will see p_auth in the response body:
In order to extract it into a JMeter Variable add Regular Expression Extractor as a child of the 1st request and configure it as follows:
Reference Name: anything meaningful, i.e. p_auth
Regular Expression: p_auth=(.+?)"
Template: $1$
Usually it is not required to extract formDate parameter, I usually substitute it with ${__time(,)} function
So request itself looks like:
To double check we have successfully logged in - check out Response Data tab of the last request which opens user dashboard:
See How to Load Test CSRF-Protected Web Sites article for a little bit more detailed information on bypassing CSRF protection in JMeter tests.
P.S. I see HTTP Header Manager in this screenshot. If it is something you got during recording - REMOVE IT as it can contain hard-coded irrelevant headers which may harm or at least review headers and leave (or correlate) only those you need

How to fetch session id using reqular expression

Hi I want to fetch a session id from following response using reqular expression
<form id="fm1" action="/cas/login;jsessionid=08D3BEEBAAB30126106472355249AB49" method="post">
I want output as jsessionid=08D3BEEBAAB30126106472355249AB49
I have tried many way, but not working
Thanks.
You can do it via Regular Expression Extractor configured as follows:
Field to check: Body
Reference Name: anything meaningful, i.e. sessionId
Regular Expression: jsessionid=(\d\w+)
Template: $1$
try going through jmeter wiki, the latest one covers in a very good and generic way
http://jmeter.apache.org/usermanual/regular_expressions.html
Use following regular expression: jsessionid=(.+?)"
By the way, you can test regex against real response using RegExp Tester option of the View Results Tree listener.
By the way, there is an easier option to capture JSESSIONID value. In majority of cases it is a HTTP Cookie hence you can easily access it's value using HTTP Cookie Manager
Add the following line to user.properties file (it's located under /bin folder of your JMeter installation)
CookieManager.save.cookies=true
Restart JMeter
Add HTTP Cookie Manager to your Test Plan
Access captured cookie value as ${COOKIE_JSESSIONID} where required.
See Using the HTTP Cookie Manager in JMeter article for more detailed explanation of the importance of this configuration element.

How to transfer data among APIs

We have tried everything could someone please help us for the solution
I am sending a Get Request and getting this response {"UserID":"123456","SecurityApp":"123456"}
I want to save "UserID" content to a variable and also "SecurityApp" content to a variable and then use it in multiple POST request content
You have to use Regular Expression Extractor component of JMETER...
You will get both the UserID and SecurityApp using Regx Extractor.
and you can use those variables in subsequent requests...
There is a test element designed for extraction of data from JSON structures - JSON Path Extractor. It's available via JMeter Plugins - a set of custom extensions which make working with JMeter (and especially reporting) much more easier.
See Using the XPath Extractor in JMeter guide (scroll down to "Parsing JSON") for installation and usage instructions.
For particular your case detailed steps will be:
Download Extras with Libs Set bundle to your JMeter installation root and unpack it.
Restart JMeter if it is running - plugins are not being picked up dynamically
Add a JSON Path Extractor as a child of the request which produces that UserID/SecurityApp response
Configure it as follows:
Variable Name: anything meaningful (i.e. UserID)
JSON Path: $.UserID
Repeat step 4 but this time provide $.SecurityApp as JSONPath and SecurityApp as a Variable Name.
After Post Processor's execution you will be able to refer extracted values as ${UserID} and ${SecurityApp} wherever required in current Thread Group.

Resources