Testes In Browser Em Rails Com Capybara E Webdriver

23
TESTES IN-BROWSER EM RAILS COM CAPYBARA E WEBDRIVER Maurício Linhares [email protected]

description

Apresentação sobre testes utilizando Rails, Capybara, WebDriver e Cucumber. Palestra apresentada originalmente no OxenteRails 2010.

Transcript of Testes In Browser Em Rails Com Capybara E Webdriver

Page 1: Testes In Browser Em Rails Com Capybara E Webdriver

TESTES IN-BROWSER EM

RAILS COM CAPYBARA E

WEBDRIVER

Maurício Linhares – [email protected]

Page 2: Testes In Browser Em Rails Com Capybara E Webdriver

Quem?

Maurício Linhares

João Pessoa, terra que o sol nasce primeiro

Ruby e Java developer;

Page 3: Testes In Browser Em Rails Com Capybara E Webdriver

De Onde?

Page 4: Testes In Browser Em Rails Com Capybara E Webdriver

Testes “in-browser” em Rails – A.C.

Page 5: Testes In Browser Em Rails Com Capybara E Webdriver

A.C. – Antes do Capybara

Teste na mão chamando o Selenium RC;

Surge o WebRat que funciona quando acha que

deve e ainda chamando o Selenium RC;

Timeouts, loops eternos, browser que não abre...;

Page 6: Testes In Browser Em Rails Com Capybara E Webdriver

Selenium RC

Page 7: Testes In Browser Em Rails Com Capybara E Webdriver

Selenium RC

Lento;

WebServer em Java que de lá controla o

navegador como um controle remoto (remote

control);

Se você está do lado Java, é tudo uma maravilha,

se não, pois é...

Page 8: Testes In Browser Em Rails Com Capybara E Webdriver

Selenium original

Selenium original era escrito em JavaScript;

Browsers são muito chatos no que JavaScript pode

fazer ou não (como se você não soubesse disso);

Lento (engines de JS antigas) e muita coisa ficava

de fora;

Page 9: Testes In Browser Em Rails Com Capybara E Webdriver

Selenium 2 - WebDriver

Escrito utilizando a forma nativa do browser de ser

controlado:

Plugin no Firefox;

Automation tools no IE;

Fast! Fast! Fast!

API orientada a objetos e simplificada;

Page 10: Testes In Browser Em Rails Com Capybara E Webdriver

D.C. – Depois do Capybara

Como Webrat, mas com WebDriver já integrado e

utilizado por padrão;

Sintaxe praticamente igual a dos testes antigos

escritos com Webrat;

Está virando a opção padrão pra testes “in-

browser” pra apps Rails com Cucumber;

Page 11: Testes In Browser Em Rails Com Capybara E Webdriver

DEMO

Page 12: Testes In Browser Em Rails Com Capybara E Webdriver

Montando a fábrica de objetos

Dado /^que (?:o|os|a|as) seguint(?:e|es) (.+)

exist(?:e|em):$/ do |nome, table|

table.hashes.each do |hash|

Factory( nome.singularize, hash )

end

end

Page 13: Testes In Browser Em Rails Com Capybara E Webdriver

Preenchendo um formulário de login

# language: pt

Funcionalidade: Fazer login do usuário

Como usuário do sistema

Eu quero me autenticar no mesmo

Para poder acessar meu carrinho de compras

Cenário: Fazer login

Dado que o seguinte usuario existe:

| nome | email | senha | senha_confirmation |

| José da Silva | [email protected] | 123456 | 123456 |

E que estou na página de login

Quando preencho "email" com "[email protected]"

E preencho "senha" com "123456"

E pressiono "Enviar"

Então devo ver "Seja bem vindo a nossa loja, José da Silva"

E devo estar na listagem de produtos

Page 14: Testes In Browser Em Rails Com Capybara E Webdriver

features/support/paths.rb

def path_to(page_name)

case page_name

when /página inicial/

'/'

when 'listagem de produtos'

produtos_path

when 'página do carrinho'

itens_path

else

raise_path_error( page_name )

end

end

Page 15: Testes In Browser Em Rails Com Capybara E Webdriver

Cadastrando um usuário

# language: pt

Funcionalidade: Cadastrar um usuário no sistema

Como usuário do sistema

Eu quero ser capaz de criar uma conta no mesmo

Para poder me identificar e fazer meus pedidos

Cenário: Cadastro com sucesso

Dado que estou na página de cadastro de usuário

Quando preencho "usuario[nome]" com "Marcos Silva"

E preencho "usuario[email]" com "[email protected]"

E preencho "usuario[senha]" com "123456"

E preencho "usuario[senha_confirmation]" com "123456"

E marco "usuario[termos_e_condicoes]"

E pressiono "Enviar"

Então devo ver "Dados recebidos com sucesso"

E devo estar na listagem de produtos

Page 16: Testes In Browser Em Rails Com Capybara E Webdriver

Testando chamadas Ajax

# language: pt

@javascript

Funcionalidade: Adicionar e remover itens do carrinho

Como usuário do sistema

Eu quero adicionar e remover itens ao carrinho

Para ser capaz efetuar compras

Contexto:

Dado que os seguintes produtos existem:

| nome | preco |

| Agile Estimating and Planning | 30.00 |

| Lean Software Development | 25.00 |

Page 17: Testes In Browser Em Rails Com Capybara E Webdriver

@javascript

Capybara usa tags do Cucumber para marcar se a suafuncionalidade precisa ser testada com JavaScript ou não;

Não é necessário ter os arquivos em pastas separadas nemimplementar steps de forma diferente;

Você deve instalar a gem “database_cleaner” para que o banco de dados seja limpo;

O próprio Capybara inicia um servidor e abre o navegadorpra fazer o serviço;

Page 18: Testes In Browser Em Rails Com Capybara E Webdriver

Adicionando itens ao carrinho

Cenário: Adicionar item ao carrinho

Dado que estou na listagem de produtos

Quando adiciono "5" itens do produto "Lean Software Development" ao carrinho

Então devo ver "Lean Software Development - 5"

Page 19: Testes In Browser Em Rails Com Capybara E Webdriver

Step específico

Quando /^adiciono "([^\"]*)" itens do produto "([^\"]*)" ao carrinho$/ do |quantidade, nome|

produto = Produto.find_by_nome( nome )

Quando "preencho \"quantidade\" com \"#{quantidade}\" em \"#produto_#{produto.id}\""

Quando "pressiono \"Adicionar\" em \"#produto_#{produto.id}\"“

end

Page 20: Testes In Browser Em Rails Com Capybara E Webdriver

Removendo itens do carrinho

Cenário: Remover itens do carrinho

Dado que estou na listagem de produtos

E adiciono "5" itens do produto "Lean Software Development" ao carrinho

E adiciono "5" itens do produto "Agile Estimating and Planning" ao carrinho

Quando vou pra página do carrinho

E removo o produto "Agile Estimating and Planning" do carrinho

Entao devo ver "Lean Software Development“

Mas não devo ver "Agile Estimating and Planning"

Page 21: Testes In Browser Em Rails Com Capybara E Webdriver

Step específico

Quando /^removo o produto "([^"]*)" do carrinho$/ do |nome|

produto = Produto.find_by_nome( nome )

Quando "clico em \"Remover produto\" em \"#produto_#{produto.id}\"“

end

Page 22: Testes In Browser Em Rails Com Capybara E Webdriver

Usando Chrome como navegador

padrão

Capybara::Driver::Selenium.class_eval do

def self.driver

unless @driver

@driver = Selenium::WebDriver.for :chrome

at_exit do

@driver.quit

end

end

@driver

end

end