Dziennik wydajności

ChromeDriver obsługuje logowanie wydajności, dzięki czemu możesz uzyskiwać zdarzenia związane z domenami „Oś czasu”, „Sieć” i „Strona”, a także dane śledzenia z określonych kategorii logów czasu.

Włącz dzienniki wydajności

Logowanie wydajności NIE jest domyślnie włączone. Jeśli więc tworzysz nową sesję, musisz ją włączyć.

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

Gdy ta opcja jest włączona, dziennik wydajności zbiera zdarzenia na osi czasu, sieci i stronie. Czytaj dalej, aby włączyć też śledzenie lub dostosować logowanie wydajności.

Zobacz pełny przykład rejestrowania skuteczności z opcjami domyślnymi (źródło: Michael Klepikov).

Angular Benchpress używa też rejestrowania wydajności.

Śledzenie i logowanie niestandardowe

Jeśli musisz dostosować logowanie wydajności, możesz na przykład włączyć śledzenie, możesz użyć funkcji perfLoggingPrefs (za pomocą ChromeOptions). Śledzenie można włączyć, określając co najmniej 1 kategorię śledzenia Chrome. Dowiedz się więcej o śledzeniu w Chrome.

Gdy śledzenie jest włączone, domena osi czasu jest domyślnie wyłączona. Nadal musisz włączyć dziennik wydajności za pomocą funkcji 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);

Korzystając z perfLoggingPrefs, możesz też pojedynczo włączać i wyłączać sieć i domeny stron. Możesz na przykład wyraźnie włączyć domenę sieci podczas śledzenia:

...

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

...

Jeśli śledzenie jest włączone, ChromeDriver rozpoczyna śledzenie w całej przeglądarce po uruchomieniu Chrome i kontynuuje śledzenie, dopóki przeglądarka nie zostanie zamknięta. Po uruchomieniu logu czasu Chrome buforuje zdarzenia w pamięci do momentu zatrzymania śledzenia.

Po zapełnieniu bufora śledzenia zdarzenia śledzenia nie będą już rejestrowane. Aby uniknąć pełnego bufora (a tym samym utraty danych śledzenia), ChromeDriver okresowo zatrzymuje bieżący log czasu, zbiera zdarzenia buforowane i ponownie rozpoczyna śledzenie w określonych punktach testu.

Gromadzenie zdarzeń śledzenia może zwiększyć nakłady pracy testu, dlatego ChromeDriver zbiera zdarzenia śledzenia tylko w odpowiednich punktach testu. Obecnie zdarzenia śledzenia są zbierane tylko w przypadku zdarzeń nawigacji po stronie i żądania dowolnego dziennika ChromeDriver (np. logu wydajności). Bufor nadal może się zapełnić, więc ChromeDriver monitoruje wykorzystanie bufora w obsługiwanych wersjach Chrome (r263512 i nowszych). Jeśli bufor zostanie wypełniony, ChromeDriver rejestruje ostrzeżenie i dodaje wpis do dziennika wydajności.

Zbieranie wpisów logu

W teście możesz uzyskać wpisy logu wydajności. Więcej informacji znajdziesz w dokumentacji dotyczącej logowania w usłudze WebDriver.

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

Każdy wpis jest ciągiem JSON o następującej strukturze:

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

Wartość metody to metoda zdarzenia DevTools. Na przykład zdarzenia na osi czasu mają metodę Timeline.eventRecorded w przypadku wszystkich wersji protokołu do wersji 1.1 (najnowszej w momencie ich zapisania).

Wpisy logu monitorowania

Śledzenie nie jest częścią opublikowanego protokołu DevTools w wersji 1.1, więc szczegóły znajdziesz tutaj.

Wszystkie zdarzenia śledzenia mają wartość komponentu WebView „przeglądarka”, ponieważ są one zbierane w całej przeglądarce.

Są 2 możliwe metody śledzenia zdarzeń:

  • tracing.dataCollected: parametry to pojedyncze zdarzenie śledzenia w postaci słownika.
  • tracing.bufferUsage: parametry zawierają jeden klucz błędu z komunikatem wskazującym, że bufor śledzenia Narzędzi deweloperskich został wypełniony podczas testu.

Oto przykładowe zdarzenie śledzenia:

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