سجلّ الأداء

يتوافق 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 مخازن الأحداث في الذاكرة إلى أن يتم إيقاف عملية التتبُّع.

عند امتلاء المخزن المؤقت للتتبّع، لن يتم تسجيل أحداث التتبُّع بعد ذلك. لتجنب امتلاء مخزن بيانات مؤقتًا (وبالتالي فقد بيانات التتبع)، يوقف 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.
}

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

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

التتبُّع ليس جزءًا من بروتوكول "أدوات مطوري البرامج" المنشور اعتبارًا من الإصدار 1.1، لذلك يتم توفير التفاصيل هنا.

تحتوي جميع أحداث التتبُّع على قيمة WebView التي تمثّل "المتصفح"، نظرًا لأنه يتم جمع الأحداث على مستوى المتصفِّح.

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

  • tracing.dataCollected: المعلّمات هي حدث تتبُّع واحد في شكل قاموس.
  • 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
        }
    }
}