利用selenium的可以執行javascript腳本的特性,我寫了一個java版本的獲得頁面加載速度的代碼,這樣你就可以在進行功能測試的同時進行一個簡單的測試頁面的加載速度的性能測試。
我現在的項目用途主要是在功能測試的同時獲得各個測試頁面的加載速度,看看哪些頁面的加載速度比較慢,如果加載的時間太慢,我就專門針對這個頁面使用YSlow工具去檢查一下這個頁面,然后給出這個頁面加載比較慢的建議,提交給開發人員,讓他們自己去看看如何解決這個問題?
通過調用通用的瀏覽器的Performance.timing接口API進而獲得頁面的真實加載速度。這里需要注意的是,通過調用API window.performance.timing.loadEventEnd,我發現在IE瀏覽器上可能返回的是Double類型的值,但是在Chrome或者是Firefox上返回的卻是Long類型的,所以下面的代碼中我就進行了不同類型的轉換。
通過調試,下面的代碼可以用在IE,Chrome,Firefox瀏覽器上。其他的瀏覽器沒有測試。

/** * get the current page loading time ,it will return seconds * @param driver * * @see http://www.softwareishard.com/blog/firebug/support-for-performance-timing-in-firebug/ * @see http://selenium.polteq.com/en/implement-web-timings/ * @see http://www.html5rocks.com/en/tutorials/webperformance/basics/ * @see http://www.theautomatedtester.co.uk/blog/2010/selenium-webtimings-api.html */ public long getPageLoadTime(){ long pageloadtime=0; long pagestarttime=0; long pageendtime=0; //try{ //different with browser ,ie will return is double value but firefox and chrome will return is long Object startobject=executeJSReturn("return window.performance.timing.navigationStart;"); Object endobject=executeJSReturn("return window.performance.timing.loadEventEnd;"); //@SuppressWarnings("unchecked") // pagetimer=executeJSReturn("var performance = window.performance || window.webkitPerformance || window.mozPerformance || window.msPerformance || {};"+ // " var timings = performance.timing || {};"+ // " return timings;"); //long pageloadend=(pagetimer.get("loadEventEnd"))/1000; // long pageloadstart=(pagetimer.get("navigationStart"))/1000; //pageloadtime=(pageloadend-pageloadstart); //think it's the firefox or chrome browser if(startobject instanceof Long){ pagestarttime=(Long) startobject; logger.debug("the page navigate start time is:"+pagestarttime); } if(startobject instanceof Double){ Double tempvalue=(Double) startobject; pagestarttime=new Double(tempvalue).longValue(); logger.debug("the page navigate start time is:"+pagestarttime); } if(endobject instanceof Long){ pageendtime=((Long) endobject); logger.debug("the page end time is:"+pageendtime); } if(endobject instanceof Double){ double tempvalue=(Double) endobject; pageendtime=new Double(tempvalue).longValue(); logger.debug("the page end time is:"+pageendtime); } pageloadtime=(pageendtime-pagestarttime)/1000; logger.info("Get current page loading time is:"+pageloadtime); return pageloadtime; }
希望以上的代碼可以幫助你進一步了解Selenium進行性能測試的一個功能。