Log performa

ChromeDriver mendukung logging performa, tempat Anda bisa mendapatkan peristiwa "Linimasa", "Jaringan", dan "Halaman" domain, serta data rekaman aktivitas untuk kategori rekaman aktivitas yang ditentukan.

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);

Saat diaktifkan, log performa akan mengumpulkan peristiwa Linimasa, Jaringan, dan Halaman. Untuk juga mengaktifkan perekaman aktivitas, atau menyesuaikan logging performa, terus baca informasi ini.

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

Angular Benchpress juga menggunakan logging performa.

Pelacakan dan logging kustom

Jika perlu menyesuaikan logging performa, misalnya untuk mengaktifkan perekaman aktivitas, 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 perekaman aktivitas diaktifkan, domain Linimasa akan dinonaktifkan secara implisit. Anda tetap harus 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 secara eksplisit mengaktifkan domain Jaringan saat merekam aktivitas:

...

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 melakukan pelacakan hingga Chrome ditutup. Saat perekaman aktivitas berjalan, Chrome akan mem-buffer peristiwa rekaman aktivitas di memori hingga perekaman aktivitas tersebut dihentikan.

Setelah buffering pelacakan penuh, peristiwa perekaman aktivitas tidak lagi dicatat. Untuk menghindari buffering penuh (sehingga kehilangan data rekaman aktivitas), ChromeDriver secara berkala menghentikan rekaman aktivitas saat ini, mengumpulkan peristiwa yang di-buffer, dan memulai ulang pelacakan pada titik tertentu selama pengujian.

Mengumpulkan peristiwa rekaman aktivitas dapat menambahkan overhead ke pengujian, sehingga ChromeDriver hanya mengumpulkan peristiwa rekaman aktivitas pada titik yang sesuai selama pengujian. Saat ini, 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 membuat log 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 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 (yang terbaru pada saat ini ditulis).

Entri log rekaman aktivitas

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

Semua peristiwa trace memiliki nilai webview "browser", karena peristiwa tersebut dikumpulkan di seluruh browser.

Ada dua kemungkinan metode peristiwa rekaman aktivitas:

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