Leistungsprotokoll

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

Leistungsprotokolle aktivieren

Die Leistungsprotokollierung ist NICHT standardmäßig aktiviert. Sie müssen sie also beim Erstellen einer neuen Sitzung 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. Wenn Sie auch Tracing aktivieren oder das Leistungs-Logging anpassen möchten, lesen Sie weiter.

Vollständiges Beispiel für die Leistungsprotokollierung mit Standardoptionen von Michael Klepikov

Angular Benchpress verwendet ebenfalls Leistungsprotokolle.

Tracing und benutzerdefiniertes Logging

Wenn Sie die Leistungsprotokollierung anpassen möchten, um beispielsweise die Ablaufverfolgung zu aktivieren, können Sie die Funktion „perfLoggingPrefs“ (über ChromeOptions) verwenden. Sie können die Aufzeichnung aktivieren, indem Sie eine oder mehrere Chrome-Aufzeichnungskategorien angeben. Weitere Informationen zur Chrome-Analyse

Wenn die Funktion „Tracing“ aktiviert ist, wird die Zeitachsendomain implizit deaktiviert. Sie müssen das Leistungsprotokoll weiterhin 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);

Mit perfLoggingPrefs können Sie auch die Netzwerk- und Seitendomains einzeln aktivieren oder deaktivieren. Sie können die Netzwerkdomain beispielsweise beim Überwachen 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 die Aufzeichnung aktiviert ist, startet ChromeDriver beim Starten von Chrome eine browserweite Aufzeichnung und führt diese fort, bis Chrome geschlossen wird. Wenn ein Trace ausgeführt wird, puffert Chrome Trace-Ereignisse im Arbeitsspeicher, bis der Trace gestoppt wird.

Sobald der Trace-Puffer voll ist, werden keine Trace-Ereignisse mehr aufgezeichnet. Um einen vollen Puffer und damit verlorene Ablaufdaten zu vermeiden, beendet ChromeDriver regelmäßig die aktuelle Aufzeichnung, erfasst die zwischengespeicherten Ereignisse und startet die Aufzeichnung an bestimmten Stellen während eines Tests neu.

Das Erfassen von Ablaufvorgängen kann den Test belasten. Daher erfasst ChromeDriver Ablaufvorgänge nur an geeigneten Stellen während eines Tests. Trace-Ereignisse werden nur bei Seitennavigationsereignissen und bei der Anforderung eines ChromeDriver-Protokolls (z. B. des Leistungsprotokolls) erfasst.

Es besteht immer die Möglichkeit, dass der Puffer trotzdem vollläuft. Daher überwacht ChromeDriver die Puffernutzung für unterstützte Chrome-Versionen (r263512 und höher). Wenn der Puffer voll ist, protokolliert ChromeDriver eine Warnung und fügt dem Leistungsprotokoll einen Eintrag hinzu.

Logeinträge erfassen

Im Test können Sie Leistungsprotokolleinträge erhalten. Weitere Informationen finden Sie in der WebDriver-Logging-Dokumentation.

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

Jeder Eintrag ist ein JSON-String mit der folgenden Struktur:

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

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

Trace-Logeinträge

Die Analyse ist seit Version 1.1 nicht mehr Teil des veröffentlichten DevTools-Protokolls. Daher finden Sie hier weitere Informationen.

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

Es gibt zwei mögliche Methoden für Trace-Ereignisse:

  • tracing.dataCollected: „params“ ist ein einzelnes Trace-Ereignis in Form eines Wörterbuchs.
  • tracing.bufferUsage: params enthält einen einzelnen Fehlerschlüssel mit einer Meldung, dass der DevTools-Trace-Puffer während des Tests voll war.

Hier 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
    }
  }
}