سجلّ الأداء

يتيح ChromeDriver تسجيل الأداء، ما يتيح لك الحصول على أحداث للنطاقات "المخطط الزمني" و"الشبكة" و "الصفحة"، بالإضافة إلى بيانات التتبُّع لفئات تتبُّع محدّدة.

تفعيل سجلّات الأداء

لا يكون تسجيل الأداء مفعّلاً تلقائيًا. لذلك، عند إنشاء جلسة جديدة، عليك تفعيلها.

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

عند تفعيله، يجمع سجلّ الأداء أحداث "المخطّط الزمني" و"الشبكة" و"الصفحة". لمتابعة القراءة للتعرّف على كيفية تفعيل التتبُّع أيضًا أو تخصيص تسجيل الأداء.

يمكنك الاطّلاع على مثال كامل لتسجيل الأداء باستخدام الخيارات التلقائية، من تأليف "مايكل كليبيكوف".

يستخدم Angular Benchpress أيضًا ميزة تسجيل الأداء.

التتبُّع والتسجيل المخصّص

إذا كنت بحاجة إلى تخصيص تسجيل الأداء لتفعيل التتبّع مثلاً، يمكنك استخدام إمكانية perfLoggingPrefs (من خلال ChromeOptions). يمكن تفعيل التتبُّع من خلال تحديد فئة واحدة أو أكثر من فئات التتبُّع في Chrome. يمكنك الاطّلاع على مزيد من المعلومات عن تتبُّع Chrome.

عند تفعيل التتبُّع، يتم إيقاف نطاق "المخطط الزمني" بشكل ضمني. لا يزال عليك تفعيل سجلّ الأداء باستخدام ميزة 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);

يمكنك أيضًا استخدام perfLoggingPrefs لتفعيل أو إيقاف النطاقَين "الشبكة" و"الصفحة" بشكلٍ منفصل. على سبيل المثال، يمكنك تفعيل نطاق "الشبكة" صراحةً أثناء التتبّع:

...

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

...

في حال تفعيل التتبُّع، يبدأ ChromeDriver عملية تتبُّع على مستوى المتصفّح عند بدء Chrome ويواصل التتبُّع إلى أن يتم إغلاق Chrome. عند تنفيذ عملية تتبُّع، يُخزِّن Chrome أحداث التتبُّع في الذاكرة إلى أن يتم إيقاف عملية التتبُّع.

بعد امتلاء مخزن التتبّع، لن يتم تسجيل أحداث التتبّع. لتجنُّب استخدام ملف تخزين مؤقت كامل (وبالتالي فقدان بيانات التتبُّع)، يوقف ChromeDriver بشكل دوري عملية التتبُّع الحالية ويجمع الأحداث المخزّنة مؤقتًا ويعيد بدء التتبُّع عند نقاط معيّنة أثناء الاختبار.

يمكن أن يؤدي جمع أحداث التتبّع إلى زيادة وقت الاختبار، لذا لا يجمع ChromeDriver سوى أحداث التتبّع في النقاط المناسبة أثناء الاختبار. لا يتم جمع أحداث التتبّع سوى في أحداث التنقّل في الصفحة وعند طلب أي سجلّ ChromeDriver (مثل سجلّ الأداء).

هناك احتمال دائم بأنّه سيظلّ هناك محتوى في المخزن المؤقت، لذا يراقب ChromeDriver استخدام المخزن المؤقت لإصدارات Chrome المتوافقة (r263512 والإصدارات الأحدث). إذا امتلأ المخزن المؤقت، يسجِّل ChromeDriver تحذيرًا ويضيف إدخالًا إلى ملف تسجيل الأداء.

جمع إدخالات السجلّ

في الاختبار، يمكنك الحصول على إدخالات سجلّ الأداء. اطّلِع على مستندات تسجيل WebDriver لمزيد من المعلومات.

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

كل إدخال هو سلسلة JSON بالبنية التالية:

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

قيمة الطريقة هي طريقة حدث DevTools. على سبيل المثال، تستخدم أحداث "المخطط الزمني" طريقة Timeline.eventRecorded لجميع إصدارات البروتوكول حتى الإصدار 1.1 (أحدث إصدار في وقت كتابة هذه المقالة).

إدخالات سجلّ التتبّع

لا تشكّل عملية التتبّع جزءًا من بروتوكول DevTools المنشور اعتبارًا من الإصدار 1.1، لذلك يتم توفير تفاصيل عنها هنا.

تحتوي جميع أحداث التتبّع على قيمة webview‏ "المتصفّح"، لأنّ الأحداث يتم جمعها على مستوى المتصفّح.

هناك طريقتان محتملتان لأحداث التتبّع:

  • tracing.dataCollected: params هي حدث تتبُّع واحد في شكل قاموس.
  • tracing.bufferUsage: تحتوي المَعلمات على مفتاح خطأ واحد، مع رسالة تشير إلى أنّ مخبّر تتبُّع "أدوات مطوّري البرامج" قد امتلأ أثناء الاختبار.

في ما يلي مثال على حدث تتبُّع:

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