Prestatielogboek

ChromeDriver ondersteunt prestatieregistratie, waaruit u gebeurtenissen van de domeinen 'Tijdlijn', 'Netwerk' en 'Pagina' kunt ophalen, evenals traceergegevens voor specifieke traceercategorieën.

Prestatielogboeken inschakelen

Prestatieregistratie is NIET standaard ingeschakeld. Wanneer u een nieuwe sessie maakt, moet u deze dus inschakelen.

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

Indien ingeschakeld verzamelt het prestatielogboek tijdlijn-, netwerk- en paginagebeurtenissen. Lees verder als u tracering wilt inschakelen of prestatieregistratie wilt aanpassen.

Bekijk een compleet voorbeeld van prestatieregistratie met standaardopties (credit: Michael Klepikov).

Angular Benchpress maakt ook gebruik van prestatieregistratie.

Tracering en aangepaste logboekregistratie

Als u de prestatieregistratie wilt aanpassen, bijvoorbeeld om tracering in te schakelen, kunt u de perfLoggingPrefs-mogelijkheid gebruiken (via ChromeOptions). Tracering kan worden ingeschakeld door een of meer Chrome-traceercategorieën op te geven. Lees meer informatie over Chrome-tracing .

Wanneer tracering is ingeschakeld, is het tijdlijndomein impliciet uitgeschakeld. U moet het prestatielogboek nog steeds inschakelen met de loggingPrefs mogelijkheid.

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

U kunt ook perfLoggingPrefs gebruiken om de netwerk- en paginadomeinen afzonderlijk in of uit te schakelen. U kunt bijvoorbeeld expliciet het netwerkdomein inschakelen tijdens het traceren:

...

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

...

Als tracering is ingeschakeld, start ChromeDriver een browserbrede tracering wanneer Chrome wordt gestart, en gaat door met traceren totdat Chrome wordt gesloten. Wanneer een tracering actief is, buffert Chrome traceergebeurtenissen in het geheugen totdat de tracering wordt gestopt.

Zodra de traceerbuffer vol is, worden traceergebeurtenissen niet langer geregistreerd. Om een ​​volledige buffer (en dus verloren traceergegevens) te voorkomen, stopt ChromeDriver periodiek de huidige tracering, verzamelt de gebufferde gebeurtenissen en start de tracering op bepaalde punten tijdens een test opnieuw.

Het verzamelen van traceergebeurtenissen kan extra overhead toevoegen aan een test, dus ChromeDriver verzamelt traceergebeurtenissen alleen op geschikte punten tijdens een test. Momenteel worden traceergebeurtenissen alleen verzameld bij paginanavigatiegebeurtenissen en wanneer een ChromeDriver-logboek (zoals het prestatielogboek) wordt opgevraagd. Er is altijd een mogelijkheid dat de buffer nog steeds vol raakt, dus ChromeDriver controleert het buffergebruik voor ondersteunde Chrome-versies (r263512 en hoger). Als de buffer vol raakt, registreert ChromeDriver een waarschuwing en voegt een vermelding toe aan het prestatielogboek.

Logboeken verzamelen

In de test kunt u prestatielogboekvermeldingen krijgen. Lees de logboekdocumentatie van WebDriver voor meer informatie.

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

Elke invoer is een JSON-tekenreeks met de volgende structuur:

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

De methodewaarde is de methode van de DevTools-gebeurtenis . Tijdlijngebeurtenissen hebben bijvoorbeeld de methode Timeline.eventRecorded voor alle versies van het protocol tot en met versie 1.1 (de laatste op het moment dat dit werd geschreven).

Logboekvermeldingen traceren

Tracering maakt vanaf versie 1.1 geen deel uit van het gepubliceerde DevTools-protocol, dus details vindt u hier.

Alle traceergebeurtenissen hebben de webweergavewaarde 'browser', omdat de gebeurtenissen browserbreed worden verzameld.

Er zijn twee mogelijke methoden voor traceringsgebeurtenissen:

  • tracing.dataCollected : params zijn een enkele traceergebeurtenis in de vorm van een woordenboek.
  • tracing.bufferUsage : params bevatten een enkele foutsleutel, met een bericht dat aangeeft dat de DevTools-traceerbuffer tijdens de test is gevuld.

Hier is een voorbeeld van een traceergebeurtenis:

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