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

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

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

reftests mengambil dan membandingkan screenshot dari 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 cakupan pengujian berkurang. Perhatikan font kerapuhan; gunakan font Ahem jika memungkinkan.

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

Waktu tunggu 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 yang lama & pembersihan:

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 jika tidak tersedia di web. Anda dapat memperoleh gestur pengguna dari test_driver.bless, membuat tugas kompleks, input 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 temannya) menjalankan pengujian yang sama dalam cakupan (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) memungkinkan substitusi, menambahkan X-Key: val ke header respons, dan menunda 1 detik sebelum merespons. Telusuri "pipes" di web-platform-tests.org untuk mengetahui informasi selengkapnya.

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

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

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

Referensi Tambahan

  • Ingin mengetahui bagaimana pengujian Anda berjalan di browser lain dan bagaimana interoperabilitasnya fitur Anda? Gunakan wpt.fyi.
  • Mencari dokumentasi lain tentang API, panduan, contoh, tips, dan lainnya? Buka web-platform-tests.org.