Chromium Chronicle מס' 4: בדיקת התכונות של פלטפורמת האינטרנט באמצעות WPT

פרק 4: מאת רוברט בווטרלו, אונטריו (יולי 2019)
הפרקים הקודמים

אם אתם עובדים ב-Blink, אולי כדאי לכם להכיר את web_tests (לשעבר Layouttests). בדיקות Web-platform (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 לכותרות של התשובה ושולח אותו לעיכוב של שנייה אחת, לפני שליחת התגובה. חפשו 'pipes' באתר web-platform-tests.org כדי למצוא עוד אפשרויות.

WPT יכול גם לבדוק התנהגויות שלא נכללות עדיין במפרטים. פשוט צריך לתת לבדיקה את השם .tentative. אם יש לך צורך בממשקי API פנימיים של 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.
  • מחפשים מסמכים נוספים על ממשקי API, הנחיות, דוגמאות, טיפים ועוד? נכנסים לאתר web-platform-tests.org.