效能記錄

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