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