Concrete Logo
Hamburger button

Cucumber: truques e dicas

  • Blog
  • 24 de Agosto de 2018

Existem diversas ferramentas para automação de testes, mas uma muito conhecida é o Cucumber, que tem por objetivo tornar mais clara e coesa a especificação, por exemplo. Importante que ela seja:

  • De fácil entendimento
  • Envolva o time escrevendo cenários antes do desenvolvimento
  • Sirva de guia para o desenvolvimento do produto
  • Gere relatórios para o cliente

Na especificação, por exemplo, as funcionalidades são escritas utilizando a linguagem chamada Gherkin (próxima linguagem natural) e contém algumas palavras-chave.

É escrito em mais de 60 línguas 😱

Orientação para palavras chave em todas as línguas 😎

Iniciando as estruturas de projeto Cucumber

Cria as estruturas de pastas e arquivos necessários em um projeto padrão de Cucumber.

Gerando steps de forma rápida

Com um arquivo.feature criado, já é possível utilizar alguns recursos do Cucumber e agilizar a geração dos primeiros snippets. Assim, não vai ser necessário aguardar o emulador ou browser iniciar e finalizar a execução dos testes, para somente depois gerar os snippets.

Não mostrar na tela os snippets que ainda faltam concluir

Não mostra na tela os snippets que ainda não estão concluídos, ou seja, aqueles com o status de pendente.

Executando os testes

Execução padrão dos testes

Executando os cenários por tags

Utilizar tag é uma ótima maneira de organizar features e cenários e também de definir estratégias que indicam como estão estruturadas as features.

Exemplo de tags

Hooks: utilizando Before e After é possível definir algumas tags que vão ser executadas antes ou depois de específicos cenários.

Exemplo de tag utilizando before e after

Veja mais sobre Cucumber tags neste repositório.

Especificar o número de vezes para repetir os testes com falha

Testes de UI são mais lentos e isso, basicamente, acontece porque eles buscam testar o aplicativo de uma maneira completa. Alguns dos problemas podem ocorrer devido:

  • Instabilidade da rede
  • Lentidão de servidor
  • Timeout
  • Flaky test

No exemplo abaixo, foi executado o teste da funcionalidade login. Inicialmente o teste falhou por um problema que eu forcei (mas poderia ser por problema de rede, lentidão do servidor etc).

Na segunda tentativa realizada, o teste foi executado e o resultado esperado foi gerado com sucesso. 😎

Na primeira execução o teste falhou

No segundo momento o cucumber Flaky executou com sucesso

Definir que os cenários sejam executados de forma aleatória

Isso faz validar o fato de cada cenário ser independente, além de garantir que não ocorra dependência de um cenário para outro. Esta sequência pode ser:

Defined: Executa os cenários na ordem em que são definidos.

Random: Sorteia e executa os cenários de forma aleatórias.

É possível especificar certas features e cenários que vão ser executados de forma aleatória. Por exemplo: — — order random: 5738

Exibir os arquivos carregados durante a execução

Verbose mostra todos os arquivos carregados durante a execução do teste. Desta forma é possível verificar quais arquivos estão sendo executados no momento deste teste. Abaixo segue um exemplo dos arquivos carregados ao executar um cenário da feature de login.

Cancelar a execução dos testes, caso o primeiro cenário falhar

Este comando faz com que seja cancelado imediatamente a execução dos testes, caso o primeiro cenário falhar. Sendo assim, as próximas features e cenários nem mesmo vão ser executados.

Em um ambiente ágil pode ser interessante que se determinado cenário não passar, não seja válido nem mesmo executar os próximos. Além de já verificar o motivo da falha inicial.

Executar os testes, de acordo com determinado perfil

É possível configurar o arquivo yml que existe no projeto e desta forma vai poder configurar e armazenar determinados perfis no Cucumber. Isso se torna útil se você estiver executando os testes em diferentes ambientes. Na imagem abaixo é possível ver o exemplo de um arquivo yml.

Reports

As informações nos relatórios fornecem em detalhes as evidências sobre os cenários, contendo os registros de cada passo. A geração de logs ou reports que o cucumber disponibiliza é um recurso interessante para evidenciar os testes que foram executados.

Os reports podem ser gerados em diferentes formatos durante a execução, de forma muito simples, utilizando os plugins formatadores:

Alguns exemplos de relatórios em um projeto iOS automatizado com Appium.

Para gerar o relatório, basta atribuir alguns comandos ao executar o cenário, como nos exemplos abaixo:

Exemplo de relatório HTML

Exportando para o formato json ou json_pretty é possível realizar uma interação com algum outro software.

Na imagem a seguir, é mostrado um relatório gerado pelo Jenkins, o qual utiliza um plugin do Cucumber. Este plugin apresenta os resultados dos testes em um report HTML acessível pelo próprio Jenkins. As informações estão agrupadas por abas: aprovados, falharam, não executados, número de cenários executados, número de etapas executadas, tempo total de execução de scripts.

Feature login com sucesso

Feature login com falha

Ainda podem ser realizadas exportações para vários outros formatos, JUnit, summary, progress, rerun, entre outros.

Conclusão

Cucumber não serve apenas para automatizar os testes.

“Cucumber é uma ferramenta de colaboração com a intenção de criar um entendimento comum entre todos os membros do time.”

A ideia foi fazer um resumo com algumas dicas e curiosidades que possam facilitar a vida de quem trabalha com Cucumber. Essas dicas entre outras podem ser facilmente encontradas na documentação deste framework, fique à vontade para estudar e utilizar outros recursos (cucumber -help). 😉

No capítulo de QA da Concrete nós nos importamos com o que criamos. Somos parte fundamental dos times de desenvolvimento, pois garantimos a qualidade de engenharia do produto final. Nosso papel é desenvolver e automatizar a suíte de testes de comportamento, criando e mantendo testes de aceitação, regressão e integração. Para isso, utilizamos tecnologias como Cucumber, Calabash e Ruby. Nosso DNA tem palavras como Agile Testing, Especificação por Exemplo e Automação de Testes.Trabalhe com os melhores! Acesse: concrete.com.br/vagas