Chromium Chronicle #4: Menguji Fitur Platform Web Anda dengan WPT

Episode 4: oleh Robert di Waterloo, ON (Juli, 2019)
Episode sebelumnya

Jika Anda mengerjakan Blink, Anda mungkin mengetahui web_tests (sebelumnya LayoutTests). web-platform-tests (WPT) berada di dalam web_test/external/wpt. WPT adalah cara yang lebih disukai untuk menguji fitur yang terekspos web karena dibagikan dengan browser lain melalui GitHub. Class ini memiliki dua jenis pengujian utama: pengujian reftests dan testharness.js.

reftests mengambil dan membandingkan screenshot dua halaman. Secara default, screenshot diambil setelah peristiwa load diaktifkan; jika Anda menambahkan class reftest-wait ke elemen <html>, screenshot akan diambil saat class dihapus. Pengujian yang dinonaktifkan berarti mengurangi cakupan pengujian. Berhati-hatilah dengan kegagalan terkait font; gunakan font Ahem jika memungkinkan.

testharness.js adalah framework JavaScript untuk menguji apa pun kecuali rendering. Saat menulis pengujian testharness.js, perhatikan pengaturan waktu, dan ingatlah untuk membersihkan status global.

Waktu tunggu yang tidak stabil & potensi status bocor:

Larangan
<script>
promise_test(async t => {
  assert_equals(await slowLocalStorageTest(), "expected", "message");
  localStorage.clear();
});
</script>

Pengujian yang lebih baik dengan waktu tunggu & pembersihan yang lama:

Anjuran
<meta name="timeout" content="long">
<script>
promise_test(async t => {
  t.add_cleanup(() => localStorage.clear());
  assert_equals(await slowLocalStorageTest(), "expected", "message");
});
</script>

Gunakan testdriver.js jika Anda memerlukan otomatisasi yang tidak tersedia di web. Anda bisa mendapatkan gestur pengguna dari test_driver.bless, menghasilkan input yang kompleks dan tepercaya dengan test_driver.action_sequence, dll.

WPT juga menyediakan beberapa fitur sisi server yang berguna melalui nama file. Pengujian multi-global (.any.js dan teman-temannya) menjalankan pengujian yang sama dalam cakupan yang berbeda (window, worker, dll.); .https.sub.html meminta pengujian untuk dimuat melalui HTTPS dengan dukungan substitusi sisi server seperti di bawah ini:

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

Beberapa fitur juga dapat diaktifkan di string kueri. baz.html?pipe=sub|header(X-Key,val)|trickle(d1) mengaktifkan substitusi, menambahkan X-Key: val ke header respons, dan menunda 1 detik sebelum merespons. Telusuri "pipes" di web-platform-tests.org untuk informasi selengkapnya.

WPT juga dapat menguji perilaku yang belum disertakan dalam spesifikasi; cukup beri nama pengujian sebagai .tentative. Jika Anda memerlukan API internal Blink (misalnya testRunner, internals), jalankan pengujian di web_tests/wpt_internal.

Perubahan yang dibuat pada WPT otomatis diekspor ke GitHub. Anda akan melihat komentar dari bot di CL. Perubahan GitHub dari vendor lain juga akan terus diimpor. Untuk menerima bug yang dilaporkan secara otomatis saat kegagalan baru diimpor, buat file OWNERS dalam subdirektori di WPT:

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

Referensi Tambahan

  • Ingin tahu cara pengujian Anda berjalan di browser lain, dan seberapa interoperabilitas fitur Anda? Gunakan wpt.fyi.
  • Mencari dokumentasi selengkapnya tentang API, pedoman, contoh, tips, dan lainnya? Buka web-platform-tests.org.