Leistungsprotokoll

ChromeDriver unterstützt das Leistungs-Logging, über das Sie Ereignisse der Domains „Zeitachse“, „Netzwerk“ und „Seite“ sowie Trace-Daten für bestimmte Trace-Kategorien abrufen können.

Leistungsprotokolle aktivieren

Das Leistungs-Logging ist standardmäßig NICHT aktiviert. Wenn Sie eine neue Sitzung erstellen, müssen Sie sie aktivieren.

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

Wenn diese Option aktiviert ist, werden im Leistungsprotokoll Zeitachsen-, Netzwerk- und Seitenereignisse erfasst. Lesen Sie weiter, um auch das Tracing zu aktivieren oder das Leistungs-Logging anzupassen.

Vollständiges Beispiel für das Leistungs-Logging mit Standardoptionen (Quelle: Michael Klepikov)

Angular Benchpress verwendet ebenfalls die Leistungsaufzeichnung.

Tracing und benutzerdefiniertes Logging

Wenn Sie das Leistungs-Logging anpassen müssen, um beispielsweise das Tracing zu aktivieren, können Sie die Funktion „perfLoggingPrefs“ (über ChromeOptions) verwenden. Zum Aktivieren von Tracing können Sie eine oder mehrere Chrome-Trace-Kategorien angeben. Weitere Informationen finden Sie unter Chrome-Tracing.

Wenn das Tracing aktiviert ist, ist die Zeitachsendomain implizit deaktiviert. Sie müssen das Leistungslog noch mit der Funktion loggingPrefs aktivieren.

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

Sie können auch perfLoggingPrefs verwenden, um die Netzwerk- und Seitendomains einzeln zu aktivieren oder zu deaktivieren. Sie können beispielsweise die Netzwerkdomain beim Tracing explizit aktivieren:

...

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

...

Wenn das Tracing aktiviert ist, startet ChromeDriver beim Start von Chrome ein browserweites Trace und setzt das Tracing so lange fort, bis Chrome geschlossen wird. Wenn ein Trace ausgeführt wird, puffert Chrome Trace-Ereignisse im Arbeitsspeicher, bis das Trace beendet wird.

Sobald der Trace-Zwischenspeicher voll ist, werden keine Trace-Ereignisse mehr aufgezeichnet. Um einen vollen Zwischenspeicher (und damit verlorene Trace-Daten) zu vermeiden, stoppt ChromeDriver regelmäßig den aktuellen Trace, erfasst die zwischengespeicherten Ereignisse und startet das Tracing an bestimmten Punkten während eines Tests neu.

Das Erfassen von Trace-Ereignissen kann einen Mehraufwand für einen Test verursachen, sodass ChromeDriver Trace-Ereignisse nur an geeigneten Stellen während eines Tests erfasst. Derzeit werden Trace-Ereignisse nur bei Ereignissen der Seitennavigation erfasst und wenn ein ChromeDriver-Log (z. B. das Leistungsprotokoll) angefordert wird. Es besteht immer die Möglichkeit, dass der Puffer noch voll ist. Daher überwacht ChromeDriver die Puffernutzung für unterstützte Chrome-Versionen (r263512 und höher). Wenn der Puffer gefüllt ist, protokolliert ChromeDriver eine Warnung und fügt dem Leistungsprotokoll einen Eintrag hinzu.

Logeinträge erfassen

Im Test können Sie Einträge aus dem Leistungsprotokoll abrufen. Weitere Informationen finden Sie in der Dokumentation zum WebDriver-Logging.

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

Jeder Eintrag ist ein JSON-String mit folgender Struktur:

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

Der Methodenwert ist die Methode des DevTools-Ereignisses. Zeitachsenereignisse haben beispielsweise für alle Versionen des Protokolls bis einschließlich Version 1.1 (die letzte zum Zeitpunkt der Erstellung dieses Dokuments) die Methode Timeline.eventRecorded.

Trace-Logeinträge

Tracing ist seit Version 1.1 nicht Teil des veröffentlichten DevTools-Protokolls. Daher werden hier Details angegeben.

Alle Trace-Ereignisse haben den WebView-Wert „browser“, da die Ereignisse browserweit erfasst werden.

Es gibt zwei mögliche Trace-Ereignismethoden:

  • tracing.dataCollected: Parameter sind ein einzelnes Trace-Ereignis in Form eines Wörterbuchs.
  • tracing.bufferUsage: Parameter enthalten einen einzelnen Fehlerschlüssel mit einer Meldung, die angibt, dass der Trace-Zwischenspeicher der Entwicklertools während des Tests gefüllt wurde.

Hier ist ein Beispiel für ein Trace-Ereignis:

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