Log prestazioni

ChromeDriver supporta il logging delle prestazioni, da cui puoi recuperare gli eventi dei domini "Sequenza temporale", "Rete" e "Pagina", nonché dati di traccia per categorie di traccia specificate.

Abilita log delle prestazioni

Il logging delle prestazioni NON è abilitato per impostazione predefinita. Quando crei una nuova sessione, devi abilitarla.

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

Quando è abilitato, il log delle prestazioni raccoglie gli eventi di Spostamenti, Rete e Pagina. Per attivare anche il tracciamento o personalizzare il logging delle prestazioni, continua a leggere.

Visualizza un esempio completo di logging del rendimento con opzioni predefinite (gentile concessione di Michael Klepikov).

Anche Angular Benchpress utilizza il logging delle prestazioni.

Tracciamento e logging personalizzato

Se devi personalizzare il logging delle prestazioni, ad esempio per attivare il tracciamento, puoi utilizzare la funzionalità perfLoggingPrefs (tramite ChromeOptions). Il tracciamento può essere attivato specificando una o più categorie di tracce di Chrome. Leggi ulteriori informazioni sul tracciamento di Chrome.

Quando il tracciamento è abilitato, il dominio Spostamenti è implicitamente disabilitato. Devi comunque 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 anche utilizzare perfLoggingPrefs per attivare o disattivare singolarmente i domini di rete e di pagina. Ad esempio, puoi attivare esplicitamente il dominio Network durante il tracciamento di:

...

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 è attivato, ChromeDriver avvia un tracciamento a livello di browser all'avvio di Chrome e continua a farlo fino alla chiusura di Chrome. Quando una traccia è in esecuzione, Chrome memorizza gli eventi di traccia nel buffer finché la traccia non viene arrestata.

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

La raccolta di eventi di traccia può aggiungere overhead a un test, quindi ChromeDriver raccoglie gli eventi di traccia solo nei momenti appropriati durante il test. Attualmente, gli eventi di traccia vengono raccolti solo sugli eventi di navigazione nelle pagine e quando viene richiesto un log di ChromeDriver (ad esempio il log delle prestazioni). Esiste sempre la possibilità che il buffer continui a riempire, perciò ChromeDriver monitora l'utilizzo del buffer per le 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 delle voci di log

Nel test puoi ottenere voci di log sul rendimento. Per ulteriori informazioni, leggi la documentazione sul logging di WebDriver.

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 è il metodo dell'evento DevTools. Ad esempio, il metodo degli eventi della cronologia è Timeline.eventRecorded per tutte le versioni del protocollo fino alla versione 1.1 inclusa (quella più recente al momento della scrittura di questo messaggio).

Voci dei log di traccia

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

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

Esistono due possibili metodi per gli eventi di traccia:

  • tracing.dataCollected: i parametri sono un singolo evento di 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 DevTools è stato 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
        }
    }
}