Log prestazioni

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

Attivare i log relativi alle prestazioni

La registrazione delle prestazioni NON è attiva per impostazione predefinita. Pertanto, quando crei una nuova sessione, devi attivarla.

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 delle prestazioni raccoglie gli eventi Spostamenti, Rete e Pagina. Per attivare anche il monitoraggio o per personalizzare il logging delle prestazioni, continua a leggere.

Visualizza un esempio completo di registrazione del rendimento con le opzioni predefinite, scritto da 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 monitoraggio, puoi utilizzare la funzionalità perfLoggingPrefs (tramite ChromeOptions). Il monitoraggio può essere attivato specificando una o più categorie di traccia di Chrome. Scopri di più sul monitoraggio di Chrome.

Quando il monitoraggio è attivo, il dominio Spostamenti viene disattivato implicitamente. Devi comunque attivare il log del rendimento 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 i domini Rete e Pagina singolarmente. Ad esempio, puoi attivare esplicitamente il dominio di rete durante il monitoraggio:

...

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 monitoraggio è abilitato, ChromeDriver avvia una traccia a livello di browser all'avvio di Chrome e continua a monitorare fino alla chiusura di Chrome. Quando è in esecuzione una traccia, Chrome memorizza in memoria gli eventi della traccia fino a quando la traccia non viene interrotta.

Una volta che il buffer della traccia è pieno, gli eventi di traccia non vengono più registrati. Per evitare un buffer pieno (e quindi la perdita dei dati di traccia), ChromeDriver interrompe periodicamente la traccia corrente, raccoglie gli eventi memorizzati nella memoria e riavvia la tracciatura in determinati punti durante un test.

La raccolta degli eventi di traccia può aggiungere un overhead a un test, pertanto ChromeDriver raccoglie gli eventi di traccia solo nei punti appropriati durante un test. Gli eventi trace vengono raccolti solo per gli eventi di navigazione nella pagina e quando viene richiesto un log di ChromeDriver (ad esempio il log sul rendimento).

Esiste sempre la possibilità che il buffer si riempia, quindi 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.

Raccogliere le voci di log

Nel test puoi ottenere le voci del log sul rendimento. Per ulteriori informazioni, consulta la documentazione relativa alla registrazione 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, gli eventi Spostamenti hanno un metodo Timeline.eventRecorded per tutte le versioni del protocollo fino alla versione 1.1 inclusa (la più recente al momento della stesura di questo articolo).

Voci del log di traccia

Il monitoraggio non fa parte del protocollo DevTools pubblicato a partire dalla versione 1.1, pertanto qui vengono forniti i dettagli.

Tutti gli eventi traccia hanno un valore webview di "browser", poiché gli eventi vengono raccolti su tutto il browser.

Esistono due possibili metodi di evento traccia:

  • tracing.dataCollected: params è 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 della traccia di DevTools si è 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
    }
  }
}