My Page has multiple portlet. Each portlet displays data asynchronously using AJAX. Can JMeter help me here. There are many posts in internet which doesn't clearly state if this is possible or not.
I read an interesting post where someone suggested that AJAX requests can be captured and total time can be derived by using a Transaction controller. But at other side someone mentions AJAX requests can never be captured.
So would like to check here and see if any of JMeter gurus can shed light on this one.
I am not a JMeter Guru! But i can understand the issue you are facing now.
AJAX requests are HTTP requests & so it can be captured with JMeter. (I know I have done). As they say Transaction controller will give the total time of the transaction . ie - If you place 4 http requests / AJAX requests under a transaction controller - it will give you the total time of all those 4 requests.
But the issue is - JMeter will call these AJAX/HTTP requests sequentially. But, your browser might make these calls in parallel (depends on your application). In that case - The time you get with JMeter might NOT be correct.
JMeter is not a correct tool to measure Browser's page load time. If you are not aware - it does not execute any javascript. But your browser does. So actual browser page load time might be different.
The parallel request issue can be easily dealt with though.
You can use a thread group in jmeter which has as many parallel threads as your browser has parallel requests.
Therefore, though it is surely not an accurate measurement of the time a browser would need, I can see a few applications for this approach.
If the browser loading pattern is modelled closely enough we should be able to collect some useful results which closely correlate to the timing figures we are looking for.
Related
How to get the page load time of an application which has n number of CSS, js, images, etc? How to do the configuration in JMeter?I have tried integrating selenium, but I can only find the scenario load time not the exact load time of a page.
There is a special setting responsible for parsing the DOM and retrieval of so called "embedded resources": images, CSS, JavaScript, sounds, fonts, etc.
It lives under "Advanced" tab of the HTTP Request sampler
If you have more than one HTTP Request sampler - consider adding HTTP Request Defaults configuration element, if you define the setting there - it will be applied to all HTTP Request samplers in the HTTP Request Defaults scope.
You can use Dmitri T's solution, but I think that solution is to simulate new users every time. You need to treat Jmeter as a protocol tool rather than a smart fully featured browser. I suggest you do scripts recording and put parallel controller in place and put recorded scripts under the parallel controller.
You need to make sure you understand each time a page is loading, which ones are cache, which ones are not. Using recording scripts to add them under parallel controller, I think you can download the parallel controller in Jmeter plugin manager..
I have to do a performance test for application(It has UI) ,It has API requests ,how to find the browser rendering time for APIs , can we do it with retrieve embedded resource. I am quite new to this ,Can someone please guide me.
Not really, as per JMeter project main page:
JMeter is not a browser, it works at protocol level. As far as web-services and remote services are concerned, JMeter looks like a browser (or rather, multiple browsers); however JMeter does not perform all the actions supported by browsers. In particular, JMeter does not execute the Javascript found in HTML pages. Nor does it render the HTML pages as a browser does (it's possible to view the response as HTML etc., but the timings are not included in any samples, and only one sample in one thread is ever displayed at a time).
The only way to measure browser rendering time is using a real browser, if you want to do this along with the existing JMeter performance tests - go for WebDriver Sampler, it provides JMeter integration with Selenium browser automation framework so you will be able to kick off a real browser and measure its rendering time (response time of the WebDriver Sampler will be the time from opening the page till the rendering finishes.
If you need the breakdown - consider using Navigation Timing API
How to find the exact time taken for my web page to load using jmeter? Since i am getting 3 sec as response time but manually it takes more than that to load the page.
Most likely you didn't check Retrieve All Embedded Resources box in the HTTP Request sampler (or even better HTTP Request Defaults) so your request basically gets only HTTP response but doesn't resolve any nested content (images, styles, scripts, fonts) which have much more "weight"
See Web Testing with JMeter: How To Properly Handle Embedded Resources in HTML Responses article to learn more about how to work with these "embedded resources"
Another inconsistency can be caused by JMeter not executing AJAX requests, i.e. if your application relies on JavaScript-generated requests and rendering their responses. JMeter is not a browser and it doesn't automatically execute JavaScript found in the HTML response so if this is the case you will need to manually add these requests to your Test Plan (or record them using HTTP(S) Test Script Recorder) and measure cumulative time via i.e. Transaction Controller.
As a follow on to Dmitri's post, take the page in question and examine it using the developer tools of your chosen browser. Examine very specifically the split between client side actions (JavaScript, Rendering, Painting, ...) and server side requests. In all likelihood you are timing A with Jmeter and B with your eyes
I understand that the primary use of Jmeter is not finding the load time of a page. However, I'd like to know if there's any tool for the below scenario to calculate the approximate load time of a page (barring the rendering time):
Calculate the response time of various web requests for a particular page P1 using JMeter
Record and save the web request pattern of the page P1 in the desired browser
A tool replaces every web request in the pattern with the response time recorded in Step 1 and based on the timeline slice in Step 2, gives us the load time of the given page P1
Hope I'm making sense
Actually the answer lives at JMeter Home Page
JMeter is not a browser. As far as web-services and remote services are concerned, JMeter looks like a browser (or rather, multiple browsers); however JMeter does not perform all the actions supported by browsers. In particular, JMeter does not execute the Javascript found in HTML pages. Nor does it render the HTML pages as a browser does (it's possible to view the response as HTML etc., but the timings are not included in any samples, and only one sample in one thread is ever viewed at a time)
You don't need to do anything as JMeter doesn't actually render page. You may want to perform some tweaks to make it behave more like a real browser, especially HTTP Cache Manager matters.
In regards to saving browser traffic - for Chromium and derivatives you can do it right from Developer Tools by right-clicking a request in Network tab
How can we test different elements' response time? I am really quite new to Jmeter. But nowhere could I find how to test response time of some particular elements only e.g. assume that in a page there are many images present. Are they loaded properly ? If yes, how much time they took?
I will be really grateful if you could help me with that by providing some link or tutorial.
Jmeter is server side testing tool.(jmeter will give you total response time for response containing images and other payload at a specific load on server)
What you are asking comes under client side page rendering.
For loading of images you can use client side tools and browser plugins or profilers.
I would prefer browser plugins for this like firebug, pagespeed or performance testing sites like GTMetrix etc.
they will give total page rendering time (for all requests,images,reponse,css,js everything)
Hope this solves your question