Chromium Chronicle Nr. 4: Funktionen der Webplattform mit WPT testen

Folge 4: von Robert in Waterloo, ON (Juli 2019)
Vorherige Folgen

Wenn Sie an Blink arbeiten, kennen Sie vielleicht web_tests (früher LayoutTests). Web-Plattformtests (WPT) befinden sich in web_test/external/wpt. WPT ist die Testmethode für im Web sichtbare Funktionen, da diese Funktion mit anderen über GitHub. Es gibt zwei Haupttypen von Tests: Reftests und testharness.js-Tests.

Bei Reftests werden Screenshots von zwei Seiten erstellt und verglichen. Standardmäßig werden Screenshots werden verwendet, nachdem das load-Ereignis ausgelöst wurde. wenn Sie eine reftest-wait-Klasse hinzufügen <html> hinzufügen, wird der Screenshot erstellt, sobald der Kurs entfernt wurde. Deaktivierte Tests führen zu einer geringeren Testabdeckung. Achten Sie auf schrift- und Flockigkeit Verwenden Sie nach Möglichkeit die Schriftart Ahem.

testharness.js ist ein JavaScript-Framework zum Testen jeglicher Art außer dem Rendering. Achten Sie beim Schreiben von testharness.js-Tests auf das Timing, und denken Sie daran, den globalen Zustand zu bereinigen.

Unzuverlässiges Zeitlimit und potenzielle Statuslecks:

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

Besserer Test mit langer Zeitüberschreitung und Bereinigung:

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

Verwenden Sie testdriver.js, wenn Sie Automatisierung benötigen, die im Web ansonsten nicht verfügbar ist. Sie können über test_driver.bless eine Nutzergeste abrufen, komplexe vertrauenswürdige Eingaben mit test_driver.action_sequence usw.

WPT bietet über Dateinamen auch einige nützliche serverseitige Funktionen. Multi-globale Tests (.any.js und seine Freunde) führen die gleichen Tests in unterschiedlichen Umfänge (window, worker usw.); .https.sub.html bittet um das Laden des Tests über HTTPS mit serverseitiger Unterstützung für Substitutionen wie unten dargestellt:

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

Einige Funktionen können auch in Abfragestrings aktiviert werden. baz.html?pipe=sub|header(X-Key,val)|trickle(d1) aktiviert die Ersetzung und fügt X-Key: val hinzu zu den Headern der Antwort hinzu und verzögert die Antwort um eine Sekunde. Nach „Pipes“ suchen auf web-platform-tests.org.

WPT kann auch Verhaltensweisen testen, die noch nicht in den Spezifikationen enthalten sind. Benennen Sie den Test als .tentative. Wenn Sie interne Blink APIs benötigen (z.B. testRunner, internals), setze deine Tests in web_tests/wpt_internal ein.

An WPT vorgenommene Änderungen werden automatisch nach GitHub exportiert. Sie sehen von einem Bot in Ihrem Änderungsprotokoll. Die GitHub-Änderungen anderer Anbieter sind auch kontinuierlich importiert. Um automatisch gemeldete Fehler zu erhalten, wenn neue Fehler auftreten erstellen Sie eine OWNERS-Datei in einem Unterverzeichnis in WPT:

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

Zusätzliche Ressourcen

  • möchten wissen, wie Ihre Tests in anderen Browsern ausgeführt werden und wie sie interoperabel sind. Ihre Funktion ist? Verwenden Sie wpt.fyi.
  • Suchen Sie nach mehr Dokumentation zu APIs, Richtlinien, Beispielen, Tipps und mehr? Rufen Sie web-platform-tests.org auf.