Log performa

ChromeDriver mendukung pencatatan performa, dari tempat Anda bisa mendapatkan peristiwa domain "Timeline", "Jaringan", dan "Halaman", serta data rekaman aktivitas untuk kategori trace tertentu.

Aktifkan 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 Linimasa, Jaringan, dan Halaman peristiwa. Untuk juga mengaktifkan pelacakan, atau untuk menyesuaikan logging performa, sebelumnya.

Lihat contoh lengkap pencatatan performa dengan opsi default (kredit: Michael Klepikov).

Angular Benchpress juga menggunakan logging performa.

Pelacakan dan logging kustom

Jika Anda perlu menyesuaikan logging performa, misalnya untuk mengaktifkan pelacakan, Anda dapat menggunakan kemampuan perfLoggingPrefs (melalui ChromeOptions). Pelacakan dapat diaktifkan dengan menentukan satu atau beberapa Chrome kategori pelacakan. Baca informasi selengkapnya tentang Pelacakan Chrome.

Jika perekaman aktivitas 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 Jaringan dan Halaman domain satu per satu. Misalnya, Anda dapat secara eksplisit mengaktifkan domain Jaringan 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 di seluruh browser saat Chrome diluncurkan, dan terus melacak hingga Chrome ditutup. Saat trace berjalan, Chrome akan mem-buffer peristiwa rekaman aktivitas di memori hingga rekaman aktivitas dihentikan.

Setelah buffer rekaman aktivitas penuh, peristiwa rekaman aktivitas tidak lagi akan direkam. Untuk menghindari buffer penuh (sehingga data pelacakan hilang), ChromeDriver secara berkala menghentikan rekaman aktivitas saat ini, mengumpulkan peristiwa yang di-buffer, dan memulai ulang pelacakan pada poin selama pengujian.

Mengumpulkan peristiwa rekaman aktivitas dapat menambahkan overhead ke pengujian, jadi hanya ChromeDriver mengumpulkan peristiwa rekaman aktivitas pada titik yang tepat selama pengujian. Saat ini, trace peristiwa hanya dikumpulkan pada peristiwa navigasi halaman dan saat ChromeDriver log (seperti log performa) diminta. Selalu ada kemungkinan bahwa {i>buffer<i} masih terisi, jadi ChromeDriver memantau penggunaan {i>buffer <i}untuk versi Chrome yang didukung (r263512 dan yang lebih baru). Jika buffer terisi, ChromeDriver mencatat peringatan dan menambahkan entri ke log performa.

Mengumpulkan entri log

Dalam pengujian, Anda bisa mendapatkan entri log performa. Baca Dokumentasi logging WebDriver untuk informasi selengkapnya.

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

Setiap entri adalah string JSON dari 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 hingga dan termasuk versi 1.1 (yang terbaru pada saat itu pesan ini ditulis).

Entri log rekaman aktivitas

Pelacakan bukan bagian dari protokol DevTools yang dipublikasikan mulai versi 1.1, jadi detailnya disediakan di sini.

Semua peristiwa rekaman aktivitas memiliki nilai webview "browser", karena peristiwa tersebut yang dikumpulkan di seluruh browser.

Ada dua kemungkinan metode peristiwa pelacakan:

  • tracing.dataCollected: parameter adalah peristiwa rekaman aktivitas tunggal dalam bentuk kamus.
  • tracing.bufferUsage: parameter berisi satu kunci error, dengan pesan yang menunjukkan bahwa buffer pelacakan 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
        }
    }
}