Performans günlüğü

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

Performans günlüklerini etkinleştirme

Performans günlüğe kaydetme özelliği varsayılan olarak ETKİN DEĞİLDİR. Bu nedenle, yeni bir oturum oluştururken bu özelliği 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);

Etkinleştirildiğinde performans günlüğü, Zaman Çizelgesi, Ağ ve Sayfa etkinliklerini toplar. İzlemeyi de etkinleştirmek veya performans günlüğünü özelleştirmek için okumaya devam edin.

Michael Klepikov tarafından yazılmış varsayılan seçeneklerle performans günlüğüne kaydetmeyle ilgili eksiksiz bir örneği inceleyin.

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

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

Örneğin, performans günlüğünü özelleştirmeniz (ör. izlemeyi etkinleştirmek için) gerekiyorsa perfLoggingPrefs özelliğini (ChromeOptions aracılığıyla) kullanabilirsiniz. Bir veya daha fazla Chrome izleme kategorisi belirterek izlemeyi etkinleştirebilirsiniz. Chrome izleme hakkında daha fazla bilgi edinin.

İzleme etkinleştirildiğinde Zaman Çizelgesi alanı dolaylı olarak devre dışı bırakılır. 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 perfLoggingPrefs simgesini de kullanabilirsiniz. Örneğin, izleme sırasında 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 etkinse ChromeDriver, Chrome başlatılırken tarayıcı genelinde bir izleme başlatır ve Chrome kapanana kadar izlemeye devam eder. Bir izleme çalışırken Chrome, izleme durdurulana kadar izleme etkinliklerini bellekte arabelleğe alır.

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

İzleme etkinliklerini toplamak teste ek yük getirebilir. Bu nedenle ChromeDriver, yalnızca test sırasında uygun noktalarda izleme etkinlikleri toplar. İzleme etkinlikleri yalnızca sayfa gezinme etkinliklerinde ve herhangi bir ChromeDriver günlüğü (performans günlüğü gibi) istendiğinde toplanır.

Arabelleğin dolması ihtimali her zaman vardır. Bu nedenle ChromeDriver, desteklenen Chrome sürümlerinde (r263512 ve sonraki sürümler) arabellek kullanımını izler. Arabellek dolarsa ChromeDriver bir uyarı günlüğe kaydeder ve performans günlüğüne bir giriş ekler.

Günlük girişlerini toplama

Testte performans günlüğü girişleri 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ıya sahip 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 etkinlikleri, 1.1 sürümü ve sonraki sürümler (bu makalenin yazıldığı tarihte en son sürüm) dahil olmak üzere protokolün tüm sürümleri için Timeline.eventRecorded yöntemine sahiptir.

İz günlük girişleri

İzleme, 1.1 sürümü itibarıyla yayınlanan DevTools protokolünün bir parçası değildir. Bu nedenle ayrıntılar burada verilmiştir.

Etkinlikler tarayıcı genelinde toplandığından tüm izleme etkinliklerinin web görünümü değeri "tarayıcı"dır.

İki olası izleme etkinliği yöntemi vardır:

  • tracing.dataCollected: params, sözlük biçiminde tek bir izleme etkinliğidir.
  • tracing.bufferUsage: params, test sırasında DevTools izleme arabelleğinin dolduğunu belirten bir mesaj içeren tek bir hata anahtarı içerir.

Aşağıda bir örnek izleme etkinliği verilmiştir:

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