O que você precisa saber antes de automatizar testes de aceitação — parte 1

Quando nós, profissionais da tecnologia, nos deparamos com o início de um projeto de automação, ficamos sempre na dúvida de por onde começar, e na maioria das vezes, falhamos no planejamento de tal projeto. Planejar é extremamente importante para garantir que todo o time siga as mesmas técnicas e métodos, e não torne, futuramente, o projeto algo de difícil manutenção.

Todos esses problemas são elucidados quando o plano de teste para automação passa a ser abrangente e eficaz. Os envolvidos no processo de construção precisam conhecer os reais objetivos do projeto de automação, seguindo uma abordagem organizada. Antes de automatizar, é preciso que fiquem claros para os analistas da qualidade os seguintes itens:

  • Escopo de testes;
  • Identificação de riscos;
  • O que será mensurado na automação;
  • O que será coberto pelos testes;
  • O que não será coberto pelos testes;
  • Restrições relacionadas a tempo e recursos.

Em tempos de metodologia ágil, os testes, teoricamente, passam a ser a melhor documentação sobre o produto desenvolvido, servindo de referência para quem está mexendo na aplicação pela primeira vez. Mas, na prática, muitas vezes, ao entrar em projetos de automação antigos, com muitos testes, é comum nos assustarmos com a falta de padronização desses projetos.

Dentro de um contexto ágil, algumas dicas importantes podem permitir que o time entregue mais testes automatizados sem comprometer a entrega das features implementadas.

PLANEJAMENTO

É o momento certo para a automação?

Equivocadamente, muitas pessoas acreditam que os testes manuais deixarão de existir. Talvez isso aconteça daqui a muitos anos, mas no momento, não, isso não acontecerá! Os testes manuais ainda são a forma mais eficiente de usar as funções e os recursos de um aplicativo como usuário final para verificar se o software está funcionando conforme especificado.

E se engana quem acha que o processo de testes manuais é apenas uma checagem simplista. Ele requer muito esforço analítico. Como softwares são usados por humanos, é presumível que os testes manuais encontrem mais bugs que os testes automatizados, já que o testador no processo manual está mais propenso a atuar em diferentes formas não programáveis.

É preciso entender que o valor dos testes automáticos são notados quando estes servem como complemento aos testes manuais.

Entenda o contexto

Existem diversos tipos de testes e é natural que o analista da qualidade desperte o interesse por implementá-los para cobrir todos os espectros. Mas é preciso entender que o projeto possui um escopo com uma necessidade específica, com um prazo a ser atendido. Nesse momento, deve-se avaliar se caberia a implementação de toda essa diversidade de testes, e em caso negativo, definir quais testes poderiam garantir uma maior cobertura da qualidade do produto em desenvolvimento.

Escreva os casos de testes antes de automatizá-los

Uma forma de identificar melhor os cenários que garantirão uma cobertura eficiente de testes para sua feature é escrever os cenários. A escrita dos cenários é um momento extremamente rico, quando os seus construtores podem explorar toda a capacidade criativa para levantar fluxos funcionais e não funcionais que não foram pensados durante o processo de planejamento da funcionalidade. Após a criação do cenário, os mesmos podem ser apresentados ao time, que decidirá quais serão automatizados e quais serão executados manualmente. A aprovação do time para os cenários levantados é extremamente importante, pois alinha com todos os envolvidos as expectativas do projeto de automação.

Decidir o que automatizar

Não existe 100% de automação, assim como, não existe 100% de testes executados. Isso já aprendemos quando estudamos sobre engenharia de testes. O grande segredo para quem está tentando priorizar os testes a serem automatizados é se fazer a seguinte pergunta: quais testes eu mais reexecuto? Testes que serão executados muitas vezes acabam gerando retrabalho para seus testadores, utilizando automação, esse trabalho pode ser otimizado. Outros tipos de testes que precisam ser automatizados são os que cobrem features que apresentam bugs com frequência; que requerem fluxos de execução muito extensos, consequentemente gerando muito esforço e tempo; testes que são executados em plataformas diferentes; e claro, os cenários que são impossíveis de serem testados manualmente.

Não automatize o que mudará com frequência ou o que ainda não está estável

Funcionalidades que mudam o tempo todo ou que apresentam instabilidade, acabam fazendo com que você tenha que sempre atualizar os testes ou corrigi-los para se adequarem às novas implementações. O objetivo da automação é reduzir o tempo usado nos testes. Exigir de um analista a correção recorrente de testes já implementados vai de encontro ao objetivo da automação.

BOAS PRÁTICAS

Agora que você já planejou e decidiu em qual ferramenta automatizar seus testes, vale a pena se atentar a algumas dicas simples que podem tornar seu projeto de automação mais eficiente:

Foque nas regras de negócio

O seu teste deve ser a melhor documentação que o seu projeto deve ter. Crie seus cenários de forma a atender requisitos dos usuários. Uma história do usuário pode até ser apenas o apontamento de um desejo do usuário, mas seu teste precisa ser a descrição que melhor esclarece o valor desse requisito para a persona afetada por ele.

Escreva de maneira simples

Seus testes automatizados não precisam ser longos e cheios de checagens desnecessárias. Pense bem sobre o fluxo principal, tente englobar apenas o que é realmente necessário. Pense que testes extremamente longos podem impactar no tempo de build, além de não atenderem à realidade momentânea do projeto. Os testes precisam ser claros e precisos. O cenários de testes precisam sempre responder a três perguntas:

  • Onde estamos?
  • O que faço?
  • O que espero?

Dado que eu tenho uma funcionalidade de login e outra de cadastro de produto, trago um exemplo de um cenário longo e cheio de detalhes que não enriquecem o teste como documentação:

Todos os passos acima poderiam estar inclusos na automação por trás de cada passo do teste. Segue um exemplo que engloba todos os cenários acima de forma compacta e sucinta:

Use Contexto

Evitar condições repetitivas em vários testes pode ser uma forma de torna-los mais enxutos e agilizar o seu trabalho. Uma forma eficiente é transformar testes repetitivos e comuns em precondição. O Contexto (background) serve para isso, pois é executado antes de executar cada um dos cenários. Veja o exemplo abaixo:

Crie uma estrutura de fácil manutenção

Uma forma de identificar os tipos de arquivo do projeto de automação é fazer a sua separação por grupos. Normalmente, os projetos de automação são divididos da seguinte forma:

  • pages: diretório onde ficam agrupados os arquivos que representam os elementos contidos numa página. Cada arquivo aqui representa uma classe, que pode conter métodos ou simplesmente uma abstração dos elementos web;
  • specification: diretório onde estão contidos os cenários de testes. Os arquivos aqui possuem descrição das regras de negócio em forma de cenários de testes.
  • step_definitions: todo projeto de automação que utiliza linguagem de negócio possui um método que traduz o cenário de teste em código de baixo nível para que cada passo do teste execute uma ação. Nesse diretório é onde encontramos esses arquivos.
  • support: é o diretório responsável pelos arquivos de configuração que são necessários para a execução do projeto. Aqui são alocados arquivos que possuem informações de ambiente, usuários da aplicação, navegadores em que os testes serão executados, entre outras configurações.

Use tabelas

Os cenários geralmente trabalham com dados únicos, que são passados para testar uma funcionalidade e mesmo que, esse cenário seja executado inúmeras vezes, utilizará o mesmo dado para as diversas execuções. Quando se há a necessidade de especificar uma quantidade grande de dados, a tabela é o recurso mais indicado, pois além de otimizar o teste, garante uma melhor visibilidade do cenário. Segue um exemplo abaixo:

Utilize tags

As tags são formas inteligentes de identificar os testes. Pense que o seu projeto de automação tende a crescer significativamente e encontrar algo pode se tornar mais fácil se todos os testes do mesmo grupo possuírem tags. Elas também ajudam na hora da execução, já que é possível passá-las como parâmetros e executar apenas os testes que estão associados às mesmas:

Utilize o E:

Algumas vezes é comum encontrarmos testes que repetem demasiadamente as palavras reservadas. Uma forma de evitar essa redundância é utilizando a chave reservada E. Veja o exemplo:

Evite thread.SLEEP

É muito comum encontrar um elemento que leva um tempo maior para ser renderizado. Quando esse elemento não é renderizado até o tempo default do teste ser atingido, é natural que o teste falhe. Alguns programadores costumam então, usar o Thread.sleep para garantir que o teste aguardará a renderização do elemento até um tempo específico. O uso do sleep acaba consumindo recurso e deixando os testes mais demorados, dado que, o elemento pode ser visualizado antes do tempo configurado e mesmo assim, aquele trecho de código estará bloqueado até o tempo limite do sleep. Algumas linguagens disponibilizam recursos para evitar o uso do sleep, é o caso da função wait_until_present do Ruby, que aguarda até que o elemento esteja disponível:

Outras boas sugestões:

  • Crie testes independentes;
  • Configure sua suíte para executar em diferentes navegadores web;
  • Faça capturas de telas para facilitar a investigação quando o teste falhar;
  • Crie relatórios de execução para a suíte de testes.

As boas práticas de automação são extremamente importantes, pois são elas que garantem que o projeto se torne sustentável e de fácil manutenção. A longo prazo, a adoção traz benefícios como a produção e a capacidade de integração a diferentes realidades. É possível notar em projetos de automação maduros que o processo de planejamento técnico se torna mais eficaz, a revisão de codificação e controle de código fonte são melhor gerenciados, as verificações de controle da qualidade se tornam mais efetivas, além de toda a suíte, quando construída da forma correta, tornar-se a melhor documentação do seu projeto.

Let’s do it?


Referências:

GRAHAM, D.; FEWSTER, M. Experiences of Test Automation: Case Studies of Software Test Automation. V. 1. Indiana: Editora Addison-Wesley Professional, 2012.

GREGORY, J.; CRISPIN, L. Agile Testing: A Practical Guide for Testers and Agile Teams. Indiana: Editora Pearson Education, 2008.

POLLNER, A.; FEWSTER, M. Schieferdecker, I. Test Automation Engineer: Guide to the ISTQB Advanced Level Certification. São Rafael: Editora Rocky Nook, 2019.

RILEY, T.; GOUCHER, A. Beautiful Testing: Leading Professionals Reveal How They Improve Software (Theory in Practice). Sebastopol: Editora O’Reilly Media, 2009.