De Chromium Chronicle #4: Test de functies van uw webplatform met WPT

Aflevering 4: door Robert in Waterloo, ON (juli 2019)
Vorige afleveringen

Als je met Blink werkt, ken je misschien web_tests (voorheen LayoutTests). web-platform-tests (WPT) bevindt zich in web_test/external/wpt . WPT is de voorkeursmanier om webfuncties te testen, omdat het via GitHub met andere browsers wordt gedeeld. Het heeft twee hoofdtypen tests: reftests en testharness.js -tests.

reftests maken en vergelijken screenshots van twee pagina's. Standaard worden schermafbeeldingen gemaakt nadat de load is geactiveerd; als je een reftest-wait klasse aan het <html> -element toevoegt, wordt de schermafbeelding gemaakt wanneer de klasse wordt verwijderd. Uitgeschakelde tests betekenen een afnemende testdekking. Houd rekening met lettertype-gerelateerde schilfering; gebruik indien mogelijk het lettertype Ahem .

testharness.js is een JavaScript-framework voor het testen van alles behalve rendering. Let bij het schrijven van testharness.js-tests op de timing en vergeet niet de globale status op te ruimen.

Schilferige time-out en mogelijke gelekte toestanden:

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

Een betere test met lange time-out en opschoning:

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

Gebruik testdriver.js als u automatisering nodig heeft die anders niet beschikbaar is op internet. U kunt een gebruikersgebaar krijgen van test_driver.bless , complexe, vertrouwde invoer genereren met test_driver.action_sequence , enz.

WPT biedt ook enkele nuttige functies aan de serverzijde via bestandsnamen. Multi-globale tests ( .any.js en zijn vrienden) voeren dezelfde tests uit in verschillende scopes ( window , worker , enz.); .https.sub.html vraagt ​​om de test te laden via HTTPS met ondersteuning voor vervanging aan de serverzijde, zoals hieronder:

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

Sommige functies kunnen ook worden ingeschakeld in queryreeksen. baz.html?pipe=sub|header(X-Key,val)|trickle(d1) maakt vervanging mogelijk, voegt X-Key: val toe aan de headers van het antwoord en vertraagt ​​1 seconde voordat er wordt gereageerd. Zoek naar "pipes" op web-platform-tests.org voor meer informatie.

WPT kan ook gedrag testen dat nog niet in de specificaties is opgenomen; noem de test gewoon .tentative . Als je interne API's van Blink nodig hebt (bijvoorbeeld testRunner , internals ), plaats je tests in web_tests/wpt_internal .

Wijzigingen in WPT worden automatisch geëxporteerd naar GitHub. Je ziet commentaar van een bot in je CL. GitHub-wijzigingen van andere leveranciers worden ook continu geïmporteerd. Om automatisch ingediende bugs te ontvangen wanneer nieuwe fouten worden geïmporteerd, maakt u een OWNERS bestand aan in een submap in WPT:

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

Aanvullende bronnen

  • Wilt u weten hoe uw tests in andere browsers werken en hoe interoperabel uw functie is? Gebruik wpt.fyi .
  • Op zoek naar meer documentatie over API's, richtlijnen, voorbeelden, tips en meer? Bezoek webplatform-tests.org .