Chromium Chronicle #4: Web Platformu Özelliklerinizi WPT ile test edin

Episode 4: Robert in Waterloo, ON'dan (Temmuz 2019)
Önceki bölümler

Blink üzerinde çalışıyorsanız web_tests'i (eski adıyla LayoutTests) biliyor olabilirsiniz. web-platform-tests (WPT), web_test/external/wpt uygulamasının içindedir. GitHub üzerinden diğer tarayıcılarla paylaşıldığı için WPT, web'de gösterilen özellikleri test etmek için tercih edilen yöntemdir. İki temel test türü vardır: reftests ve testharness.js testleri.

reftests iki sayfanın ekran görüntülerini alıp karşılaştırır. Varsayılan olarak ekran görüntüleri load etkinliği tetiklendikten sonra alınır; <html> öğesine bir reftest-wait sınıfı eklerseniz sınıf kaldırıldığında ekran görüntüsü alınır. Devre dışı bırakılan testler, test kapsamının azalması anlamına gelir. Yazı tipiyle ilgili pürüzlülüğe dikkat edin; mümkünse Ahem yazı tipini kullanın.

testharness.js, oluşturma hariç her şeyi test etmeye yönelik bir JavaScript çerçevesidir. testharness.js testlerini yazarken zamanlamaya dikkat edin ve genel durumu temizlemeyi unutmayın.

Kesintili zaman aşımı ve olası sızıntı durumları:

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

Uzun zaman aşımı ve temizleme ile daha iyi bir test:

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

Web'de bulunmayan otomasyona ihtiyacınız varsa testdriver.js'yi kullanın. test_driver.bless sağlayıcısından kullanıcı hareketi alabilir, test_driver.action_sequence ile karmaşık, güvenilir girişler oluşturabilir vb.

WPT, dosya adları aracılığıyla sunucu tarafında bazı yararlı özellikler de sağlar. Çoklu global testler (.any.js ve arkadaşları) aynı testleri farklı kapsamlarda (window, worker vb.) çalıştırır; .https.sub.html, testin aşağıdaki gibi sunucu tarafı değiştirme desteğiyle HTTPS üzerinden yüklenmesini ister:

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

Bazı özellikler sorgu dizelerinde de etkinleştirilebilir. baz.html?pipe=sub|header(X-Key,val)|trickle(d1), değiştirmeyi etkinleştirir, yanıtın üst bilgilerine X-Key: val ekler ve yanıt vermeden önce 1 saniye geciktirir. Daha fazlası için web-platform-tests.org adresinde "pipes" araması yapın.

WPT, henüz spesifikasyonlarda bulunmayan davranışları da test edebilir. Testin adını .tentative olarak vermeniz yeterlidir. Blink dahili API'lerine (ör. testRunner, internals) ihtiyacınız varsa testlerinizi web_tests/wpt_internal içine yerleştirin.

WPT'de yapılan değişiklikler otomatik olarak GitHub'a aktarılır. CL'nizde bir bot'tan gelen yorumları görürsünüz. Diğer tedarikçi firmalardaki GitHub değişiklikleri de sürekli olarak içe aktarılır. Yeni hatalar içe aktarıldığında otomatik olarak gönderilen hataları almak için WPT'deki bir alt dizinde OWNERS dosyası oluşturun:

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

Ek Kaynaklar

  • Testlerinizin diğer tarayıcılarda nasıl çalıştığını ve özelliğinizin birlikte ne kadar birlikte çalışabildiğini öğrenmek mi istiyorsunuz? wpt.fyi kullanın.
  • API'ler, yönergeler, örnekler, ipuçları ve daha fazlası hakkında daha fazla doküman mı arıyorsunuz? web-platform-tests.org adresini ziyaret edin.