效能記錄

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 個別啟用或停用網域和網頁網域。舉例來說,您可以在追蹤時明確啟用 Network 網域:

...

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

方法值是 DevTools 事件的方法。舉例來說,時間軸事件有 Timeline.eventRecorded 方法,適用於所有協定版本 (包括 1.1 以上版本) (這是本文撰寫時的最新版本)。

追蹤記錄項目

自 1.1 版起,追蹤功能就不再是發布的開發人員工具通訊協定,因此我們在此提供詳細資訊。

由於事件是全瀏覽器收集,因此所有追蹤事件的 Webview 值都是「browser」。

追蹤事件方法有兩種:

  • tracing.dataCollected:參數是字典形式的單一追蹤事件。
  • tracing.bufferUsage:參數包含單一錯誤鍵,其中訊息指出在測試期間填入了開發人員工具追蹤緩衝區。

以下是追蹤事件範例:

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