Leistungsprotokoll

ChromeDriver unterstützt die Leistungsprotokollierung, über die Sie Ereignisse die Domains „Zeitachse“, „Werbenetzwerk“ und „Seite“ sowie Trace-Daten für angegebene Trace-Kategorien.

Leistungslogs aktivieren

Die Leistungsprotokollierung ist standardmäßig NICHT aktiviert. Wenn Sie eine neue Sitzung erstellen, müssen Sie es 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 Zeitachse, Netzwerk und Seite erfasst. Ereignisse. Um auch das Tracing zu aktivieren oder das Leistungs-Logging anzupassen, behalten Sie Lesematerialien.

Ein vollständiges Beispiel für die Leistungserfassung mit Standardoptionen finden Sie hier (Quelle: Michael Klepikov).

Angular Benchpress verwendet ebenfalls die Leistungserfassung.

Tracing und benutzerdefiniertes Logging

Wenn Sie das Leistungs-Logging anpassen müssen, um beispielsweise das Tracing zu aktivieren, können die Funktion perfLoggingPrefs nutzen. (über ChromeOptions). Sie können das Tracing aktivieren, indem Sie mindestens einen Chrome-Browser angeben oder Trace-Kategorien. Weitere Informationen zu Chrome-Tracing:

Wenn das Tracing aktiviert ist, wird die Zeitachsendomain implizit deaktiviert. Sie stillen müssen das Leistungslog 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 das Netzwerk und die Seite zu aktivieren oder zu deaktivieren. Domains einzeln verwalten. Sie können die Netzwerkdomain zum Beispiel explizit aktivieren, während Tracing:

...

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 ein browserweites Trace, wenn Chrome und das Tracing wird so lange fortgesetzt, 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 erfasst. Um dies zu vermeiden (und somit Ablaufverfolgungsdaten verloren haben), stoppt ChromeDriver den Zwischenspeicher regelmäßig aktuellen Trace, erfasst die gepufferten Ereignisse und startet das Tracing bei bestimmten Punkte während eines Tests.

Das Erfassen von Trace-Ereignissen kann den Aufwand für einen Test erhöhen. Daher ist nur ChromeDriver an geeigneten Stellen während eines Tests Trace-Ereignisse erfasst. Aktuell: Trace werden nur bei Seitennavigationsereignissen erfasst, (z. B. das Leistungsprotokoll) angefordert wird. Es besteht immer die Möglichkeit, dass sich der Zwischenspeicher noch füllt, sodass ChromeDriver die Zwischenspeichernutzung unterstützte Chrome-Versionen (r263512 und höher) Wenn sich der Zwischenspeicher füllt, protokolliert eine Warnung und fügt dem Leistungsprotokoll einen Eintrag hinzu.

Logeinträge erfassen

Im Test können Sie Leistungslogeinträge abrufen. Lesen Sie die 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 die Methode Timeline.eventRecorded für alle Versionen des Protokolls bis einschließlich Version 1.1 (die zum Zeitpunkt der dies geschrieben wurde).

Trace-Logeinträge

Tracing ist seit Version 1.1 nicht mehr Teil des veröffentlichten Entwicklertools-Protokolls. Details dazu finden Sie hier.

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

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

  • tracing.dataCollected: Parameter sind ein einzelnes Trace-Ereignis in Form eines Wörterbuchs.
  • tracing.bufferUsage: Parameter enthalten einen einzelnen Fehlerschlüssel mit einer Meldung, 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
        }
    }
}