Automation Testing

Por que os testes automatizados devem ser atômicos (o punk atômico)

Falei recentemente com Nikolay Advolodkin em meu podcast de automação do Test Guild sobre as melhores práticas de automação. Surgiu a relevância dos testes de automação atômica, mas acho que não conversamos o suficiente sobre isso.

 

Ou por outra, um dos meus ídolos de puerícia, Eddie Van Halen, faleceu recentemente, e esses conceitos me fazem sorrir porque me lembram de sua música, Atomic Punk.

Mas estou divagando.

Nikolay decidiu fabricar uma postagem que investiga profundamente por que é tão importante que seus testes de automação sejam os menores possíveis.

Neste ponto, você pode estar dizendo “Chega, Joe! Por obséquio, passe para Nikolay! ”

Está muito, está muito. Cá está:

Um teste atômico definido

Nascente concepção é fundamental para você entender para que qualquer estrutura de automação seja bem-sucedida:

Um único teste automatizado não deveria imita a automação de ponta a ponta.

Em vez disso, seus cheques automatizados devem formar uma unidade única e irreduzível. Você deve testar somente um recurso de cada vez.

Se você tem experiência uma vez que desenvolvedor de software, isso é muito semelhante a grafar testes de unidade.

Seu teste é atômico se o seguinte for verdadeiro:

  • O teste terá somente uma ou duas afirmações, no supremo. (Às vezes, você precisa de uma enunciação para prometer que o estado do seu aplicativo esteja correto.)
  • Seus testes têm muito poucas interações de IU e eles estão somente em no supremo duas telas. Em casos raros, um teste atômico pode velejar por três telas.

Quais são os benefícios de se dar ao trabalho de projetar seus testes de automação assim?

Existem muitas vantagens em projetar seus testes para serem os menores possíveis.

Reprovar seus cheques automatizados rapidamente

Uma vantagem é que grafar testes atômicos permite que você falhe rápido e cedo.

O feedback que você recebe é rápido e focado.

Não levará mais de um minuto para verificar o estado de um recurso.

Em seguida, os testes atômicos diminuem o comportamento de teste fragmentado.

Teste automatizado menos instável

Os testes que você conclui em dois minutos ou menos têm duas vezes mais chances de passar do que os testes que duram mais de dois minutos.

Portanto, lembre-se de que quanto mais tempo um teste leva para ser executado, maior é a verosimilhança de ele falhar.

Ou por outra, grafar testes atômicos reduz a instabilidade porque diminui o número de pontos de quebra possíveis nesse teste.

Você verá uma subtracção nos falsos positivos, o que, por sua vez, diminuirá o tempo gasto na solução de problemas.

Cá está um exemplo:

  1. Abra a página inicial do UltimateQA.com
  2. Afirme que a página foi ocasião
  3. Afirme que cada seção da página existe
  4. Abra a página do blog
  5. Procure um cláusula
  6. Afirme que o cláusula existe

Cada lanço é uma chance de alguma coisa dar inexacto ao usar a automação de IU.

Por exemplo, um localizador ou o mecanismo de interação pode ter mudado, ou sua estratégia de sincronização pode estar quebrada.

Portanto, quanto mais etapas você somar, maior será a verosimilhança de o teste ser interrompido e produzir falsos positivos.

Melhor cobertura de código de teste automatizado

O terceiro mercê de grafar testes atômicos é que eles não impedirão que outras funcionalidades sejam testadas se falharem.

Em outras palavras, as verificações permitem um teste melhor. Por exemplo, consulte o teste mencionado supra.

Se falhar na Lanço 3, você nunca conseguirá verificar se a página do Blog ou a funcionalidade de Pesquisa funciona. (Isso pressupõe que você não tem outros testes para verificar esta funcionalidade.)

Uma vez que resultado da realização de um teste massivo, você reduzirá a cobertura do teste.

Finalmente, outro grande mercê de grafar testes de unidade atômicos é que eles serão executados mais rapidamente quando paralelizados.

Eles são curtos e rápidos, reduzindo significativamente o tempo de realização do seu conjunto de testes.

Por exemplo, nesta refatoração, obtive uma melhoria de desempenho de 98% na velocidade de realização do teste.

Economia de desempenho devido ao teste atômico | TestGuild

No cenário supra, eu tinha um conjunto de 18 testes ponta a ponta que NÃO eram atômicos e não estavam sendo executados em paralelo.

Portanto, eu dividi meus testes em 180 testes atômicos minúsculos, mantendo a mesma cobertura de código.

Em seguida, executei-os em paralelo e diminuí o tempo médio de realização do caso de teste para 1,76s, de 86s!

Uma vez que separar os testes de IU de ponta a ponta para serem atômicos?

Agora, você provavelmente concorda que os testes atômicos são uma boa teoria.

No entanto, você pode estar se perguntando uma vez que dividir seus grandes testes de ponta a ponta.

Confie em mim – você não é o único lutando com esta situação. Eu encontro clientes diariamente com o mesmo problema.

Ou por outra, gostaria de fornecer uma resposta simples para essa questão, mas não consigo.

Para a maioria das pessoas, esse duelo é de tecnologia e cultura.

A boa notícia é que fornecerei um guia passo a passo para ajudá-lo a fabricar execuções de teste atômico.

Embora possa não ser fácil, quando você conseguir, será TÃO fofo!

Cá está um cenário simples:

  1. Abra LifeE-.com
  2. Assegure que a página abre
  3. Procure por um item
  4. Assegure que o item foi encontrado
  5. Juntar item ao carrinho
  6. Assegure que o item foi adicionado
  7. Confira
  8. Afirme que o checkout foi concluído

O primeiro problema é que muitos engenheiros de automação presumem que você deve fazer um fluxo completo de ponta a ponta para esse fluxo de teste automatizado.

Por exemplo, você deve concluir a Lanço 1 antes da Lanço 2 e assim por diante.

A razão é, de que outra forma alguém pode chegar ao processo de checkout sem ter um item no carrinho?

Injetar dados para preencher o estado da IU

A abordagem das melhores práticas de teste automatizado é injetar dados para preencher o estado do aplicativo antes de qualquer interação da IU.

Isso ajudará significativamente em seu processo de teste. Por exemplo:

Você pode controlar o estado de um aplicativo por meio de várias opções:

  • Usando alguma coisa uma vez que uma API RESTful para definir o aplicativo em um estado específico
  • Usando JavaScript
  • Injetando dados no banco de dados para definir o aplicativo em um determinado estado
  • Usando cookies

Se você pode injetar dados entre as junções do aplicativo, pode isolar cada lanço e testá-la sozinha.

Algumas opções a serem consideradas:

  • Envie uma solicitação da web que irá gerar um novo usuário de teste
  • Envie uma solicitação da web para preencher um item em seu carrinho da LifeE-
  • Use o Selenium para furar o navegador na página do carrinho
  • Faça a verificação usando a automação da web
  • Limpe todos os dados de teste em seguida

Usar uma API de página da web é muito mais robusto e rápido do que usar uma GUI com Automação AUI para cada lanço do teste.

Por exemplo, uma solicitação da web pode ser executada em aproximadamente 100 milissegundos.

Isso significa que as etapas 1, 2 e 5 podem levar menos de um segundo para serem concluídas.

A única outra lanço que você precisará concluir é finalizar o processo de checkout com o Selenium (a única segmento que você realmente deseja testar).

Uma vez que controlar o estado do aplicativo usando JavaScript

Um dos impedimentos mais comuns aos testes atômicos é a tela de login.

A vantagem é que a maioria dos aplicativos tem um.

Portanto, uma vez que você remove isso do seu teste para que ele possa ser atômico?

Cá está um exemplo:

Saucelabs Test Automation Demo Test Site | TestGuild

Página com tela de login

  1. Abra o aplicativo da web usando uma instrumento de teste de GUI
  2. Execute JavaScript

Execute Javascript Executor Code Exemplo | TestGuild

Parabéns, agora estamos logados!

Agora, use sua instrumento de teste de automação da GUI para realizar a única operação que deseja testar.

Veja uma vez que ficaria um teste atômico completo:

Exemplo de código de um teste atômico | TestGuild

Observe uma vez que o teste tem somente:

  • OverviewPage.Open () – uma ação da GUI para definir o estado
  • OverviewPage.Cart.SetCartState () – o método para definir o estado do carrinho com JS
  • mais uma ação da GUI para overviewPage.FinishCheckout () – leste é o recurso que queremos testar
  • e uma certeza

Não consegue injetar dados para teste com seu aplicativo da web?

E se você não puder injetar dados para teste?

O mundo não é perfeito e você enfrentará desafios em sua função.

Muitas pessoas não têm a sorte de ter aplicativos desenvolvidos com a testabilidade em mente.

Fique feliz em saber que você tem duas opções úteis se não puder injetar dados para teste.

Por exemplo, você pode trabalhar com desenvolvedores de software para tornar o aplicativo mais testável.

Um sinal de más práticas de desenvolvimento é não conseguir testar seu aplicativo com facilidade. A informação e o compartilhamento de ideias fazem segmento do trabalho.

Informação sátira para o sucesso do teste de longo prazo

Esteja pronto para deixar seu cubo e se legar através de silos para quebrar as barreiras de informação.

Você precisará se legar entre as equipes e trabalhar em conjunto para fabricar um resultado firme. Toda a equipe irregularidade quando um resultado irregularidade, não somente um grupo específico.

Você pode estar pensando: “Sim, mas não é fácil”.

Concordo. Trabalhei em uma empresa onde levei um ano para simplesmente integrar desenvolvedores, ferramentas de automação e controle de qualidade manual em um único pipeline de CI.

Era uma rotina semanal para obter e manter todos preocupados com o resultado do pacote de automação.

Porém, no final das contas, nossa equipe estava mais robusta e expediente do que nunca para isso.

Acredite em mim, é verosímil, e a maioria dos desenvolvedores ficará feliz em ajudar.

O ponto principal é que você deve estar disposto a quebrar essas barreiras se quiser ter sucesso.

Portanto, é evidente, há a opção dois, mas você pode não querer ouvir.

 

Leave a Reply

O seu endereço de email não será publicado. Campos obrigatórios marcados com *