So I recorded a script for the login scenario:
1. url hit is hitting the url
2. login is passing credentials and clicking the login button
This is my jmeter screen
Now my url hit is having 55% error rate while the login has 21% only.
Sometimes url hit has 100% error rate whereas login has 0% error rate.
So i want to know what does this mean.? If a user is not able to hit my url then how will they be able to login.? This is something I want to understand.
Error on url hit is shown 504 gateway time-out
How do you know that users are able to log in? JMeter automatically treats HTTP status codes below 400 as successful so even if your login fails and the server returns a "positive" HTTP status code JMeter will automatically treat the request as successful.
So I would recommend using View Results Tree listener to ensure that your test is doing what it is supposed to be doing and you're really hitting the URL and not getting stuck at the login page.
Going forward you could use i.e. Response Assertion to ensure that the response contains what it should be containing (for example presence of "welcome" text or presence of "Logout" link) or doesn't contain elements which should not be present (given you're logged in you should not be seeing login form)
Related
I am using Jmeter for testng load balance of website.I written a script to test the scenario like to make the user to login into the website and able navigate the user to the dashboard where he can see the recent data by consuming the protected calls.Here i am able to pass the user login scenario but the jmeter showing fail errors regarding the protected calls.When i am searching the url thing whcih is given by jmeter i able to understand that teh protected calls need user credentials to consume data but it fails due to absence of user login things.
Here i am able to pass the user login scenario
are you sure? If JMeter reports the HTTP Request sampler as successful it doesn't necessarily mean that the login will be successful, it might be the case your application responds with status code 200 and some error message explaining why the login has failed and JMeter automatically treats HTTP Status Codes below 400 as successful.
Try inspecting request and response details using View Results Tree listener which has HTML and Browser modes and double check that you're able to login.
If yes - you might need to add HTTP Cookie Manager or perform the correlation of the authorization header in the HTTP Header Manager for the "protected calls" or something like this
If no - you will need to amend your script so login will be successful. In order to avoid such situations in future you might want to add Assertions to your test plan to ensure that JMeter is doing what it's supposed to be doing
i have a web application which has confirmation pop up to save a record . i have used post on the HTTP request sampler and used parameter body , but still the record is not getting saved in the web application using jmeter . i have to click save then yes on the confirmation pop up
JMeter doesn't actually perform "clicks", it sends HTTP Requests, in your case this "popup" seems to be used for populating the USER_COMMENT section:
with regards to "record is not getting saved in the web application" - it indicates that your script fails somewhere somehow, you should inspect response details using View Results Tree listener, it might be the case the application will tell you what's wrong with your request.
The most common reasons are:
Your login request fails hence all subsequent requests are landing at the login page. JMeter automatically treats HTTP status codes below 400 as successful therefore you can see them as "green" or false-positive so check that all previous responses return expected data using the aforementioned View Results Tree listener
The request may fail due to missing or improperly implemented correlation, i.e. you're updating the record which was created during recording instead of adding a new one
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
In my script, I'm using a JSESSIONID instead of a cookie; the JSESSIONID is extracted using a HTTP URL Re-writing Modifier and I can confirm that the correct value (the one which appears in the response data from the login page) is being applied in the Request.
e.g. POST https://qa67.ososinfo.org:446/Staff/staffdetail.xhtml;JSESSIONID=0655ca5420354753ae413984d34cfc27
I'm also using a VIEWSTATE, which I'm extracting prior to running the remainder of the test steps by using a Regular Expression Extractor and setting the resulting variable as a parameter in the HTTP Request,
e.g. javax.faces.ViewState=8d2%2BgOIseczB2FWSo74DqQfkmiYVaK73D8bnLTNWCx%2FB8EtE
The problem is that I'm hitting a Response code: 500 | Response message: Internal Server Error every time I attempt a post with all of the applicable data.
I tried running through the steps manually in a Firefox browser. I copied the contents of the Request tab from the failing page into a REST client, logged in using a separate tab of the same browser and grabbed the appropriate JSESSIONID and VIEWSTATE information, then posted with that info in place - and the manual post was successful.
Am I missing something? Is JMeter requiring something to accomplish this POST that a I'm not seeing in a manual attempt? Please note that I can verify the test is working through the point of login - I can manually see the jmeter user logged in from an admin screen.
Happy to share any/all of what I'm seeing if it might be helpful in helping to troubleshoot.
The rest of the script is working properly but on checkout getting 403 / 404 error. I am not getting why it is happening. Do i need to pass cookies or session Id to get successful checkout or what can I do. please suggest in brief.
Even if you get "green" result and HTTP Response code 200 it doesn't guarantee that your test is doing what it is supposed to do, add View Results Tree listener and inspect response details starting from login, I think your test even doesn't perform a successful login.
So a couple of general recommendations:
Always add HTTP Cookie Manager to your Test Plan
Magento uses some form of CSRF Protection so you will need to get form_key parameter form the previous response and add it to the next request. See the following reference material for more information:
Magento CSRF attack: A Simple Explanation
How to Load Test CSRF-Protected Web Sites