The Chromium Chronicle #4: اختبار ميزات النظام الأساسي للويب باستخدام WPT

الحلقة 4: لروبرت في واترلو، أونتاريو (يوليو 2019)
الحلقات السابقة

إذا كنت تستخدم Blink، قد تعرف web_tests (المعروفة سابقًا باسم LayoutTests)، تتوفّر اختبارات web-platform-tests (WPT) في web_test/external/wpt. WPT هو الطريقة المفضّلة لاختبار الميزات الظاهرة على الويب، حيث تتم مشاركتها مع المتصفحات الأخرى عبر GitHub. ويتضمن نوعين رئيسيين من الاختبارات: اختبارات reftests وtestharness.js.

reftests تأخذ لقطات شاشة وتقارن بينها لصفحتين. يتم تلقائيًا أخذ لقطات الشاشة بعد بدء حدث load، وإذا أضفت فئة reftest-wait إلى العنصر <html>، سيتم أخذ لقطة الشاشة عند إزالة الفئة. أما الاختبارات التي يتم إيقافها، فسيؤدي ذلك إلى تقليل تغطية الاختبارات. انتبِه إلى الدقّة في الخط، واستخدِم الخط Ahem قدر الإمكان.

testharness.js هو إطار عمل JavaScript لاختبار أي شيء باستثناء العرض. عند كتابة اختبارات testharness.js، انتبه للتوقيت، وتذكّر تنظيف الحالة العامة.

المهلة غير المستقرة والحالات المُحتمَلة للتسريب:

الإجراءات غير المُوصى بها
<script>
promise_test(async t => {
  assert_equals(await slowLocalStorageTest(), "expected", "message");
  localStorage.clear();
});
</script>

اختبار أفضل يتضمّن المهلة الطويلة وعملية تنظيف:

الإجراءات التي يُنصح بها
<meta name="timeout" content="long">
<script>
promise_test(async t => {
  t.add_cleanup(() => localStorage.clear());
  assert_equals(await slowLocalStorageTest(), "expected", "message");
});
</script>

استخدِم testdriver.js إذا كنت بحاجة إلى استخدام الأساليب المبرمَجة غير المتاحة على الويب. يمكنك الحصول على إيماءة مستخدم من test_driver.bless وإنشاء إدخالات معقدة وموثوقة باستخدام test_driver.action_sequence، وما إلى ذلك.

توفّر أداة WPT أيضًا بعض الميزات المفيدة من جهة الخادم من خلال أسماء الملفات. تُجري الاختبارات المتعددة اللغات (.any.js وأصدقاؤها) الاختبارات نفسها في نطاقات مختلفة (window وworker وما إلى ذلك). يطلب .https.sub.html تحميل الاختبار عبر HTTPS مع إتاحة الاستبدال من جهة الخادم على النحو التالي:

var anotherOrigin = "https://&#123;&#123;hosts[][www1]}}:&#123;&#123;ports[https][0]}}/path/to/page.html";

يمكن أيضًا تفعيل بعض الميزات في سلاسل طلبات البحث. تتيح baz.html?pipe=sub|header(X-Key,val)|trickle(d1) إمكانية الاستبدال وتضيف X-Key: val إلى عناوين الاستجابة وتتأخر ثانية واحدة قبل الاستجابة. ابحث عن "المسارات" على web-platform-tests.org لمزيد من المعلومات.

يمكن أن يختبر WPT أيضًا السلوكيات التي لم يتم تضمينها في المواصفات بعد، ما عليك سوى تسمية الاختبار على أنه .tentative. إذا كنت بحاجة إلى واجهات برمجة تطبيقات Blink الداخلية (مثل testRunner أو internals)، يمكنك إجراء اختباراتك في web_tests/wpt_internal.

يتم تصدير التغييرات التي تم إجراؤها على WPT تلقائيًا إلى GitHub. ستظهر لك تعليقات من برنامج تتبُّع في CL. يتم أيضًا استيراد تغييرات GitHub من البائعين الآخرين باستمرار. لتلقّي الأخطاء التي تم رصدها تلقائيًا عند استيراد حالات تعذُّر جديدة، أنشئ ملف OWNERS في دليل فرعي في WPT:

# TEAM: your-team@chromium.org
# COMPONENT: Blink>YourComponent
# WPT-NOTIFY: true
emails-here-will-be-cc@chromium.org

مراجع إضافية

  • هل تريد أن تعرف كيف يتم إجراء اختباراتك على المتصفحات الأخرى ومدى إمكانية التشغيل التفاعلي لهذه الميزة؟ استخدِم wpt.fyi.
  • هل تبحث عن المزيد من المستندات حول واجهات برمجة التطبيقات والإرشادات والأمثلة والنصائح وغير ذلك؟ انتقِل إلى web-platform-tests.org.