Registro de rendimiento

ChromeDriver admite el registro de rendimiento, desde el que puedes obtener eventos de los dominios "Cronograma", "Red" y "Página", así como datos de seguimiento para categorías de seguimiento específicas.

Habilitar registros de rendimiento

El registro de rendimiento NO está habilitado de forma predeterminada. Entonces, cuando crees una nueva sesión, tienes que 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 se habilita, el registro de rendimiento recopila eventos de cronograma, red y página. Si quieres habilitar también el seguimiento o personalizar el registro de rendimiento, sigue leyendo.

Consulta un ejemplo completo de registro de rendimiento con opciones predeterminadas (crédito: Michael Klepikov).

Angular Benchpress también usa registros de rendimiento.

Seguimiento y registros personalizados

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

Cuando el seguimiento está habilitado, 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 de página de forma individual. Por ejemplo, puedes habilitar explícitamente el dominio de red durante el seguimiento:

...

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 registro de todo el navegador cuando se inicia Chrome y continúa haciendo el seguimiento hasta que se cierra Chrome. Cuando se ejecuta un registro, Chrome almacena en el búfer los eventos de seguimiento en la memoria hasta que se detiene.

Una vez que el búfer de seguimiento esté lleno, los eventos de seguimiento dejan de registrarse. Para evitar un búfer completo (y, por lo tanto, la pérdida de datos de seguimiento), ChromeDriver detiene periódicamente el registro actual, recopila los eventos almacenados en búfer y reinicia el seguimiento en determinados puntos durante una prueba.

Recopilar eventos de registro puede agregar sobrecarga a una prueba, por lo que ChromeDriver solo recopila eventos de registro en los puntos adecuados durante una prueba. Actualmente, 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 aún se llene, por lo que ChromeDriver supervisa el uso del búfer en las versiones de Chrome compatibles (r263512 y posteriores). Si el búfer se llena, 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. Lee 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 string 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 DevOps. Por ejemplo, los eventos de cronograma tienen un método de Timeline.eventRecorded para todas las versiones del protocolo hasta la versión 1.1 inclusive (la última en el momento en que se escribió).

Entradas de registro de seguimiento

A partir de la versión 1.1, el seguimiento no forma parte del protocolo publicado de Herramientas para desarrolladores, por lo que se proporcionan los detalles aquí.

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

Existen dos métodos de eventos de seguimiento posibles:

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

A continuación, se muestra un ejemplo de un 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
        }
    }
}