Журнал производительности

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);

Если этот параметр включен, журнал производительности собирает события временной шкалы, сети и страницы. Чтобы также включить трассировку или настроить ведение журнала производительности, продолжайте читать.

Просмотрите полный пример ведения журнала производительности с параметрами по умолчанию (фото: Михаил Клепиков).

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

Значением метода является метод события DevTools . Например, события Timeline имеют метод Timeline.eventRecorded для всех версий протокола до версии 1.1 включительно (самой последней на момент написания).

Отслеживание записей журнала

Трассировка не является частью опубликованного протокола DevTools начиная с версии 1.1, поэтому подробности приведены здесь.

Все события трассировки имеют значение веб-просмотра «браузер», поскольку события собираются во всем браузере.

Существует два возможных метода трассировки событий:

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