效能記錄

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
        }
    }
}