Registro de rendimiento

ChromeDriver admite el registro de rendimiento, desde el que puedes obtener eventos de los dominios "Timeline", "Network" y "Page", así como datos de seguimiento para categorías de seguimiento especificadas.

Habilita los registros de rendimiento

El registro de rendimiento NO está habilitado de forma predeterminada. Por lo tanto, cuando crees una sesión nueva, debes habilitarla.

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

Cuando está habilitado, el registro de rendimiento recopila eventos de la red, de la página y de la línea de tiempo. Para habilitar el seguimiento o personalizar el registro de rendimiento, sigue leyendo.

Consulta un ejemplo completo de registro de rendimiento con opciones predeterminadas, escrito por Michael Klepikov.

Angular Benchpress también usa el registro de rendimiento.

Registro de seguimiento y personalizado

Si necesitas personalizar el registro de rendimiento, por ejemplo, para habilitar el seguimiento, puedes usar la capability perfLoggingPrefs (a través de ChromeOptions). Para habilitar el seguimiento, especifica una o más categorías de seguimiento de Chrome. Obtén más información sobre el registro de Chrome.

Cuando se habilita el seguimiento, el dominio de Rutas se inhabilita de forma implícita. Aún debes habilitar el registro de rendimiento con la función 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);

También puedes usar perfLoggingPrefs para habilitar o inhabilitar los dominios de red y página de forma individual. Por ejemplo, puedes habilitar de forma explícita el dominio de red mientras realizas un seguimiento de lo siguiente:

...

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

...

Si el seguimiento está habilitado, ChromeDriver inicia un seguimiento en todo el navegador cuando se inicia Chrome y continúa el seguimiento hasta que se cierra. Cuando se ejecuta un registro, Chrome almacena en búfer los eventos de registro en la memoria hasta que se detiene el registro.

Una vez que el búfer de seguimiento esté lleno, ya no se registrarán los eventos de seguimiento. Para evitar un búfer completo (y, por lo tanto, perder datos de seguimiento), ChromeDriver detiene periódicamente el seguimiento actual, recopila los eventos almacenados en búfer y reinicia el seguimiento en ciertos puntos durante una prueba.

La recopilación de eventos de seguimiento puede agregar sobrecarga a una prueba, por lo que ChromeDriver solo recopila eventos de seguimiento en los puntos adecuados durante una prueba. Los eventos de seguimiento solo se recopilan en los eventos de navegación de páginas y cuando se solicita cualquier registro de ChromeDriver (como el registro de rendimiento).

Siempre existe la posibilidad de que el búfer se llene, por lo que ChromeDriver supervisa el uso del búfer para las versiones compatibles de Chrome (r263512 y versiones posteriores). Si se llena el búfer, ChromeDriver registra una advertencia y agrega una entrada al registro de rendimiento.

Recopila entradas de registro

En la prueba, puedes obtener entradas de registro de rendimiento. Consulta la documentación de registro de WebDriver para obtener más información.

for (LogEntry entry : driver.manage().logs().get(LogType.PERFORMANCE)) {
  System.out.println(entry.toString());
}

Cada entrada es una cadena JSON con la siguiente estructura:

{
  "webview": <originating WebView ID>,
  "message": { "method": "...", "params": { ... }} // DevTools message.
}

El valor del método es el método del evento de DevTools. Por ejemplo, los eventos de Rutas tienen un método de Timeline.eventRecorded para todas las versiones del protocolo hasta la versión 1.1 inclusive (la más reciente en el momento en que se escribió este documento).

Cómo consultar las entradas de registro de seguimiento

El seguimiento no forma parte del protocolo publicado de DevTools a partir de la versión 1.1, por lo que los detalles se proporcionan aquí.

Todos los eventos de seguimiento tienen un valor de WebView de "navegador", ya que los eventos se recopilan en todo el navegador.

Existen dos métodos de eventos de seguimiento posibles:

  • tracing.dataCollected: Los parámetros son un solo evento de seguimiento en forma de un diccionario.
  • tracing.bufferUsage: Los parámetros contienen una sola clave de error, con un mensaje que indica que el búfer de seguimiento de DevTools se llenó durante la prueba.

Este es un ejemplo de evento de seguimiento:

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