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

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

Se lavori su Blink, potresti conoscere web_tests (in precedenza LayoutTests). Web-platform-tests (WPT) si trova all'interno di web_test/external/wpt. WPT è il modo preferito per testare le funzionalità esposte al web, in quanto viene condiviso con altri browser tramite GitHub. Prevede due tipi principali di test: reftests e testharness.js.

reftests acquisisce e confronta gli screenshot di due pagine. Per impostazione predefinita, gli screenshot vengono acquisiti dopo l'attivazione dell'evento load. Se aggiungi una classe reftest-wait all'elemento <html>, lo screenshot viene acquisito quando viene rimossa la classe. I test disattivati riducono la copertura dei test. Fai attenzione alle irregolarità dei caratteri. Se possibile, usa 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 ricorda di ripulire lo stato globale.

Timeout irregolare e potenziale perdita di dati:

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

Un test migliore con timeout e pulizia lunghi:

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 ti serve l'automazione che altrimenti non è disponibile sul web. Puoi ottenere un gesto dell'utente da test_driver.bless, generare input complessi e attendibili con test_driver.action_sequence e così via.

WPT fornisce anche alcune utili funzionalità lato server attraverso i nomi dei file. I test multiglobali (.any.js e i suoi amici) eseguono gli stessi test in ambiti diversi (window, worker e così via); .https.sub.html richiede il caricamento del test tramite HTTPS con il supporto della sostituzione lato server come riportato 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 non ancora inclusi nelle specifiche; basta assegnare al test il nome .tentative. Se ti servono le API interne Blink (ad es. testRunner, internals), inserisci i tuoi test in web_tests/wpt_internal.

Le modifiche apportate al WPT vengono esportate automaticamente in GitHub. Nel tuo CL vedrai i commenti di un bot. Anche le modifiche a GitHub di altri fornitori vengono importate in modo continuo. Per ricevere i bug segnalati automaticamente quando vengono importati 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

Altre risorse

  • Vuoi scoprire come vengono eseguiti i test su altri browser e quanto è interoperabile la tua funzionalità? Utilizza wpt.fyi.
  • Cerchi ulteriore documentazione su API, linee guida, esempi, suggerimenti e altro ancora? Visita web-platform-tests.org.