ChromeDriver 支援效能記錄功能,可讓您取得「時間軸」、「網路」和「網頁」網域的事件,以及指定追蹤記錄類別的追蹤記錄資料。
啟用效能記錄檔
系統預設「不會」啟用效能記錄功能。因此建立新的工作階段時 您必須自行啟用
DesiredCapabilities cap = DesiredCapabilities.chrome();
LoggingPreferences logPrefs = new LoggingPreferences();
logPrefs.enable(LogType.PERFORMANCE, Level.ALL);
cap.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);
RemoteWebDriver driver = new RemoteWebDriver(new URL("http://127.0.0.1:9515"), cap);
啟用後,效能記錄會收集時間軸、網路和網頁事件。如要一併啟用追蹤功能或自訂效能記錄,請繼續讀取。
查看含有預設選項的完整效能記錄範例 (來源:Michael Klepikov)。
Angular Benchpress 也會使用效能記錄。
追蹤和自訂記錄
如需自訂效能記錄,如要啟用追蹤功能,您可以使用 perfLoggingPrefs 功能 (透過 ChromeOptions)。您可以指定一或多個 Chrome 追蹤類別來啟用追蹤功能。進一步瞭解 Chrome 追蹤功能。
啟用追蹤功能時,系統會默示停用時間軸網域。您仍需要啟用 loggingPrefs
功能的效能記錄。
DesiredCapabilities cap = DesiredCapabilities.chrome();
LoggingPreferences logPrefs = new LoggingPreferences();
logPrefs.enable(LogType.PERFORMANCE, Level.ALL);
cap.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);
Map<String, Object> perfLogPrefs = new HashMap<String, Object>();
perfLogPrefs.put("traceCategories", "browser,devtools.timeline,devtools"); // comma-separated trace categories
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("perfLoggingPrefs", perfLogPrefs);
caps.setCapability(ChromeOptions.CAPABILITY, options);
RemoteWebDriver driver = new RemoteWebDriver(new URL("http://127.0.0.1:9515"), cap);
您也可以使用 perfLoggingPrefs
個別啟用或停用網路和網頁網域。舉例來說,您可以在追蹤時明確啟用網路網域:
...
Map<String, Object> perfLogPrefs = new HashMap<String, Object>();
perfLogPrefs.put("traceCategories", "browser,devtools.timeline,devtools");
perfLogPrefs.put("enableNetwork", true);
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("perfLoggingPrefs", perfLogPrefs);
caps.setCapability(ChromeOptions.CAPABILITY, options);
...
如果啟用追蹤功能,ChromeDriver 會在 Chrome 啟動時啟動整個瀏覽器的追蹤記錄,並在 Chrome 關閉前持續追蹤。執行追蹤記錄時,Chrome 會在記憶體中緩衝追蹤事件,直到追蹤停止為止。
一旦追蹤記錄緩衝區已滿,系統就不會再記錄追蹤事件。為避免緩衝區已滿 (並因此遺失追蹤記錄資料),ChromeDriver 會定期停止目前的追蹤記錄、收集已緩衝的事件,並在測試期間從特定時間點重新啟動追蹤。
收集追蹤記錄事件可能會增加測試的負擔,因此 ChromeDriver 只會在測試期間的適當時間點收集追蹤事件。目前,系統只會在頁面導覽事件及要求任何 ChromeDriver 記錄 (例如效能記錄) 時收集追蹤事件。有時緩衝區可能會填滿,因此 ChromeDriver 會針對支援的 Chrome 版本 (r263512 以上版本) 監控緩衝區使用情形。如果緩衝區填滿,ChromeDriver 就會記錄警���,並在效能記錄檔中新增項目。
正在收集記錄項目
在測試中,您可以取得效能記錄項目。詳情請參閱 WebDriver 記錄說明文件。
for (LogEntry entry : driver.manage().logs().get(LogType.PERFORMANCE)) {
System.out.println(entry.toString());
}
每個項目都是採用下列結構的 JSON 字串:
{
"webview": <originating WebView ID>,
"message": { "method": "...", "params": { ... }} // DevTools message.
}
方法是開發人員工具事件的方法。舉例來說,時間軸事件針對所有通訊協定最高至 1.1 版 (寫入時最為最新版本) 的通訊協定都有 Timeline.eventRecorded
方法。
追蹤記錄項目
自 1.1 版起,追蹤功能並非已發布的開發人員工具通訊協定的一部分,詳情請參閱這裡。
由於事件是在整個瀏覽器中收集,因此所有追蹤事件的 WebView 值都會是「browser」。
追蹤事件有兩種可能的方法:
- tracing.dataCollected:參數是以字典形式呈現的單一追蹤事件。
- tracing.bufferUsage:參數包含單一錯誤鍵,並顯示訊息指出在測試期間已填入 DevTools 追蹤緩衝區。
以下是追蹤事件的範例:
{
"webview":"browser",
"message":{
"method":"Tracing.dataCollected",
"params":{
"args":{"layerTreeId":1},
"cat":"cc,devtools",
"name":"DrawFrame",
"ph":"i",
"pid":11405,
"s":"t",
"tid":11405,
"ts":3846117219.0,
"tts":1134680
}
}
}