Dziennik wydajności

ChromeDriver obsługuje rejestrowanie wydajności, dzięki któremu możesz uzyskiwać zdarzenia z domen „Timeline”, „Network” i „Page”, a także dane z wykresów w przypadku określonych kategorii.

Włączanie dzienników wydajności

Rejestrowanie wydajności nie jest domyślnie włączone. Dlatego podczas tworzenia nowej sesji 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);

Po włączeniu dziennik wydajności zbiera zdarzenia z osi czasu, sieci i strony. Aby włączyć śledzenie lub dostosować rejestrowanie wydajności, czytaj dalej.

Zobacz pełny przykład rejestrowania wydajności z użyciem domyślnych opcji, który przygotował Michael Klepikov.

Angular Benchpress korzysta też z logowania wydajności.

śledzenie i logowanie niestandardowe,

Jeśli chcesz dostosować rejestrowanie wydajności, np. włączyć śledzenie, możesz użyć opcji perfLoggingPrefs (za pomocą ChromeOptions). Śledzenie można włączyć, określając co najmniej 1 kategorię ChromeTrace. Dowiedz się więcej o śledzeniu w Chrome.

Gdy włączone jest śledzenie, domyślnie wyłączona jest domena osi czasu. Musisz też 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);

Możesz też użyć parametru perfLoggingPrefs, aby włączyć lub wyłączyć poszczególne domeny sieci i strony. 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 całej przeglądarki po jej uruchomieniu i kontynuuje je do czasu jej zamknięcia. Podczas uruchamiania śledzenia Chrome buforuje zdarzenia śledzenia w pamięci do momentu jego zatrzymania.

Gdy bufor śledzenia jest pełny, zdarzenia śledzenia nie są już rejestrowane. Aby uniknąć pełnego bufora (a tym samym utraty danych z wykresu), ChromeDriver okresowo zatrzymuje bieżący wykres, zbiera buforowane zdarzenia i w określonych punktach testu ponownie uruchamia wykres.

Zbieranie zdarzeń śladu może zwiększyć obciążenie testu, dlatego ChromeDriver zbiera je tylko w odpowiednich momentach podczas testu. Zdarzenia śladu są zbierane tylko w przypadku zdarzeń nawigacji po stronach i w przypadku żądania dowolnego dziennika ChromeDriver (np. dziennika wydajności).

Zawsze istnieje możliwość, że bufor się zapełni, dlatego ChromeDriver monitoruje jego wykorzystanie w obsługiwanych wersjach Chrome (r263512 i nowszych). Jeśli bufor się zapełni, ChromeDriver wygeneruje ostrzeżenie i doda wpis do dziennika wydajności.

Pobieranie wpisów z logu

W ramach testu możesz uzyskać wpisy w dzienniku skuteczności. Więcej informacji znajdziesz w dokumentacji dotyczącej rejestrowania WebDrivera.

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

Każdy wpis to ciąg JSON o tej strukturze:

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

Wartość method to metoda zdarzenia DevTools. Na przykład zdarzenia dotyczące osi czasu mają metodę Timeline.eventRecorded we wszystkich wersjach protokołu (do wersji 1.1 włącznie, która była najnowszą w momencie pisania tego tekstu).

Wpisy w logu śledzenia

Śledzenie nie jest częścią opublikowanego protokołu DevTools w wersji 1.1, dlatego podajemy tutaj szczegółowe informacje.

Wartość webview wszystkich zdarzeń śladu to „browser”, ponieważ zdarzenia są zbierane w całym przeglądarce.

Istnieją 2 metody śledzenia zdarzeń:

  • tracing.dataCollected: parametry to pojedyncze zdarzenie śladu w postaci słownika.
  • tracing.bufferUsage: parametry zawierają pojedynczy klucz błędu z komunikatem wskazującym, że podczas testu wypełnił się bufor śledzony przez Narzędzia programistyczne.

Oto przykład zdarzenia pliku śledzonego:

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