W3C標(biāo)準是瀏覽器標(biāo)準,一般瀏覽器都支持W3C標(biāo)準,它規(guī)定使用者可以通過api查詢性能信息,可借用W3C協(xié)議完成自動化H5性能測試。
W3C官網(wǎng):
https://www.w3.org/TR/navigation-timing/
使用chrome瀏覽器對webview進行手工查看,伴隨著業(yè)務(wù)增多,數(shù)量加大,手工操作的速度會無法跟上業(yè)務(wù)增長,此時需要自動化方法測試webview性能。
當(dāng)頁面加載時,會渲染一系列內(nèi)容,渲染過程可分為多個階段,比如下圖:
• Prompt for unload 訪問一個新頁面時,舊頁面卸載完成的時間
• redirect 重定向,用戶注銷登陸時返回主頁面和跳轉(zhuǎn)到其它的網(wǎng)站等
• App cache 檢查緩存,是否打開
• DNS 表示 DNS 查詢的時間,如果是長連接或者請求文件來自緩存等本地存儲則返回fetchStart時間點
• TCP 與服務(wù)器建立鏈接的時間
• Requests 客戶端發(fā)起請求的時間
• Response 拿到服務(wù)器第一個響應(yīng)字節(jié)到最后一個響應(yīng)字節(jié)的時間
• Processing 各種狀態(tài)的時間點,例如加載狀態(tài)等等
• onLoad 觸發(fā)load事件執(zhí)行的時間
在chrome瀏覽器中,執(zhí)行js代碼可獲取各個階段的內(nèi)容:
window.performance.timing
上面的時間只是一個時間點,如果想獲取各階段的具體時間,就需要對兩個時間點進行相減運算,比如計算domContent加載事件時間:
window.performance.timing.
domContentLoadedEventEnd -
window.performance.timing.
domContentLoadedEventStart
appium/selenium可以執(zhí)行js,借用appium/selenium工具可實現(xiàn)自動化獲取能指標(biāo),調(diào)用appium/selenium的ExecuteScriptapi,可向頁面注入下面代碼:
//顯示所有階段的時間點
return
JSON.stringify(window.performance.timing)
//顯示指定資源的時間,比如img
return
JSON.stringify(window.performance.
getEntriesByName (document.querySelector("img").src)[0],null,2)
案 例
H5性能測試需要配合自動化測試工具使用,比如selenium或者appium,通過js代碼注入實現(xiàn)自動化調(diào)用api。
使用 Python + selenium 進行js注入:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://home.testing-studio.com/")
print(driver.execute_script(
"return JSON.stringify(window.performance.timing)"))
執(zhí)行后會返回一個json數(shù)據(jù),包含了簡介中的各個性能指標(biāo),可對性能指標(biāo)做二次處理或可視化展示:
{"navigationStart":1585043212714,
"unloadEventStart":0,"unloadEventEnd":0,
"redirectStart":0,
"redirectEnd":0,
"fetchStart":1585043212717,
"domainLookupStart":1585043212747,
"domainLookupEnd":1585043212747,
"connectStart":1585043212747,
"connectEnd":1585043212835,
"secureConnectionStart":1585043212787,
"requestStart":1585043212836,
"responseStart":1585043212918,