Cucumber framework - Executando cenários de teste




Oi!

Aprendi um pouco de Cucumber recentemente, quando comecei a trabalhar com Ruby. O Cucumber é praticamente uma unanimidade no universo Ruby para execução de testes automatizados.

E o que é? Cucumber é um framework que permite criar cenários executáveis para os testes. Ele cria uma camada legível e compreensível dos scripts de teste.

Imagine que você tem criado diversos testes automatizados para o sistema em que trabalha. Quando criar seus scripts de testes, você vai ter um amontoado de métodos que clicam em botões e preenchem campos. Mas para o seu cliente final ou pra qualquer outra pessoa "menos técnica" da sua equipe, nenhum desses métodos "faz sentido". Com o Cucumber, podemos descrever o que esses métodos representam em forma de features e cenários.

Outros posts sobre Cucumber (e BDD), em português:
http://testinworld.wordpress.com/2013/05/24/bdd-com-cucumber-parte-1/
http://www.bugbang.com.br/entendendo-bdd-com-cucumber-parte-i/

E o Cucumber site:
http://cukes.info/

No site, vocês podem ver que o Cucumber trabalha com Ruby, Java, .Net e Flex... Ah, além de "qualquer aplicação web desenvolvida em qualquer linguagem"!

Na prática, eu tenho usado o Cucumber com Ruby e vou falar nesse contexto.


Estrutura do Cucumber

1 - Tipicamente, você deve inserir a estrutura de arquivos do Cucumber dentro do projeto do seu sistema. Você vai ter uma nova pasta, chamada features.

Imagem retirada desse post: http://vertocardoso.wordpress.com/2010/09/02/utilizando-cucumber-com-selenium-em-seus-projetos-java/

2 - Na pasta features, teremos as pastas step_definitions e support, além dos arquivos features.


  • features --> As features são o core do Cucumber, é por elas que adotamos um framework como esse. São escritas usando a DSL Gherkin e nelas descrevemos o comportamento do nosso software. Nosso software pode ter N features, e cada feature pode ter N cenários.

  • step_definitions --> É o repositório para os scripts de teste, aquele tal amontoado de métodos que farão a iteração com o nosso software.

  • support --> É o repositório das configurações dos testes. Browsers, drivers, pré e pós condições, constantes, etc.





Mãos na massa!

Pré-requisito: 
  • É preciso ter Ruby instalado. Instala aí, é fácil! Juro!
  • Instalar a gem testgen
  • Instalar um editor decente pra Gherkin DSL. Eu uso o Sublime Text 2, com esse plugin maroto aqui! Existem também plugins pra notepad ++, pra Eclipse, etc.

First trick

Já entendemos como é a estrutura de um projeto de testes feito com Cucumber, mas não precisamos criar isso na mão. Pra isso instalamos a gem TESTGEN. Essa bonitinha cria toda a estrutura do projeto pra nós. Basta executar o comando "testgen project <nome_do_projeto>". 





Tipicamente², você colocaria essa estrutura do Cucumber dentro da estrutura de pastas do projeto do seu sistema. No nosso caso, o projeto de testes vai ficar apartado, por motivos óbvios.

Um ponto importante é que foram criados 3 arquivos dos quais não falamos anteriormente: 
Rakefile, Gemfile e cucumber.yml.
São arquivos de configuração do projeto e não ficam dentro da pasta /features. Provavelmente, no projeto do sistema em que você trabalha, já existem Rakefiles e um Gemfile, mas como estamos criando um projeto de testes separado e "do zero", eles também foram criados.

Features e cenários

Vou usar um velho conhecido meu como alvo do nosso exemplo, o site do Walmart: //www.walmart.com.br/

Vamos usar duas features para desenvolver os cenários (testes): Recuperação de Login e Cálculo de Frete.


1 - Criar um arquivo para cada feature, usando a extensão .feature



2 - Descrever as features usando Gherkin. O Gherkin tem suporte a diversos idiomas e, por padrão, você pode usar o inglês diretamente. Vou usar o português utilizando # language: pt.





3 - Descrever os cenários pertinentes a cada feature. Esses cenários vão representar nossos testes, são os nossos executáveis e cada "passo" de um cenário vai estar vinculado ao código nos step_definitions.



Executando o projeto

Com o que fizemos até aqui já temos cenários executáveis, é uma documentação viva do nosso projeto e temos uma forma "legível" de representar o que nossos testes automatizados estão validando.

Precisamos agora vincular esses cenários aos scripts. Criar os scripts vai ser assunto de outro post, mas faremos esse "vínculo" entre métodos e cenários agora, executando as features.

1 - Se você tiver a gem bundler instalada, execute o comando bundle no terminal, dentro da pasta do projeto (não na pasta features). O bundle instala as gems listadas no Gemfile do projeto, o que fará com que o Cucumber, o Rspec, e todas as dependências sejam instalados. Se você não tiver o bundler, instale as duas gems "na mão".




2 - Run! No momento em que executarmos as featues, o próprio Cucumber vai mostrar como devem ser implementados os steps com os scripts. 


O comando para executar é: cucumber features/nomedafeture.feature




3 - Na pasta step_definitions, é preciso criar um arquivo Ruby (.rb) para colocar esses steps. Simples assim, copiar os steps sugeridos no terminal e colar no arquivo .rb.



Feito isso, em cada step pending vamos implementar nossos scripts testes, mas isso fica pra próxima.

O código desse exemplo está disponível no Bitbucket:
https://bitbucket.org/karolxavierleite/how-to-test-cucumber-framework

Karoline Leite

Software Quality Engineer

Nenhum comentário:

Postar um comentário