Performans günlüğü

ChromeDriver; "Zaman Çizelgesi", "Ağ" ve "Sayfa" alanlarındaki etkinliklerin yanı sıra belirtilen izleme kategorileri için iz verilerini alabileceğiniz performans günlük kaydını destekler.

Performans günlüklerini etkinleştir

Performans günlük kaydı varsayılan olarak ETKİNLEŞTİRİLMEZ. Bu nedenle, yeni bir oturum oluştururken bunu etkinleştirmeniz gerekir.

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

Performans günlüğü etkinleştirildiğinde Zaman Çizelgesi, Ağ ve Sayfa etkinlikleri toplanır. İzlemeyi etkinleştirmek veya performans günlük kaydını özelleştirmek için de okumaya devam edin.

Varsayılan seçeneklerle performans günlük kaydına dair eksiksiz bir örneği inceleyin (kaynak: Michael Klepikov).

Angular Benchpress de performans günlük kaydını kullanır.

İzleme ve özel günlük kaydı

Performans günlük kaydını özelleştirmeniz gerekiyorsa izlemeyi etkinleştirmek için perfLoggingPrefs özelliğini kullanabilirsiniz (ChromeOptions üzerinden). İzleme, bir veya daha fazla Chrome izleme kategorisi belirtilerek etkinleştirilebilir. Chrome izleme hakkında daha fazla bilgi edinin.

İzleme etkinleştirildiğinde Zaman Çizelgesi alanı dolaylı olarak devre dışı bırakılır. Yine de performans günlüğünü loggingPrefs özelliğiyle etkinleştirmeniz gerekir.

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

Ağ ve Sayfa alanlarını ayrı ayrı etkinleştirmek veya devre dışı bırakmak için de perfLoggingPrefs kullanabilirsiniz. Örneğin, şunları izlerken Ağ alanını açıkça etkinleştirebilirsiniz:

...

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

...

İzleme özelliği etkinleştirilirse ChromeDriver, Chrome başlatıldığında tarayıcı genelinde bir izleme başlatır ve Chrome kapanana kadar izlemeyi sürdürür. Bir iz çalışırken Chrome, iz durdurulana kadar bellekteki izleme etkinliklerini arabelleğe alır.

İz arabelleği dolduğunda, iz etkinlikleri artık kaydedilmez. ChromeDriver, tam arabellek oluşmasını (ve dolayısıyla iz verilerinin kaybolmasını) önlemek için mevcut izlemeyi düzenli olarak durdurur, arabelleğe alınan etkinlikleri toplar ve bir test sırasında belirli noktalarda izlemeyi yeniden başlatır.

İzleme etkinliklerinin toplanması teste ek yük ekleyeceği için ChromeDriver, bir test sırasında yalnızca uygun noktalarda iz etkinliklerini toplar. İzleme etkinlikleri şu anda yalnızca sayfa gezinme etkinliklerinde ve herhangi bir ChromeDriver günlüğü (performans günlüğü gibi) istendiğinde toplanır. Arabelleğin hâlâ dolma olasılığı her zaman vardır. Bu nedenle ChromeDriver, desteklenen Chrome sürümleri (r263512 ve sonrası) için arabellek kullanımını izler. Arabellek dolarsa ChromeDriver bir uyarı kaydeder ve performans günlüğüne bir giriş ekler.

Günlük girişleri toplanıyor

Testte performans günlüğü girişlerini alabilirsiniz. Daha fazla bilgi için WebDriver günlük kaydı belgelerini okuyun.

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

Her giriş aşağıdaki yapının bir JSON dizesidir:

{
  "webview": <originating WebView ID>,
  "message": { "method": "...", "params": { ... }} // DevTools message.
}

Yöntem değeri, DevTools etkinliğinin yöntemidir. Örneğin, Zaman Çizelgesi etkinliklerinde protokolün 1.1 sürümüne (bu sürüm 1.1'e kadar geçerli olan en güncel sürüm) kadarki tüm sürümleri için Timeline.eventRecorded yöntemi kullanılır.

İz günlüğü girişleri

İzleme, 1.1 sürümünden itibaren yayınlanan Geliştirici Araçları protokolünün bir parçası olmadığından ayrıntılar burada sağlanmıştır.

Etkinlikler tarayıcı genelinde toplandığı için, tüm izleme etkinliklerinin web görünümü değeri "browser"tır.

Olası iki izleme etkinliği yöntemi vardır:

  • tracing.dataCollected: Parametreler sözlük biçimindeki tek bir izleme etkinliğidir.
  • tracing.bufferUsage: Parametreler tek bir hata anahtarı içerir ve Geliştirici Araçları izleme arabelleğinin test sırasında doldurulduğunu belirten bir mesaj görüntülenir.

Örnek bir izleme etkinliği:

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