02/04/2018

Primeiros passos para automatizar usando BDD com Cucumber e Watir

Antes de começarmos a codar, vamos a uma explicação rápida.

BDD

BDD(Behavior drive development) é uma metodologia que visa integrar a regra de negócio com a linguagem de programação. Com o BDD você pode descrever toda a documentação do software por meio de cenários e ao mesmo tempo você automatiza, ganhando uma documentação executável.

Com o BDD você tem

  • Especificação por exemplo
  • Alinha o negócio com a tecnologia
  • Gera uma documentação viva (sempre atualizada e executável)

O vocabulário do BDD tem a base do gherkin. Gherkin é uma linguagem que foi criada especialmente para descrições de comportamento.

O arquivo gherkin consiste em:

Cucumber

O cucumber é framework em ruby que suporta BDD, o cucumber entende as frases escrita em Gherkin e as transforma em “steps”, cada frase vira um bloco de código e dentro de cada um você pode colocar o código.

Watir

O Watir é um framework escrito em ruby e baseado em selenium, ele te ajuda a testar aplicações web.

Agora sim estamos pronto para começar a brincadeira.

Pré-requisitos

Ruby — (linux)

$ sudo apt-get update
$ sudo apt-get upgrade

Instale as dependências

$ sudo apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev

Instale o Rbenv

$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

agora reinicie o terminal de comando e veja a versão do rbenv com o comando rbenv -v .

Instalando Ruby

$ rbenv install 2.3.3
$ rbenv global 2.3.3

Ruby — (Windows)

Acesse o site https://rubyinstaller.org/downloads/ e instale 2.3.3 (essa versão é a melhor, ao meu ver).

Após instalado, baixe o devkit que está na mesma página.

Extraia o devkit para dentro da pasta do ruby, crie uma pasta chamada devkit. Via cmd entre na pasta do devkit e execute o comando ruby dk.rb init.

Esse comando vai criar um arquivo config.yml, la dentro passe o caminho do ruby, desta forma:

- C:/ruby23

Volte ao cmd e execute o comando ruby dk.rb install

Ruby — (Mac)

Vamos instalar o rbenv via homebrew

Caso não tenha o homebrew na sua maquina, entre no site https://brew.sh/ e siga as instruções.

$ brew install rbenv

Execute o comando rbenv init e siga os passos que vai aparecer no terminal para poder setar o rbenv

Agora feche o terminal e abra novamente.

Instalando Ruby

$ rbenv install 2.3.3
$ rbenv global 2.3.3

Gems

Vamos começar pelo bundler e cucumber

gem install bundler cucumber

Após essas duas gems instaladas vamos criar a nossa pasta aonde vai ficar os testes.

Dentro da pasta execute o comando cucumber --init

$ cucumber --init
create features
create features/step_definitions
create features/support
create features/support/env.rb

Vamos criar o Gemfile, execute o comando bundle init

$ bundler init
Writing new Gemfile to C:/<path>/Gemfile

Com o Gemfile criado iremos colocar as nossas gems

# frozen_string_literal: true
source "https://rubygems.org"
gem "watir"
gem "cucumber"
gem "rspec"

Salve e execute o comando bundle install

ChromeDriver

(Linux)

  • Instale Unzip

sudo apt-get install unzip

  • Assumindo que você esteja rodando em x64, vamos instalar o chromedriver_linux64
$ wget -N https://chromedriver.storage.googleapis.com/2.33/chromedriver_linux64.zip -P ~/Downloads

$ unzip ~/Downloads/chromedriver_linux64.zip -d ~/Downloads

$ chmod +x ~/Downloads/chromedriver

$ sudo mv -f ~/Downloads/chromedriver /usr/local/share/chromedriver

$ sudo ln -s /usr/local/share/chromedriver /usr/local/bin/chromedriver

$ sudo ln -s /usr/local/share/chromedriver /usr/bin/chromedriver

(windows)

Faça o download do chromedriver no site ChromeDriver

De forma simples, extraia o arquivo chromedriver e jogue no seu system32.

(Mac)

$ brew install chromedriver

Com tudo instalado, vamos dar inicio a criação das nossas features

Dentro da pasta features, crie um arquivo login.feature

Coloque esse exemplo no arquivo e execute $ cucumber

 

Veja que quando executamos esse comando, o que o cucumber retorna é que existe 1 cenário indefinido e 3 steps indefinidas. O bom do cucumber é que logo abaixo ele traz a suas steps, basta você colocar elas em um arquivo .rb dentro da pasta features/step_definitions/

 

Execute o comando novamente e veja o resultado, ele vai mostrar que existe steps pendentes.

Vamos ao env.rb e começar a dar vida a tudo isso.

Use o pry para poder ir fazendo o passa-a-passo do watir

Pry

Execute o comando $ gem install pry para instalar o interpretador do ruby, as vantagens de se usar o pry é que ele guarda histórico do que você digitou, assim facilitando o desenvolvimento.

Tem uma dica interessante para usar o pry. Se você usar o comando $ pry --noprompt vai abrir o interpretador sem contador de linhas e dessa forma fica melhor de você copiar o código que esta fazendo e colocar na sua automação.

Realizando um login no site Centauro.com.br

Execute o $ cucumber veja o resultado

Agora vamos fazer mais um cenário no mesmo arquivo.

O teste é com um usuário inválido

Você deve ter percebido que agora a funcionalidade tem uma tag e cada cenário também. Isso nos ajuda a especificar qual teste vamos querer rodar quando executarmos o cucumber.

Para executar um cenário especifico use as tags desta forma $ cucumber --tags @invalido com esse comando o cenário que vai ser testado é o cenário: Login Usuário inválido

Agora temos um impasse, quando formos rodar o cucumber para ele testar todos os cenários vai existir um cache e cookie do browser que ira fazer ele falhar, pois quando rodar o primeiro cenário o usuário vai se logar e no segundo cenário que é para validar se o usuário não loga ele vai dar erro pois vai ter um redirecionamento.

Vamos criar no support um arquivo chamado hooks.rb, nele vamos colocar um código que a cada cenário ele vai limpar os cookies do browser, isso vai nos ajudar muito.

Agora rode novamente e veja o resultado.

Com tudo isso configurado, você ja pode começar a automatizar.

Até a próxima!