Log prestazioni

ChromeDriver supporta il logging delle prestazioni, da cui è possibile ottenere eventi domini "Spostamenti", "Rete" e "Pagina", nonché dati di traccia per le categorie di traccia specificate.

Abilita log delle prestazioni

Il logging delle prestazioni NON è abilitato per impostazione predefinita. Quindi, quando crei una nuova sessione, devi abilitarlo.

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

Se attivato, il log del rendimento raccoglie Spostamenti, Rete e Pagina eventi. Per attivare anche il tracciamento o personalizzare il logging delle prestazioni, mantieni per la lettura.

Guarda un esempio completo di logging delle prestazioni con opzioni predefinite (credito: Michael Klepikov).

AngularBenchpress utilizza anche il logging delle prestazioni.

Tracciamento e logging personalizzato

Se devi personalizzare il logging delle prestazioni, ad esempio per abilitare il tracciamento, puoi usare la funzionalità perfLoggingPrefs (tramite ChromeOptions). Il tracciamento può essere attivato specificando uno o più Chrome le categorie di tracciamento. Scopri di più su Tracciamento di Chrome.

Quando il tracciamento è attivato, il dominio Spostamenti è implicitamente disattivato. Devi ancora devi abilitare il log delle prestazioni con la funzionalità 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);

Puoi utilizzare perfLoggingPrefs anche per attivare o disattivare la rete e la pagina di singoli domini. Ad esempio, puoi abilitare esplicitamente il dominio di rete durante il tracciamento:

...

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

...

Se il tracciamento è attivo, ChromeDriver avvia una traccia a livello di browser quando Chrome viene avviato e continua a eseguire il tracciamento fino alla chiusura di Chrome. Quando viene generata una traccia in esecuzione, Chrome memorizza il buffer degli eventi di traccia in memoria fino all'arresto della traccia.

Quando il buffer di traccia è pieno, gli eventi di traccia non vengono più registrati. Da evitare un buffer pieno (e quindi la perdita di dati di traccia), ChromeDriver interrompe periodicamente il traccia corrente, raccoglie gli eventi presenti nel buffer e riavvia il tracciamento durante un test.

La raccolta di eventi di traccia può aumentare l'overhead di un test, quindi solo ChromeDriver raccoglie gli eventi traccia nei punti appropriati durante un test. Attualmente, traccia vengono raccolti soltanto sugli eventi di navigazione nelle pagine e quando un ChromeDriver (come il log delle prestazioni). C'è sempre una possibilità il buffer si riempie ancora, quindi ChromeDriver monitora l'utilizzo del buffer per versioni di Chrome supportate (r263512 e successive). Se il buffer si riempie, ChromeDriver registra un avviso e aggiunge una voce al log delle prestazioni.

Raccolta di voci di log in corso

Nel test, puoi recuperare voci di log delle prestazioni. Leggi Documentazione sul logging di WebDriver per ulteriori informazioni.

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

Ogni voce è una stringa JSON con la seguente struttura:

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

Il valore del metodo è quello dell'evento DevTools. Ad esempio, gli eventi della cronologia hanno il metodo Timeline.eventRecorded per tutti del protocollo fino alla versione 1.1 inclusa (la più recente è scritto).

Voci di log di traccia

Il tracciamento non fa parte del protocollo DevTools pubblicato a partire dalla versione 1.1, quindi sono forniti qui.

Tutti gli eventi traccia hanno il valore WebView "browser", poiché gli eventi sono raccolti a livello di browser.

Esistono due possibili metodi per gli eventi traccia:

  • tracing.dataCollected: i parametri sono un singolo evento traccia sotto forma di dizionario.
  • tracing.bufferUsage: i parametri contengono una singola chiave di errore, con un messaggio che indica che il buffer di traccia di DevTools è riempito durante il test.

Ecco un esempio di evento traccia:

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