Dziennik wydajności

ChromeDriver obsługuje rejestrowanie wydajności, które umożliwia pobieranie zdarzeń „Oś czasu”, „Sieć” i „Strona” oraz domeny dane śledzenia dla określonych kategorii logów czasu.

Włącz logi wydajności

Logowanie wydajności NIE jest domyślnie włączone. Podczas tworzenia nowej sesji musisz 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 skuteczności zbiera dane z osi czasu, sieci i stron. zdarzeń. Aby też włączyć śledzenie lub dostosować logowanie wydajności, zachowaj czytanie.

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

Angular Benchpress też korzysta z logowania wydajności.

Śledzenie i logowanie niestandardowe

Jeśli musisz dostosować logowanie wydajności, aby na przykład włączyć śledzenie, może użyć funkcji perfLoggingPrefs. (za pomocą ChromeOptions). Śledzenie można włączyć, wskazując co najmniej 1 Chrome kategorii logów czasu. Przeczytaj więcej informacji na temat: Śledzenie w Chrome

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

Możesz również użyć narzędzia perfLoggingPrefs, aby włączyć lub wyłączyć sieć i stronę z konkretnych domen. Możesz na przykład jawnie włączyć domenę Network 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 uruchamia śledzenie dla całej przeglądarki, gdy Chrome jest uruchomiona i trwa śledzenie aż do zamknięcia Chrome. Gdy ślad jest uruchomionych Chrome buforuje zdarzenia śledzenia w pamięci, dopóki śledzenie nie zostanie zatrzymane.

Gdy bufor śledzenia będzie pełny, zdarzenia śledzenia przestaną być rejestrowane. Aby unikać do pełnego bufora (a tym samym utracone dane śledzenia), ChromeDriver okresowo zatrzymuje dla bieżącego logu czasu, zbiera zdarzenia zbuforowane i ponownie rozpoczyna śledzenie, gdy punktów podczas testu.

Gromadzenie zdarzeń śledzenia może zwiększyć narzut związany z testem, dlatego tylko ChromeDriver zbiera zdarzenia śledzenia w odpowiednich punktach testu. Obecnie śledzenie są zbierane tylko w przypadku zdarzeń nawigacji na stronie i wtedy, gdy jakikolwiek parametr ChromeDriver (np. dziennika wydajności). Zawsze istnieje możliwość że bufor wciąż się zapełnia, więc ChromeDriver monitoruje wykorzystanie bufora pod kątem obsługiwane wersje Chrome (r263512 i nowsze). Jeśli bufor się zapełni, funkcja ChromeDriver rejestruje ostrzeżenie i dodaje wpis do dziennika wydajności.

Zbieranie wpisów logu

W teście możesz pobrać wpisy logu wydajności. Przeczytaj Dokumentacja 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 znaków JSON o następującej strukturze:

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

Wartość metody to metoda wywołana przez zdarzenie Narzędzi deweloperskich. Na przykład zdarzenia na osi czasu mają metodę Timeline.eventRecorded dla wszystkich wersji protokołu do wersji 1.1 włącznie (najnowszej w danym momencie to zostało napisane).

Wpisy logu śledzenia

Śledzenie nie jest częścią opublikowanego protokołu Narzędzi deweloperskich od wersji 1.1, podane tutaj szczegóły.

Wszystkie zdarzenia śledzenia mają wartość WebView to „browser”, bo zdarzenia są w całej przeglądarce.

Istnieją 2 metody śledzenia zdarzeń:

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

Oto przykład zdarzenia logu czasu:

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