NOTE: This project has been developed over several years in my spare time and whilst working for several different clients. This is open source and has no commercial ties to any company I have worked for. Screen shots may reflect this as they are home made and may not be truly representative of a full commercial environment. However, these solutions have been used commercially and are known to work in those environments.
The normal stomping grounds for performance testers are back end servers, networks, DBs, REST APIs and back end services, Java applications and gc tuning etc etc. But more and more another side is coming into play, that of front end performance, client side code, DNS lookups and using client connections efficiently.
This is the realm of the more modern web based applications, with wildly varied content and lots of 3rd party and ajax calls etc. A lot of this detail just isn�t captured by classic performance testing methods and this is where webpagetest.org comes in.
Like Google page speed, this application investigates client side efficiency. The online facility gives lots of scope, with test servers around the world and the private instance setup gives us automation, which is where the solution presented here comes in.
WebPageTest Private instance
Webpagetest is a fantastic tool and I highly recommend every web enthusiast or professional to go over there and thoroughly investigate it and all it has to offer. It�s an active open source project with very helpful support and one of the best things is you can host it locally and automate your testing. So it can be used early in the project life cycle to highlight issues as development proceeds. It lends itself to CI front end performance testing.
It has an API that can be used to kick off tests, pole for test progress and analysis results. This can be done with gets and posts to the server which in this solution lends itself to scripting with Jmeter and Jenkins
It supports several browsers and installs updates to those browsers on start up. I use it with IE, Chrome and Firefox but it now supports Safari, which I presume will allow mobile web testing with Safari�s header setting functionality. And in essence it runs the browser just as a user would do, thus obtaining performance data that your users will experience.
Each stage of web page loading can be captured and reported. In this solution I am reporting the following (with example times in milliseconds):
Time to first byte = 369
DOM Content Ready End = 8378
Load Event End time = 10368
Doc Complete Time (ms) = 10370
Fully loaded = 10606
Time to title = 7258
Bytes in (Doc) = 340806
Num requests (fully loaded) = 61
Results are archived on the server, thus allowing quick links to be published so any questionable results can immediately be viewed in detail.