Chromium Chronicle n°4: tester les fonctionnalités de votre plate-forme Web avec le WPT

Épisode 4:Robert à Waterloo, Ontario (juillet 2019)
Épisodes précédents

Si vous travaillez sur Blink, vous connaissez peut-être web_tests (anciennement LayoutTests). Le protocole web-platform-tests (WPT) se trouve dans web_test/external/wpt. WPT est le méthode privilégiée pour tester les fonctionnalités exposées sur le Web, car elles sont partagées avec d'autres via GitHub. Il comporte deux principaux types de tests: reftests et testharness.js.

reftests prend et compare des captures d'écran de deux pages. Par défaut, les captures d'écran sont prises après le déclenchement de l'événement load ; si vous ajoutez une classe reftest-wait à l'élément <html>, la capture d'écran sera effectuée lorsque la classe sera supprimée. Si les tests sont désactivés, la couverture des tests diminue. Gardez à l'esprit que les règles desquamation ; utilisez la police Ahem lorsque cela est possible.

testharness.js est un framework JavaScript permettant de tester tous les éléments à l'exception du rendu. Lorsque vous écrivez des tests testharness.js, faites attention au timing, et n'oubliez pas de nettoyer l'état global.

Délai d'inactivité irrégulier et fuite potentielle:

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

Un meilleur test avec un long délai d'inactivité et cleanup:

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

Utilisez testdriver.js si vous avez besoin d'automatisations qui ne sont pas disponibles sur le Web. Vous pouvez obtenir un geste de l'utilisateur à partir de test_driver.bless, générer entrées fiables avec test_driver.action_sequence, etc.

WPT fournit également des fonctionnalités utiles côté serveur via des noms de fichiers. Les tests multi-mondials (.any.js et ses amis) exécutent les mêmes tests dans différents les champs d'application (window, worker, etc.) ; .https.sub.html demande le chargement du test. via HTTPS avec une compatibilité de substitution côté serveur, comme ci-dessous:

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

Certaines fonctionnalités peuvent également être activées dans des chaînes de requête. baz.html?pipe=sub|header(X-Key,val)|trickle(d1) active la substitution, ajoute X-Key: val aux en-têtes de la réponse, et retarde une seconde avant de répondre. Rechercher "pipes" sur web-platform-tests.org pour en savoir plus.

WPT peut également tester des comportements qui ne sont pas encore inclus dans les spécifications. Nommez le test .tentative. Si vous avez besoin des API internes Blink (par exemple, testRunner, internals), placez vos tests dans web_tests/wpt_internal.

Les modifications apportées à WPT sont automatiquement exportées vers GitHub. Vous verrez les commentaires d'un bot de votre CL. Les modifications GitHub apportées par d'autres fournisseurs sont également est importée en continu. Pour recevoir les bugs automatiquement signalés en cas de nouveaux échecs sont importés, créez un fichier OWNERS dans un sous-répertoire dans WPT:

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

Autres ressources

  • Vous voulez savoir comment vos tests s'exécutent sur d'autres navigateurs et dans quelle mesure ils sont interopérables. votre caractéristique ? Utilisez wpt.fyi.
  • Vous recherchez plus de documentation sur les API, des consignes, des exemples, des conseils et plus encore ? Accédez à web-platform-tests.org.