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