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