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

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

Se você trabalha no Blink, talvez conheça o web_tests (antigo LayoutTests). O web-platform-tests (WPT) fica dentro do web_test/external/wpt. O WPT é maneira preferencial de testar recursos expostos na Web, já que eles são compartilhados com outros via GitHub. Há dois tipos principais de testes: reftests e testharness.js.

reftests fazem e comparam capturas de tela de duas páginas. Por padrão, as capturas de tela são realizadas depois que o evento load é disparado; se você adicionar uma classe reftest-wait ao elemento <html>, a captura de tela será feita quando a classe for removida. Testes desativados significam diminuir a cobertura dos testes. Esteja ciente de problemas relacionados a fontes instabilidade; use a fonte Ahem quando possível.

testharness.js é um framework de JavaScript para testar qualquer coisa exceto a renderização. Ao criar testes de testharness.js, preste atenção ao tempo, e não se esqueça de limpar o estado global.

Tempo limite instável e possíveis estados vazados:

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 longo e limpeza:

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 testdriver.js se precisar de automação, que não está disponível na Web. É possível receber um gesto do usuário do test_driver.bless, gerar consultas entradas confiáveis com test_driver.action_sequence etc.

O WPT também oferece alguns recursos úteis do lado do servidor usando nomes de arquivo. Testes multiglobais (.any.js e seus amigos) executam os mesmos testes em diferentes escopos (window, worker etc.); .https.sub.html solicita que o teste seja carregado por HTTPS com suporte à substituição do lado do servidor como 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.

A WPT também pode testar comportamentos que ainda não estão incluídos nas especificações; apenas nomeie 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 alterações feitas no WPT são exportadas automaticamente para o GitHub. Você verá comentários de um bot no seu CL. As mudanças no GitHub de outros fornecedores também estão são importadas continuamente. Para receber bugs registrados automaticamente quando novas falhas falharem forem importados, 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 saber como seus testes são executados em outros navegadores e o grau de interoperabilidade seu atributo? Use wpt.fyi.
  • Procurando mais documentação sobre APIs, diretrizes, exemplos, dicas e muito mais? Acesse web-platform-tests.org.