Como evitar resultados falsos negativos quando se trata de testes de regressão visual

Este conteúdo é o terceiro e último de uma série de posts sobre testes de regressão visual com a ferramenta Applitools. Caso você não tenha assistido aos videos dos conteúdos anteriores, recomendo vê-los antes de ler este post. Seguem os links: teste de regressão visual – bug real e testes de regressão visual – falha esperada.

Agora que você já assitiu aos conteúdos anteriores, vamos ao último assunto da série: falsos negativos. Este post é baseado em um projeto real.

Sabe aquele jogo: encontre as 7 diferenças? Pois aqui vai um mais fácil: encontre as duas diferenças na imagem abaixo.

O teste acima falhou com um resultado falso negativo, ou seja, apesar de o teste ter falhado na verificação visual, não havia nada de errado com a aplicação. Você encontrou as duas diferenças? Pois aí vão. O ícone de status da lista de salas visitadas recentemente mudou de verde para cinza; e a informação de que uma pessoa estava na sala que era exibida deixou de ser mostrada, quando comparando a screenshot baseline com a screenshot corrente (current). A propósito, o ícone de status muda da cor cinza para verde quando tem ao menos uma pessoa na sala.

Porém, a informação de quantas pessoas estão na sala vem do back-end, e no momento da screenshot corrente tal informação ainda não havia sido devolvida pelo servidor, fazendo o teste falhar com um resultado falso negativo.

Agora veja como era o código de tal teste no momento da falha:

const testDescription = "login modal opened";
it(testDescription, () => {
    eyes.open(browser, "appear.in", testDescription, {800, 600});
    helper.click(appearInRoom.signUpButton);
    helper.click(signUpForm.logInButton);
    eyes.checkWindow(testDescription);
    eyes.close();
});

Perceba que logo após a execução das ações para abrir o modal de login (linhas 4 e 5), o método checkWindow (linha 6) do Applitools Eyes já é chamado, o qual bate a screenshot corrente e então compara com a baseline.

Porém, neste momento pode ser que o servidor ainda não tenha devolvido a informação da lista de atividades, fazendo a verificação visual falhar. Ao mesmo tempo, para tal elemento não podemos simplesmente utilizar o recurso do Applitools de ignorar uma região (ignore region), visto que ainda queremos comparar tais elementos visualmente.

Veja abaixo o mesmo teste, porém agora com uma linha a mais, previnindo que tal problema venha a ocorrer:

const testDescription = "login modal opened";
it(testDescription, () => {
    eyes.open(browser, "appear.in", testDescription, {800, 600});
    helper.waitForElementVisibility(roomActivity.statusText);
    helper.click(appearInRoom.signUpButton);
    helper.click(signUpForm.logInButton);
    eyes.checkWindow(testDescription);
    eyes.close();
});

Agora, antes mesmo de abrir o modal de login, aguardamos pela visibilidade do elemento statusText (lina 4), que é exatamente a informação do número de participantes na sala. Com isso, quando a verificação visual ocorrer o elemento dinâmico que também queremos comparar visualmente já está na tela, e o teste então provém um resultado confiável.

A conclusão é que podemos (e devemos) criar testes robustos, os quais provêm resultados reais ao time e nos quais podemos confiar quando estiverem falhando.

Por fim, sugiro a leitura do seguinte post, o qual escrevi em 2015, mas que continua atual, onde explico a difereça entre falsos negativos, falsos positivos, verdadeiros negativos e verdadeiros positivos.

Extra

Aos interessados em como integrar testes e2e escritos utlizando o framework Protractor com a ferramenta Applitools, segue o código exemplo da própria documentação do Applitools.

Espero que tenha gostado do conteúdo e bons testes!

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s