Chromium Chronicle #4: przetestuj funkcje platformy internetowej dzięki WPT

Odcinek 4: Robert w Waterloo, ON (lipiec 2019 r.)
Poprzednie odcinki

Jeśli pracujesz nad Blink, być może znasz narzędzie web_tests (dawniej LayoutTests). Web-platform-tests (WPT) funkcjonuje w ramach zasady web_test/external/wpt. WPT to preferowany sposób testowania funkcji dostępnych w internecie, ponieważ jest udostępniany innym przez GitHuba. Wyróżnia 2 główne typy testów: reftests oraz testharness.js.

Narzędzie reftests pozwala wykonać i porównać zrzuty ekranu dwóch stron. Domyślnie zrzuty ekranu są wykonywane po wywołaniu zdarzenia load; jeśli dodasz zajęcia reftest-wait do elementu <html>, zrzut ekranu zostanie wykonany po usunięciu zajęć. Wyłączenie testów oznacza zmniejszenie zasięgu testów. Pamiętaj o kwestiach związanych z czcionkami jędrność skóry; zawsze używaj czcionki Ahem.

testharness.js to platforma JavaScript do testowania różnych rozwiązań. oprócz renderowania. Przy pisaniu testów testharness.js zwróć uwagę na czas, i pamiętaj o porządkowaniu na całym świecie.

Nieregularny limit czasu i stany wycieku:

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

Lepszy test przy długim czasie oczekiwania czyszczenie:

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

Jeśli potrzebujesz automatyzacji, która jest niedostępna w internecie, użyj tagu testdriver.js. W test_driver.bless możesz wykonać gest użytkownika, wygenerować złożone, zaufane dane wejściowe z parametrem test_driver.action_sequence itp.

WPT udostępnia też kilka przydatnych funkcji po stronie serwera za pomocą nazw plików. Testy obejmujące wiele regionów (.any.js i jego znajomi) uruchamiają te same testy w różnych zakresy (window, worker itp.); .https.sub.html prosi o wczytanie testu przez HTTPS z obsługą zastępowania po stronie serwera jak poniżej:

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

Niektóre funkcje można też włączyć w ciągach zapytań. Funkcja baz.html?pipe=sub|header(X-Key,val)|trickle(d1) umożliwia zastąpienie, dodaje element X-Key: val do nagłówków odpowiedzi i opóźnia ją o 1 sekundę. Wyszukaj „fajki” na web-platform-tests.org.

WPT można też testować zachowania, które nie są jeszcze uwzględnione w specyfikacji. nadaj testowi nazwę .tentative. Jeśli potrzebujesz wewnętrznych interfejsów API Blink (np. testRunner, internals), przeprowadź testy w jednym miejscu (web_tests/wpt_internal).

Zmiany wprowadzone w WPT są automatycznie eksportowane do GitHuba. Zobaczysz komentarze bota na liście zmian. Zmiany na GitHubie wprowadzone przez innych dostawców również importowanych stale. Aby otrzymywać automatycznie zgłaszane błędy w przypadku nowych błędów zostaną zaimportowane, utwórz plik OWNERS w podkatalogu w WPT:

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

Dodatkowe materiały

  • Chcesz dowiedzieć się, jak testy przebiegają w innych przeglądarkach i jak współdziałają jest Twoja cecha? Użyj polecenia wpt.fyi.
  • Szukasz więcej dokumentacji dotyczącej interfejsów API, wskazówek, przykładów, wskazówek itp.? Wejdź na stronę web-platform-tests.org.