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-platform-tests (WPT)“ befinden sich in web_test/external/wpt. WPT ist die bevorzugte Methode zum Testen von Funktionen, die über das Web bereitgestellt werden, da es über GitHub mit anderen Browsern geteilt wird. Es gibt zwei Haupttypen von Tests: Reftests und testharness.js-Tests.

Reftests erstellen und vergleichen Screenshots von zwei Seiten. Screenshots werden standardmäßig nach dem Auslösen des Ereignisses load erstellt. Wenn Sie dem Element <html> eine reftest-wait-Klasse hinzufügen, wird der Screenshot erstellt, sobald die Klasse entfernt wird. Deaktivierte Tests bedeuten eine geringere Testabdeckung. Achten Sie darauf, dass eine Schriftart instabil ist. Verwenden Sie nach Möglichkeit die Schriftart Ahem.

testharness.js ist ein JavaScript-Framework, mit dem alles außer dem Rendering getestet werden kann. Achten Sie beim Schreiben von testharness.js-Tests auf das Timing und denken Sie daran, den globalen Status 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 langem Zeitlimit und Bereinigung:

Das sollten Sie tun:
<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 sonst im Web nicht verfügbar ist. Sie können unter anderem eine Nutzergeste von test_driver.bless abrufen oder mit test_driver.action_sequence komplexe, vertrauenswürdige Eingaben generieren.

WPT bietet über Dateinamen auch einige nützliche serverseitige Funktionen. Bei multiglobalen Tests (.any.js und seine Freunde) werden dieselben Tests in unterschiedlichen Bereichen (window, worker usw.) ausgeführt. .https.sub.html verlangt, dass der Test über HTTPS mit serverseitiger Substitutionsunterstützung geladen wird:

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) ermöglicht die Ersetzung, fügt X-Key: val den Headern der Antwort hinzu und verzögert sich eine Sekunde vor der Antwort. Suchen Sie auf web-platform-tests.org nach „Pipes“, um weitere Informationen zu erhalten.

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

Änderungen an WPT werden automatisch nach GitHub exportiert. In Ihrem CL werden Kommentare von einem Bot angezeigt. GitHub-Änderungen von anderen Anbietern werden ebenfalls kontinuierlich importiert. Damit beim Import neuer Fehler automatisch Fehler gemeldet werden, 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

Weitere Ressourcen

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