Chromium Chronicle n. 4: testa le funzionalità della tua piattaforma web con WPT

Episodio 4: di Robert a Waterloo, ON (luglio 2019)
Puntate precedenti

Se lavori su Blink, potresti conoscere web_tests (in precedenza LayoutTests). web-platform-tests (WPT) è disponibile all'interno di web_test/external/wpt. Il WPT è il modo migliore per testare le funzionalità esposte al web così come vengono condivise con altre tramite GitHub. Prevede due tipi principali di test: reftest e testharness.js.

reftests esegue e confronta screenshot di due pagine. Per impostazione predefinita, gli screenshot vengono eseguite dopo l'attivazione dell'evento load. se aggiungi una classe reftest-wait all'elemento <html>, lo screenshot verrà acquisito quando il corso viene rimosso. Se i test vengono disattivati, la copertura dei test sarà ridotta. Fai attenzione ai caratteri screpolatura; Se possibile, utilizza il carattere Ahem.

testharness.js è un framework JavaScript per testare qualsiasi cosa tranne il rendering. Quando scrivi i test testharness.js, presta attenzione alle tempistiche, e ricordati di ripulire lo stato globale.

Timeout irregolare e potenziali stati di fuga:

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

Un test migliore con timeout pulizia:

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

Utilizza testdriver.js se hai bisogno dell'automazione, altrimenti non è disponibile sul web. Puoi ricevere un gesto dell'utente da test_driver.bless, generare input attendibili con test_driver.action_sequence e così via.

WPT fornisce anche alcune utili funzionalità lato server tramite i nomi dei file. I test multiglobali (.any.js e i suoi amici) eseguono gli stessi test in diversi ambiti (window, worker e così via); .https.sub.html richiede il caricamento del test tramite HTTPS con il supporto della sostituzione lato server come indicato di seguito:

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

Alcune funzionalità possono essere abilitate anche nelle stringhe di query. baz.html?pipe=sub|header(X-Key,val)|trickle(d1) consente la sostituzione, aggiunge X-Key: val alle intestazioni della risposta e ritarda di 1 secondo prima di rispondere. Cerca "pipe" su web-platform-tests.org per ulteriori informazioni.

WPT può anche testare comportamenti che non sono ancora inclusi nelle specifiche; solo assegna al test il nome .tentative. Se hai bisogno delle API interne Blink (ad es. testRunner, internals), esegui i test in web_tests/wpt_internal.

Le modifiche apportate a WPT vengono esportate automaticamente in GitHub. Vedrai commenti di un bot nel tuo CL. Anche le modifiche a GitHub introdotte da altri fornitori importati continuamente. Per ricevere bug segnalati automaticamente quando nuovi errori , crea un file OWNERS in una sottodirectory in WPT:

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

Risorse aggiuntive

  • Desiderano scoprire come i test vengono eseguiti su altri browser e quanto sono interoperabili la tua caratteristica? Utilizza wpt.fyi.
  • Cerchi ulteriore documentazione sulle API, linee guida, esempi, suggerimenti e altro ancora? Visita il sito web-platform-tests.org.