ChromeDriver mendukung logging performa, tempat Anda bisa mendapatkan peristiwa domain "Linimasa", "Jaringan", dan "Halaman", serta data rekaman aktivitas untuk kategori rekaman aktivitas yang ditentukan.
Mengaktifkan log performa
Logging performa TIDAK diaktifkan secara default. Jadi, saat membuat sesi baru, Anda harus mengaktifkannya.
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);
Jika diaktifkan, log performa akan mengumpulkan peristiwa Linimasa, Jaringan, dan Halaman. Untuk mengaktifkan pelacakan, atau menyesuaikan logging performa, terus baca.
Lihat contoh lengkap logging performa dengan opsi default, yang ditulis oleh Michael Klepikov.
Angular Benchpress juga menggunakan logging performa.
Pelacakan dan logging kustom
Jika perlu menyesuaikan logging performa, misalnya untuk mengaktifkan pelacakan, Anda dapat menggunakan kemampuan perfLoggingPrefs (melalui ChromeOptions). Pelacakan dapat diaktifkan dengan menentukan satu atau beberapa kategori rekaman aktivitas Chrome. Baca informasi selengkapnya tentang pelacakan Chrome.
Jika pelacakan diaktifkan, domain Linimasa akan dinonaktifkan secara implisit. Anda masih
perlu mengaktifkan log performa dengan kemampuan 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);
Anda juga dapat menggunakan perfLoggingPrefs
untuk mengaktifkan atau menonaktifkan domain Jaringan dan Halaman satu per satu. Misalnya, Anda dapat mengaktifkan domain Jaringan secara eksplisit
saat melacak:
...
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);
...
Jika pelacakan diaktifkan, ChromeDriver akan memulai pelacakan seluruh browser saat Chrome diluncurkan dan melanjutkan pelacakan hingga Chrome ditutup. Saat rekaman aktivitas berjalan, Chrome akan buffering peristiwa rekaman aktivitas di memori hingga rekaman aktivitas dihentikan.
Setelah buffering rekaman aktivitas penuh, peristiwa rekaman aktivitas tidak akan lagi dicatat. Untuk menghindari buffer penuh (sehingga data rekaman aktivitas hilang), ChromeDriver secara berkala menghentikan rekaman aktivitas saat ini, mengumpulkan peristiwa yang dibuffer, dan memulai ulang perekaman aktivitas pada titik tertentu selama pengujian.
Mengumpulkan peristiwa rekaman aktivitas dapat menambah overhead ke pengujian, sehingga ChromeDriver hanya mengumpulkan peristiwa rekaman aktivitas pada titik yang sesuai selama pengujian. Peristiwa rekaman aktivitas hanya dikumpulkan pada peristiwa navigasi halaman dan saat log ChromeDriver (seperti log performa) diminta.
Selalu ada kemungkinan buffer masih terisi, sehingga ChromeDriver memantau penggunaan buffer untuk versi Chrome yang didukung (r263512 dan yang lebih baru). Jika buffer terisi, ChromeDriver akan mencatat peringatan ke dalam log dan menambahkan entri ke log performa.
Mengumpulkan entri log
Dalam pengujian, Anda bisa mendapatkan entri log performa. Baca dokumentasi logging WebDriver untuk mengetahui informasi selengkapnya.
for (LogEntry entry : driver.manage().logs().get(LogType.PERFORMANCE)) {
System.out.println(entry.toString());
}
Setiap entri adalah string JSON dengan struktur berikut:
{
"webview": <originating WebView ID>,
"message": { "method": "...", "params": { ... }} // DevTools message.
}
Nilai metode adalah metode peristiwa DevTools.
Misalnya, peristiwa Linimasa memiliki metode Timeline.eventRecorded
untuk semua versi protokol hingga dan termasuk versi 1.1 (terbaru pada saat penulisan ini).
Entri log rekaman aktivitas
Pelacakan bukan bagian dari protokol DevTools yang dipublikasikan mulai versi 1.1, sehingga detailnya diberikan di sini.
Semua peristiwa rekaman aktivitas memiliki nilai webview "browser", karena peristiwa tersebut dikumpulkan di seluruh browser.
Ada dua kemungkinan metode peristiwa rekaman aktivitas:
tracing.dataCollected
: parameter adalah satu peristiwa rekaman aktivitas dalam bentuk kamus.tracing.bufferUsage
: params berisi satu kunci error, dengan pesan yang menunjukkan bahwa buffering rekaman aktivitas DevTools terisi selama pengujian.
Berikut adalah contoh peristiwa rekaman aktivitas:
{
"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
}
}
}