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: truesource "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.
That’s all folks