Concurrent thread group execution on same application is failing few sampler in jmeter - jmeter

I am rookie to Jmeter.
I have been asked to run multiple thread groups where there is a single Testplan.
All these Thread groups perform different scenarios on same application.
but running them concurrently is failing few samplers, on the other hand if i run them sequentially then everything works well.
so can anyone guide me on this as what can be done.
Details:
there are 3 samplers.
1. Login with post form
2. Get case status page
3. Logout
Unique key generated from Login page response is RANDOM_TOKEN_KEY which I am capturing and passing it to "Get case status page".
JsessionID is getting generated uniquely for individual steps hence i have skip that one.
From case status page I am directly clicking on Logout page which is working fine.
Issue: when this test is triggered for more than 1 threads, example 10 at same time. then Login is working fine but "Get case status page" sample is throwing error as "Your current session has expired. Please log in again."
Script failed when run concurrently with same user credentials

You should check the checkbox "Delay Thread creation until needed" in Thread Group.
This way threads will work without interrupting the flow.

Related

While running ultimate thread group with multiple users in parallel, I'm getting 'Session Expired' message for the application

Please find below details,
Ultimate Thread Group: User:10, Initial Delay:0, Startup time:300, Hold time: 900,Shutdown time: 120
Once Only Controller: Login
Run Time Controller: Actions (Given Seconds: 1420)
Once Only Controller: Logout
If I run the group with single user it's executing the Login and Action sampler without any error But logout sampler is not executed.
If I run the group with multiple user, some of the samplers are passed and some of the samplers are getting fail with error message as 'Session Expired'. Here also Logout sampler not executed.
How to over come this issue in Jmeter?
The Logout sampler is not executed because the thread is shut down before it reaches it. Your overall thread group duration is 1320 and your Runtime Controller is set to 1420
With regards to the "Session Expired" I can think of 2 options:
missing or improperly implemented correlation, i.e. the maximum duration of the user session is shorter than your test duration. Have you added HTTP Cookie Manager to your Test Plan?
your application gets overloaded and cannot properly maintain the user session, check its logs for any suspicious entries.

JMeter : How to run Multiple Samplers under a single Thread group for multiple concurrent users?

I am new to JMeter and trying to learn JMeter by doing performance testing for one of the application in my organization.
I am facing the blow issue with the concurrent execution of a single thread for multiple users.
Base URL: http://xyz.abc.com/app/
Complete URL : http://xyz.abc.com/app/{RandomSesionID}/Account/Login
I've create a Thread with HTTP Requests as show below.
Thread Group
Hit Base URL
It Loads Login URL
Post Credentials and Click Login
Navigate to Landing Page(baseURL/{RandomSessionID}/Main/Home)
Click Logout(It will navigate to BaseURL/{RandomSessionID}/Main/Home)
When I let the thread count to its default value 1, Everything is working fine. However , The moment I set it to more than 1 (with ramp up time to 10sec), below thing happening.
User 2--->
Hit Base URL
Get The Login URL
Post The Credential
It again goes back to Request 2 (Get The Login URL)
and all the steps of the user are getting redirected to the second request irrespective of what I am requesting.
I tried organizing everything into Simple Controllers to see if the sequence will remain for all users but no avail, I am still running into the same issue.
please help me to understand what is going wrong here and how I can resolve these errors to test the application with more concurrency.
EDIT 1
I did a further investigation on this issue from my end and here are the observations I had.
Case 1: When I create two separate JMeter instances and run the same test parallel with different users, The Thread completely successfully without any errors.
Case 2: Wile Running the Thread with 2 users as mentioned above, The second HTTP request for BaseURL:/Home/Main redirecting the request to /Account/Main instead of going to the next step as shown below.
Image 1 :All The HTTPRequests In Order
Image 2 : This Is the Navigation Request For User 1
Image 3 :User 2 Hitting /Home/Main and Getting Redirected To /Account/Login As Response
Image 4 : User 2 Hitting /Home/Main and Got /Home/Main response
Image 5: User 2 Hitting The /Home/Main and Getting Redirected in Response
As you can see in Image 1, Those are the series of requests which I am making through the thread group and these requests are the same for all the users in the thread.
In Image 2, You can see /Home/Main is a Single GET request with a valid /Home/Main response without any issues.
However, In the Subsequent Images 3-5, You could see that the GET /Home/Main-134 making sub-request and 134-0 and 134-1 with 134-0 to GET /Home/Main and 134-1 to GET /Account/Login.
My Observation: I doubt that JMeter is using a single tab/ instance of the browser and hitting those web requests in the same tab where the first request was initiated. Due to which for the second user, it is always redirecting to the Login Page even though the session ID is valid.
To Confirm whether what I observed is correct, I tried replicating the same scenario in the Chrome Browser as mentoined below.
1. Open Chrome broswer and Access the Base URL.
2. Login and Navigate to Home/Main
3. Now In the same Tab, Type BaseURL and It redirected me to the Login page.
4. Now Enter Credentials of User 2 and login and nvaigate to Home/Main.
5. Now I Try accessing the firt User URL by going back by 3-4 tabs.
However, This won't replicate the exact steps as we are using the browser normally whereas in the requests, we are directly hitting the urls with the GET/POST requests.
I am in a fix and unable to understand what I should do to get through this issue.I am not even sure whether it is the issue with the Application or issue with the Jmeter.
Are there any setting in JMeter which will make sure each Thread (user) of the Thread group gets the option to have a dedicated request instead of using the single instance of the browser internally ?
My expectation is that your It again going back to Request 2 statement is wrong.
Each JMeter thread (virtual user) executes Samplers upside down (or according to Logic Controllers)
So most probably your Get The Login URL is being executed by the second user and given the label of the request is the same you cannot distinguish which user is executing which sampler.
You can add i.e. __threadNum() function as the postfix for the request label like:
Hit Base URL user: ${__threadNum}
this way you will get the information regarding which virtual user is executing which request at each moment of time:
Check out Apache JMeter Functions - An Introduction article to learn more about JMeter Functions concept

JMeter web page test - Your session expired because of inactivity

There will be two actions once we click on log in button
login page action
dashboard action
Part of JMeter
login page action got success.in the continuation
dash board action got failed saying
"text":"Your session expired.","explanation":"Your session expired because of inactivity."
Can anyone help me please..
Your SUT is likely to have some form of verification mechanism which checks user session by verifying parameter(s).
Well-behaved test should do exactly what real browser does, to wit:
Open login page
Perform login
Open dashboard
and your job is to ensure that requests which are being triggered by JMeter are 100% match to the requests which are being sent by the real browser.
Try adding HTTP Cookie Manager to your Test Plan, if your SUT checks the cookie - that should be enough. If not - most probably you will need to perform correlation - the process of extracting dynamic parameters from previous response using JMeter Post-Processors, saving them into JMeter Variables and replacing hard-coded (recorded) values with these variables.

Running Jmeter for Https app with single user for multiple times through Loop controller

Attached is the snapI am trying to run jmeter for single user with value of 10 in loop controller , I first login into the app and then subsequently uses the CSRF token accordingly for future request .The login is always successful and generates CSRF token, But when i try to use CSRF token for future request , I get unauthorized HTTP 401 reponse code , when running with value 10 in loop controller for single user , the same works when i try to run single user with value 1 in loop controller , Any idea how to fix this? (Note :- All this is present in same thread Group)
Well-behaved JMeter test should be able to loop single user without any problem, most likely you have a problem with your test design or mismatch with the application under test behaviour. General recommendation would look like:
First of all switch to iterations on Thread Group level, JMeter configuration elements don't respect iterations originated from elsewhere as "iterations"
Add Debug Sampler and View Results Tree listener to your Test Plan
Run your test with 1 user and 2 loops
Inspect request and response details, identify missing/extra/different parameters and fix them. See How to Debug your Apache JMeter Script for more details on JMeter test troubleshooting techniques.
Blind shot: your test includes login request and the virtual user is already logged in therefore it doesn't require login on 2nd loop. In this case you have 2 options:
Put the logic which needs to be executed only 1 time under Once Only Controller
If you use HTTP Cookie Manager be aware that Clear cookies each iteration works only on Thread Group-level iterations

JMeter page response is not complete or empty, what to do?

I'm running my JMeter scripts for only 5 virtual users. The scenario is: each user logs in to a system using credentials, checks some boxes and clicks the submit button. For the first 4 users, it works fine. I could see the successful submit button response. But often time for the last user, it seems the response page is not complete, though there's no errors.
Can anyone please tell me how can I ensure a complete page response? I'm attaching a screenshot if that helps.
Thanks!
--Ishti
With the listener on the thread where the request is sent, you might find the thread has been terminated before the response has been consumed.
You have another results tree listener at global scope, does it show the response?
Check jmeter.log to determine the time the thread ended.
Try adding a post-processor to force the thread to wait for response.

Resources