Chromium Chronicle #4: teste os recursos da plataforma da Web com o WPT

Episódio 4:de Robert em Waterloo, ON (julho de 2019)
Episódios anteriores

Se você trabalha no Blink, provavelmente conhece web_tests (antigo LayoutTests). Web-platform-tests (WPT) fica em web_test/external/wpt. A WPT é a maneira preferencial de testar recursos expostos à Web, já que ela é compartilhada com outros navegadores pelo GitHub. Ela tem dois tipos principais de testes: reftests e testharness.js.

reftests faz e compara capturas de tela de duas páginas. Por padrão, as capturas de tela são feitas depois que o evento load é acionado. Se você adicionar uma classe reftest-wait ao elemento <html>, a captura de tela será feita quando a classe for removida. Testes desativados significam uma redução na cobertura de testes. Esteja ciente de inconsistências de fonte e use a fonte Ahem sempre que possível.

testharness.js é um framework de JavaScript para testar várias coisas, exceto a renderização. Ao criar testes testharness.js, preste atenção ao tempo e lembre-se de limpar o estado global.

Tempo limite instável e possíveis estados de vazamento:

O que não fazer
<script>
promise_test(async t => {
  assert_equals(await slowLocalStorageTest(), "expected", "message");
  localStorage.clear();
});
</script>

Um teste melhor com tempo limite e limpeza longos:

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

Use o testdriver.js se precisar de automação que não está disponível na Web. Você pode receber um gesto do usuário de test_driver.bless, gerar entradas complexas e confiáveis com test_driver.action_sequence etc.

O WPT também oferece alguns recursos úteis do lado do servidor com nomes de arquivo. Testes multiglobais (.any.js e seus amigos) executam os mesmos testes em escopos diferentes (window, worker etc.). .https.sub.html solicita que o teste seja carregado por HTTPS com suporte para substituição do lado do servidor, como no exemplo abaixo:

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

Alguns recursos também podem ser ativados em strings de consulta. baz.html?pipe=sub|header(X-Key,val)|trickle(d1) ativa a substituição, adiciona X-Key: val aos cabeçalhos da resposta e atrasa um segundo antes de responder. Pesquise "pipes" em web-platform-tests.org para saber mais.

O WPT também pode testar comportamentos que ainda não estão incluídos nas especificações. Basta nomear o teste como .tentative. Se você precisar de APIs internas do Blink (por exemplo, testRunner, internals), coloque seus testes em web_tests/wpt_internal.

As mudanças feitas no WPT são exportadas automaticamente para o GitHub. Você verá comentários de um bot na sua CL. As alterações de outros fornecedores no GitHub também são importadas continuamente. Para receber bugs informados automaticamente quando novas falhas forem importadas, crie um arquivo OWNERS em um subdiretório no WPT:

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

Outros recursos

  • Quer descobrir como seus testes são executados em outros navegadores e o quanto seu recurso é interoperável? Use wpt.fyi.
  • Procurando mais documentação sobre APIs, diretrizes, exemplos, dicas e muito mais? Acesse web-platform-tests.org.