Registro de rendimiento

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

Cómo habilitar los registros de rendimiento

El registro de rendimiento NO está habilitado de forma predeterminada. Por lo tanto, cuando creas una nueva sesión, tienes que habilitarlo.

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 la información de Rutas, Red y Página eventos. Para habilitar el seguimiento o personalizar el registro de rendimiento, mantén lectura.

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

Angular Benchpress también usa el registro de rendimiento.

Seguimiento y registro personalizado

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

Cuando el seguimiento está habilitado, el dominio de Rutas se inhabilita de forma implícita. Tú sigues Es necesario habilitar el registro de rendimiento con la capability 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 la red y la 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 registro está habilitado, ChromeDriver inicia un seguimiento de todo el navegador cuando Chrome se inicia y continúa con el seguimiento hasta que se cierra Chrome. Cuando se crea un seguimiento mientras se esté ejecutando, Chrome almacenará en búfer los eventos de registro en la memoria hasta que se detenga el registro.

Una vez que se llena el búfer de seguimiento, ya no se registran los eventos de seguimiento. Para evitar un búfer completo (y, por lo tanto, se pierden los datos de seguimiento), ChromeDriver detiene de forma periódica la 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 solo ChromeDriver. recopila eventos de seguimiento en puntos apropiados durante una prueba. Actualmente, el seguimiento solo se recopilan en los eventos de navegación de páginas y cuando se crea (como el registro de rendimiento). Siempre existe la posibilidad que el búfer aún se está llenando, por lo que ChromeDriver supervisa el uso del búfer para 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 el 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 de la siguiente estructura:

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

El valor del método es el método del evento de Herramientas para desarrolladores. Por ejemplo, los eventos de Rutas tienen un método de Timeline.eventRecorded para todos los del protocolo hasta la versión 1.1 inclusive (la más reciente en ese momento, donde esto está escrito).

Entradas de registro de seguimiento

El seguimiento no forma parte del protocolo publicado de Herramientas para desarrolladores a partir de la versión 1.1, por lo que se proporcionan más detalles aquí.

Todos los eventos de seguimiento tienen el valor de WebView de "browser", ya que los eventos son recopilado en todo el navegador.

Existen dos métodos de eventos de seguimiento posibles:

  • tracing.dataCollected: Los parámetros son un evento de seguimiento único 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 Herramientas para desarrolladores se llenó durante la prueba.

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