Escrevendo seu primeiro cenário Cucumber

Previamente postei neste blog alguns artigos a respeito do que é BDD, para que serve e como aplicá-lo. Veja exemplos aqui: artigos-bdd-ciclosw

Hoje vamos dar continuidade aos estudos sobre implementação do BDD como método de ATDD, ou seja, a utilização dele para o processo de escrita de cenários de aceite. O foco aqui estará para os testes automatizados implementados pela figura do QA em um contexto de entrega incremental, onde as funcionalidades de um sistema de UI é separado por casos de uso.

Eu também descrevi aqui como implementar seu primeiro cenário de teste automatizado  com BDD utilizando a ferramenta SpecFlow e código C#. Mas hoje quero dar ênfase à escrita de uma feature, que vem a ser a parte de negócio da implementação BDD através do Cucumber, com base na sintaxe Gherkin.

 

Origem do Cucumber

Segundo a documentação do cucumber.io: “Cucumber é uma ferramenta que suporta Desenvolvimento guiado a comportamento (BDD, na tradução livre) – um processo de desenvolvimento de software que visa melhorar a qualidade do software e reduzir custos de manutenção.”.

Essa ferramenta foi criada em 2008, por Aslak Hellesøy, que foi desenvolvedor na ThoughtWorks e em 2014 fundou a empresa Cucumber Ltd. De acordo com suas palavras à uma entrevista da InfoQ: “Eu fui consultor por 10 anos antes de criar a ferramenta Cucumber. Nos primeiros 5 anos de minha carreira, todos os projetos nos quais trabalhei tinham os mesmos problemas:

  • Eu muitas vezes não sabia se tinha entendido todos os requisitos;
  • Eu achei difícil confiar no resultado daquilo que estávamos construindo
  • Eu tinha medo de mudar código pré-existente, sem saber o que poderia quebrar com as mudanças
  • Nós estávamos constantemente atrasados com as entregas

E continua: “Com o BDD, * todos * os testes são testes de aceitação do cliente, escritos em linguagem simples (humana) para que os interessados ​​não técnicos possam compreendê-los. Então, o Cucumber combina especificações de requisitos, testes automatizados e documentação viva em um único formato chamado Gherkin, que é simplesmente inglês com um pouco mais de estrutura.”.

 

Como escrever sua primeira feature

É importante salientar que, tecnicamente, existem diversas ferramentas que podem ser utilizadas para implementar BDD: Cucumber, SpecFlow, JBehave, RSpec, Jasmine, Cucumber-js, Lettuce, Lettuce, etc. E que BDD é um processo maior que a automação de testes!!!

Mas, considerando o cenário que utiliza automação de testes, como citado acima, o fluxo de desenvolvimento BDD pode ser ordenado da seguinte forma:

1. Descrever funcionalidades      2. Implementar cenários   3. Executar cenários

Na etapa Descrever Funcionalidades é a qual: entendemos requisitos e prioridades; listamos cenários de uso, seus fluxos e resultados esperados.

Na etapa Implementar Cenários é a qual: escrevemos os cenários de ATDD com gherkin; implementamos seus steps e page-objects; gravamos os cenários em uma ferramenta de controle de versão.

Na etapa Executar Cenários é a qual: organizamos os cenários em suítes de testes; configuramos variáveis de ambiente, drivers e runners dos testes para a execução dos cenários; integramos os cenários a uma  ferramenta de  integração contínua, caso necessário.

 

 

Agora vamos para a parte prática!


Configurações:

  • Você vai precisar ter uma versão do Ruby instalada em seu sistema operacional (encontre referências sobre como instalá-lo aqui ruby-lang)
    • Meu ambiente é Linux e instalei a versão 2.5.5 do ruby através do gerenciador de pacotes ruby RVM, seguindo os passos deste tutorial: install-ruby-on-rails-on-ubuntu

  • Você também vai precisar ter uma versão da gem cucumber instalada em seu ambiente ruby (para saber o que são gems: clique aqui, para saber mais sobre a gem ruby cucumber: clique aqui)

 

Criando uma feature:

  1. Abra agora o seu editor de texto ou IDE de sua preferência (ex.: Notepad++, SublimeText, Atom, VSCode).
  2. Crie um arquivo chamado busca.feature. Isto mesmo, a extensão de um arquivo cucumber é o ‘.feature’. Salve o arquivo.
  3. Em seu topo, descreva a língua em que irá descrever seus cenários: #language en para o inglês, #language pt-br para o português do Brasil.
    • Acrescente a anotação #encoding: utf-8 caso queira escrever palavras do português acentuadas.
  4. Agora vamos acessar o site de compras das Lojas Americanas (apenas utilizado para exemplo) e realize, manualmente, buscas pelo produto “notebook lenovo ideapad”.
    • Obs.: Este é o resultado esperado
    • Obs 2.: Observe todos os passos que foram necessários realizar para atingir o resultado esperado no site.
  5. Agora retorne para o editor de texto. Vamos continuar escrevendo nossa feature ‘busca.feature‘.
  6. Abaixo das configurações de língua, escreva a tag ‘Funcionalidade:’ e dê um nome para ela.
    • Obs: Perceba que a depender do editor de texto ou IDE que estiver utilizando, além das extensões que tiver instalado para  a ferramenta, a tag ‘Funcionalidade: ‘ ficará em destaque,  como no exemplo acima.
  7. Escreva também uma descrição para a feature. É importante dizer do que se trata a funcionalidade, o perfil do cliente a que se aplica e os resultados esperados.
  8. Agora escreva os passos para  o cenário: Busca com sucesso
  9. Retorne ao site da loja e realize uma nova pesquisa informando palavra inexistente, como no exemplo:
  10. Agora retorne ao editor de textos/IDE e escreva mais um cenário para a nova situação observada:
  11. Perceba que o primeiro passo de ambos cenários está se repetindo, então, o ideal é que se escreva um bloco de passos de pré-condições para que não haja repetições dos passos na feature.
  12. Escreva a tag ‘Contexto‘, logo abaixo do bloco ‘Funcionalidade’. Agora copie o passo que repete para dentro do bloco de Contexto e os retire de dentro dos cenários.
    • Veja como ficou o resultado de nossa feature.
  13. Salve novamente o arquivo.

 


 

Pegue aqui a descrição do arquivo que criamos:

#language: pt-br
#encoding: utf-8
Funcionalidade: Buscar Produtos

Como cliente de uma loja virtual

Eu desejo buscar produtos eletrônicos

Para colocá-los em um carrinho e realizar compras
Contexto: Acesso ao site

Dado que acesso o site de compras
Cenário: Busca com sucesso

Quando realizo uma busca pelo produto "notebook lenovo ideapad"

Então o vejo no resultado da consulta
Cenário: Busca sem resultado

Quando realizo uma busca pelo produto "qualquer coisa"

Então a loja não encontra produtos relacionados

 

Vamos recapitular!!

 

Neste post aprendemos:

  • A origem da ferramenta Cucumber e sua sintaxe, o Gherkin;
  • Para que serve a ferramenta Cucumber e como instalá-la;
  • O fluxo de atividades no desenvolvimento de produtos com BDD;
  • Como escrever features para testes automatizados de ATDD, utilizando Ruby e Cucumber.

 

Em um dos próximos posts desta série, você vai aprender as demais etapas do fluxo de atividades de BDD citadas neste post:

  •  Descrever Funcionalidades
  •  Executar cenários

 

 

Referências:

https://cucumber.io/docs

https://www.infoq.com/news/2018/04/cucumber-bdd-ten-years/

https://www.tutorialspoint.com/behavior_driven_development/behavior_driven_development_tools.htm

http://www.eliasnogueira.com/bdd-nao-e-automacao-de-testes/

https://medium.com/@cleverti/how-to-implement-a-test-strategy-using-bdd-6965b43daa70

https://www.ruby-lang.org/en/documentation/installation/

https://tecadmin.net/install-ruby-on-rails-on-ubuntu

http://www.akitaonrails.com/2009/2/2/entendendo-rubygems

https://rubygems.org/gems/cucumber/versions/3.1.2

Deixe um comentário

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

Logotipo do WordPress.com

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

Foto do Google

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

Imagem do Twitter

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

Foto do Facebook

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

Conectando a %s