Blog > Automação de Testes com Capybara, RSpec e Poltergeist (Parte 1): Introdução

20/jan

Neste post iremos conhecer os conceitos e principais características do Capybara, um framework de automação de testes web, e do Poltergeist, um driver que permite a execução de testes browsers headless. Veremos também como o RSpec, framework para criação de testes dirigidos por comportamento, pode auxiliar na estruturação dos testes.

Capybara

Capybara é um framework de automação de testes em aplicações web, open-source, e escrito em Ruby. É utilizado para testar as aplicações simulando as ações que os usuários reais executariam na aplicação. Para utilizar o Capybara é necessário ter instalado o Ruby versão igual ou superior a 1.9.3. 

A instalação do Capybara se dá através do comando abaixo:

gem install capybara

A simulação das ações dos usuários é realizada a partir da utilização de Drivers, que são frameworks que controlam navegadores ou que simulam a execução dos mesmos em memória, tornando mais rápida a execução dos testes. Algumas ações simuladas seriam, por exemplo: Acessar URLs, Clicar, Preencher campos, Verificar se valores foram apresentados na tela, etc.

Vemos abaixo alguns comandos do Capybara utilizados para simular as ações dos usuários:

Comando Descrição Exemplo
visit Acessar uma URL visit "http://www.qualister.com.br/"
click_on Clica sobre um link, botões do tipo "submit" ou "button" click_on "Entrar"
fill_in Adiciona um texto a um elemento ou campo fill_in "login", with: "julio.lima"
has_content? Verifica se um texto está sendo apresentado em um elemento page.has_content?("Júlio de Lima")
visible? Verifica se um elemento está visível find(".msg_sucesso").visible?

Os comandos são uma linguagem de domínio específico do framework Capybara, desta forma, ao substituir o driver, os comandos não mudam.

Por padrão, o driver utilizado pelo Capybara é o RakeTest, driver usado para testar aplicações que possuem interface Rake (Rails, Sinatra e outros Frameworks Ruby), escrito puramente em Ruby. Um driver rápido, mas limitado, pois não há suporte a Javascript e nem a aplicações que não possuem interface Rake. 

Poltergeist

Poltergeist é um driver que permite que você rode seus testes em browsers headless. Possui suporte a Javascript e tem suporte a aplicações sem e com interface Rake, uma vantagem sobre os demais drivers, e por isso, este driver será abordado neste post.

Para utilizar este framework é necessário substituir o driver RakeTest pelo Poltergeist, e como vimos na seção anterior, não é necessário alterar os comandos de interação entre o usuário e a aplicação que foram adicionados ao script de teste.

Instale o Poltergeist através do comando abaixo:

gem install poltergeist

Para utilizar o driver Poltergeist em seus scripts Capybara basta adicionar a chamada ao framework, como mostra o comando abaixo:

require 'capybara/poltergeist'

Capybara.default_driver    = :poltergeist
Capybara.javascript_driver = :poltergeist

RSpec

RSpec é um framework BDD (Behavior-Driven Development), escrito em Ruby, utilizado para estruturar os testes em ordem comportamental, utilizando escrita em linguagem natural. A estruturação dos testes também poderia ser feita através de outros frameworks, como por exemplo: Cucumber, Test::Unit e MiniTest::Spec.

A estruturação dos scripts são feitas das seguinte forma:

describe "Funcionalidade" do

	before :each do
		Ação que será executada antes de cada "it"
	end

	it "Uma característica a ser testada" do
		Ações de teste e validações de resultados
	end

	it "Outra característica a ser testada" do
		Ações de teste e validações de resultados 
	end

end

A instalação do RSpec se dá através do comando abaixo:

gem install rspec

Para utilizar o RSpec em seus scripts é necessário adicionar a requisição à biblioteca, conforme comando abaixo:

require 'capybara/rspec'

Exemplo usando Capybara, RSpec e Poltergeist

No exemplo abaixo iremos fazer login na aplicação modelo da Qualister, o QuickLoja. Os passos de execução do script são:

Acessar a aplicação com dados válidos

  1. Acessar a URL do QuickLoja;
  2. Informar os dados de acesso do usuário;
  3. Clicar no botão "Entrar";
  4. Verificar se o texto "QuickLoja" foi apresentado.
# encoding: utf-8

require 'capybara/rspec'
require 'capybara/poltergeist'

Capybara.default_driver    = :poltergeist
Capybara.javascript_driver = :poltergeist

describe "Acessando a tela de login", :type => :feature do
  before :each do
    visit 'http://www.qualister.net/quickloja'
  end
  it "com dados válidos, ao submeter o formulário, vejo o texto 'Qualister'" do
   	fill_in "Login", with: "quickloja"
	fill_in "Senha", with: "123"
	click_on "Entrar"
	page.has_content?('Qualister').should be_true
  end
end

Detalhamento do script

# encoding: utf-8

Definindo que haverá caracteres latinos no script. Ex. á, ô, ç, etc.

require 'capybara/rspec'
require 'capybara/poltergeist'

Chamada aos frameworks Capybara, RSpec e Poltergeist

Capybara.default_driver = :poltergeist
Capybara.javascript_driver = :poltergeist

Definindo o driver Poltergeist como driver Padrão e Javascript

describe "Acessando a tela de login", :type => :feature do

Descrevendo a Funcionalidade

before :each do

Descrevendo um evento que ocorrerá antes de todos as características

visit 'http://www.qualister.net/quickloja'

Acessar a URL do QuickLoja

it "com dados válidos, ao submeter o formulário, vejo o texto 'Qualister'" do 

Descrevendo uma característica que deve ser testada

fill_in "Login", with: "quickloja" 
fill_in "Senha", with: "123" 

Preenchendo os valores nos campos que possuem os labels 'Login' e 'Senha'

click_on "Entrar" 

Clicando no botão que possui o texto 'Entrar'

page.has_content?('Qualister').should be_true

Verificando se o nome do usuário 'Qualister' foi apresentado na página

Executando o script

A execução do script é realizada através de um comando no diretório do projeto:

rspec spec --format documentation

O resultado obtido a execução é o seguinte:

Vemos que o retorno da execução dos passos é algo semelhante à uma documentação em linguagem natural, uma das grandes vantagens em utilizar esse grupo de frameworks.

Fontes

https://github.com/jonleighton/poltergeist

https://github.com/jnicklas/capybara/blob/master/R...

http://pt.slideshare.net/bsbodden/rspec-and-capyba...

POSTS RELACIONADOS

AGENDA

CURSOS RELACIONADOS