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
Related
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 am trying to do load testing for a webpage(angular 2), the response data i am getting in tool is "Loading Appcomponent content here ..".
I need the full html to be displayed in response data. Can anyone help?
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).
So if your application content is being loaded via JavaScript calls (the technology is known as AJAX) JMeter won't trigger JavaScript-driven requests as it is not capable of parsing them.
However you can capture the relevant requests using HTTP(S) Test Script Recorder and see the responses, most probably they will come as XML or JSON so you won't see the "real" page, but you will get the data and will be able to measure the requests timings.
Also AJAX requests need to be handled a little bit differently comparing to "normal" sequential HTTP requests as in the majority of cases browsers execute them in parallel, see How to Load Test AJAX/XHR Enabled Sites With JMeter article for more details.
I have a search form which would open a list when 2 characters are typed. I would like to measure that time it takes to open and load the list in jmeter. How can I do it?
If you look into your "Network" tab of your favourite browser developer tools you will see that each time you type a letter or digit in the search field the browser sends a HTTP request to the backend server and it responds with search suggestions:
So all you need to do is to simulate these requests using JMeter and measure the response time.
You can even record these requests using HTTP(S) Test Script Recorder, Badboy, JMeter Chrome Extension, whatever
There are two things, I would like to quote:
JMeter is not a browser
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).
From JMeter Wiki
JMeter does not process Javascript or applets embedded in HTML pages.
JMeter can download the relevant resources (some embedded resources
are downloaded automatically if the correct options are set), but it
does not process the HTML and execute any Javascript functions.
If the page uses Javascript to build up a URL or submit a form, you
can use the Proxy Recording facility to create the necessary sampler.
If this is not possible, then manual inspection of the code may be
needed to determine what the Javascript is doing.
Solution #1
Whenever you type each character, check any service call to the server. This can be captured using browser developer tools > Network tab.
E.g.
If you type iPhone, there will be six service calls to the server. By measuring each call individually, you will be able to understand, how your application behaves under the load.
Again this is a service call, not the UI rendering.
https://example.com?q=i
https://example.com?q=iP
https://example.com?q=iPh
https://example.com?q=iPho
https://example.com?q=iPhon
https://example.com?q=iPhone
Solution #2
By leveraging Selenium WebDriver in your JMeter Test plan, you can measure the end-to-end response time.
Please refer this Blazemeter article and this blog for more details.
Visit JMeter Plugins website and search for Selenium to read more details about Selenium WebDriver.
JMeter User Manual says: JMeter is not a browser. JMeter does not execute the Javascript found in HTML pages.
I wanted to know exact meaning of this statement.
Most perhaps every webpage have javascripts included.
I am taking an example of testing single page (say home page), and as usual this page have number of js, css, images.
During recording, I recorded all embedded resources.
As far my knowledge, before running a test in jmeter, we have following three options
1. Take only top level request (homepage.html) without selecting embedded resources check-box
2. Take top level request (homepage.html) along with selecting embedded resources check-box
3. Keep top level request along with all other components recorded
Which among 3 is the best option to check page load time (I am assuming 1st option, as it tries to replicate close to browser)
and otherwise, if JMeter do not execute javascript, how am I getting response of js file?
JMeter won't execute JavaScript and won't render the page, but it will download the .js file and record and replay any AJAX call which is driven by JavaScript.
So I would suggest going for option 2, but:
tick "Use concurrent pool" and provide number of threads in interval of 3-8
filter "external" resources via "URLs must match" input
add HTTP Cache Manager to ensure that embedded resources are downloaded only once per thread (this is what well-behaved browsers do)
See How to make JMeter behave more like a real browser article for other tips on how to make your load test more realistic
you can get a response of js file with browser automation tools like selenium or testIT Webtester (a fork of selenium)