Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Testes In Browser Em Rails Com Capybara E Webdriver

7,980 views

Published on

Apresentação sobre testes utilizando Rails, Capybara, WebDriver e Cucumber.

Palestra apresentada originalmente no OxenteRails 2010.

Published in: Technology
  • Be the first to comment

Testes In Browser Em Rails Com Capybara E Webdriver

  1. 1. TESTES IN-BROWSER EM RAILS COM CAPYBARA E WEBDRIVER Maurício Linhares – mauricio.linhares@gmail.com
  2. 2. Quem?  Maurício Linhares  João Pessoa, terra que o sol nasce primeiro  Ruby e Java developer;
  3. 3. De Onde?
  4. 4. Testes “in-browser” em Rails – A.C.
  5. 5. 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...;
  6. 6. Selenium RC
  7. 7. 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 é...
  8. 8. 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;
  9. 9. 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;
  10. 10. 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;
  11. 11. DEMO
  12. 12. 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
  13. 13. 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 | jose@silva.com | 123456 | 123456 | E que estou na página de login Quando preencho "email" com "jose@silva.com" 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
  14. 14. 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
  15. 15. 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 "marcos.silva@email.com" 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
  16. 16. 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 |
  17. 17. @javascript  Capybara usa tags do Cucumber para marcar se a sua funcionalidade precisa ser testada com JavaScript ou não;  Não é necessário ter os arquivos em pastas separadas nem implementar 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 navegador pra fazer o serviço;
  18. 18. 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"
  19. 19. 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
  20. 20. 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"
  21. 21. 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
  22. 22. 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
  23. 23. Referências  Cucumber - http://wiki.github.com/aslakhellesoy/cucumber/  Capybara – http://github.com/jnicklas/capybara  Projeto de Exemplo - http://github.com/mauricio/linuxfi-loja  @mauriciojr

×