Este documento apresenta uma introdução à automação de testes web usando Ruby, Watir e Test::Unit. Ele discute os benefícios da automação de testes, como instalar o Ruby, e demonstra como usar o Watir para automatizar testes no navegador.
Quem
somos
● Alex Warmling- alex@chaordic.com.br
○ 3+ anos de QA
○ Já atuou como DEV
○ Instrutor de teste de software no programa
GeraçãoTEC;
○ FullStack QA na Chaordic
4.
Quem
somos
● Fausto Siqueira- siqueira@chaordic.com.br
○ 8+ anos de QA
○ Trabalhou na EDS e IBM
○ Agile test lead na Chaordic
○ ISTQB Certified Foundation Level Tester
Apresentação dos
participantes
● Trabalhaem ambiente ágil ou tradicional?
● É QA?
● Sua equipe escreve testes unitários?
● Sua equipe pratica TDD ou outra prática
test-driven?
Testes consistem naverificação dinâmica do
funcionamento de um programa em um conjunto
finito de casos de teste, selecionado dentro de
domínio infinito de entradas, contra seu
funcionamento esperado (SWEBOK, 2004)
● Dinâmico – Execução
● Finito – Existem muitos casos de teste
● Selecionado – Técnicas diferem na
seleção
● Esperado – Funcionamento esperado
deve ser verificado
Definição
13.
● Encontrar edocumentar defeitos
● Fornecer base para percepção da qualidade do
software
● Avaliar se o produto de software funciona como
projetado e esperado
● Garantir que os problemas encontrados sejam
corrigidos
Objetivos
14.
● Muitos bugssão gerados e não são encontrados
quando o software ainda esta em desenvolvimento
● Com os sistemas para internet o número de usuários
é milhares de vezes maior
● Necessidade de equipes especializadas em testes
● O custo destes bugs se torna cada vez maior
Cenário atual
Então, testando
eliminamos
todos os
defeitos?
SegundoMYERS (1979), em seu livro The art of sotware
testing:
● Testes unitários podem remover de 30% a 50% dos
defeitos
● Testes de sistemas podem remover de 30% a 50%
dos defeitos remanescentes
● Revisão de código pode ainda reduzir entre 20% e
30% do restante
● Software em produção ainda com ~40% de defeitos
17.
“Qualidade não éuma
fase do ciclo de
desenvolvimento de
software, é parte de
todas as fases”
Como faço para
sabero que
testar primeiro
então?
● Identificar componentes e features do software a
serem testados:
○ Priorizar
○ Positivos/negativos
○ Os mais graves
○ Os mais prováveis
○ Falhas anteriores
○ …
● Considerar aspectos funcionais e não-funcionais
● Considerar tempo, recursos, riscos
● Nem tudo pode ser testado, e o que é testado não
pode ser completamente testado.
Razões para
automatizar
● Escalabilidadede execução de testes
● Repetição controlada
● Ambientes controlados e definidos
● Execução rápida e contínua, idealmente robusta
● Entra na Integração Contínua
28.
Integração
contínua
● Área deStaging
● Confiança para deploy
● Visibilidade sobre a integridade da build
● Regressão da aceitação evita quebra de regra de
negócios
Integração
contínua
● Feedback contínuopara a equipe DEV
● Feedback para área de negócios, testes de
aceitação
● Servidores de integração contínua
○ Jenkins Ci
■ Ci-reporter gem
○ Circle Ci
Um teste automáticopor re-
teste de bug fix evita a
recorrência do problema
Re-teste de
bugs
● Bug fix é validado com um teste script
automático
● Script é adicionado à suite de regressão
● Evitar recorrência de bugs é fundamental
38.
Testes de
aceitação
● Feedbackcontínuo para o cliente
● Visibilidade sobre o status do sistema
● Transparência com o cliente
● Documentação dinâmica e ativa
● Confiança
● Regressão
39.
Bug tracking
Adotar?
● Comunicação
●Agilidade em corrigir bugs
● Priorização para correções VS. novas funcionalidades
● Métricas
● Knowledge base
● Auditoria
● Evidências
40.
Bug tracking
Adotar?
● Timesdistribuídos
● Grandes equipes
● Ferramenta de comunicação
● Rastreabilidade entre requisitos
● Bugs em produção
Desafios
● Atitude
● Coragempara codificar
● Conhecimento
● Curva de aprendizado
● Investimento inicial
● Não quer ser DEV
43.
Instalação
Ruby em
Linux
● RVM- Ruby Version Manager
○ “RVM gives you compartmentalized independent
ruby setups. This means that ruby, gems and irb
are all separate and self-contained - from the
system, and from each other.”
● https://rvm.io/rvm/install
● Linux
$ curl -sSL https://get.rvm.io | bash -s stable --ruby
$ ruby -v
44.
Instalação
Ruby em
Linux
● $source /home/siqueira/.rvm/scripts/rvm
● Criar GemSet
○ $ rvm create gemset academia_chaordic
Comentários
● De linha
●De bloco
# for i in 0..5
# if i > 2 then
# break
# end
# puts "Valor da variavel local seria #{i}"
# end
=begin
for i in 0..5
if i > 2 then
break
end
puts "Valor da variavel local seria #{i}"
end
=end
Escopo de
variáveis
● Locais
a.Escopo de método
b. Variáveis locais começam com letra minúscula ou _.
● Instância:
a. Escopo de objeto.
b. Nome precedido por @
● Classe:
a. Escopo de classe.
b. Característica de uma classe.
c. Disponível para diferentes objetos.
d. Precedidas por @@
● Globais:
a. Disponível entre classes.
b. Nome precedido por $
Automate your webbrowser
beautifully, nicely and
easily with some very sweet
syntactic sugar.
86.
What is Watir?
●Open-source web test automation framework
● Bibliotecas Ruby
● Independente de tecnologia da app
● Simula input de usuário no navegador
87.
Watir drives browsersthe
same way people do. It
clicks links, fills in forms,
presses buttons. Watir also
checks results, such as
whether expected text
appears on the page. [watir.
com]
Re-teste de
bugs
88.
Watir-classic
● Somente InternetExplorer
● Manipula o navegador via OLE - Object Linking and
Embedding sobre a arquitetura COM - Component
Object Model
● IE -> serve objetos, expondo seus métodos
● Ruby -> cliente, manipula os objetos
89.
Watir-webdriver
● Versão modernada API Watir baseada em Selenium
2.0 com WebDriver
● Jari Bakken implementou
● Construída a partir da especificação HTML
● W3C compatível
90.
Watij
● Web ApplicationTesting in Java
● Simplicidade do Watir com poder do Java
● Pode-se usar JRuby e o interpretador IRB
91.
Vantagens
● Comunidade ativa
●Ruby nativa
● Suporte a multiplos browsers
● Poderosa, leve e fácil de utilizar
● Sem gravadores - Test records
92.
Vantagens
● Sem find_element(s)=== menos código;
● Specific methods (divs, buttons, links…);
Selenium: driver.find_element(:class, 'product-
title')
Watir: driver.div :class => ‘product-title’
● Explicit waits for AJAX (Selenium :timeout => 10)
● JavaScript alerts
93.
Vantagens
● Fácil delidar com iFrames
● Utilizar com rubygem PageObject
● Possível medir performance da página com Watir-
WebDriver-Performance gem
Exemplo
require 'watir-webdriver'
firefox =Watir::Browser.new :firefox
firefox.goto 'google.com'
firefox.text_field(:name => 'q').set 'chaordic'
firefox.button(:name => 'btnG').click
begin
firefox.links.each do |link|
link.click if link.href == 'http://www.chaordic.com.br/'
end
rescue Selenium::WebDriver::Error::StaleElementReferenceError
nil
end
firefox.quit
102.
Performance
● Measure pageperformance gem
“The Watir-WebDriver-Performance gem aims to
provide a set of navigation timing metrics for Watir-
WebDriver actions using a W3C page performance
standard. This is a perfect solution to capture
response time metrics, and it’s very straightforward
to do but currently only works in Chrome and IE9l, so
there’s no Firefox support.”
Cenários
de Aceitação
1. Usuáriodo ecommerce
fastshop.com.br quer colocar um
produto no carrinho e calcula o
frete
● Quais seriam as validações a
serem feitas?
● Implementa opadrão Page Object em Watir
WebDriver e Selenium WebDriver para Ruby
○ https://github.com/cheezy/page-object
Page Object
cheezy
gem
“...facilitate creating abstraction layers in your
tests to decouple the tests from the item they
are testing and to provide a simple interface to
the elements on a page.”
122.
● ATDD -Acceptance Testing Driven Development
● Linguagem simples para interagir com o conteúdo
da página web
● Integração fácil com rspec e cucumber
Page Object
cheezy
gem
123.
● A Simpleway of dealing with Frames and iFrames
● Robust way of dealing with Ajax Calls
● A clean way of handling Javascript Popups
● Support for most html Elements
Page Object
cheezy
gem