SlideShare uma empresa Scribd logo
1 de 132
Baixar para ler offline
Alex Warmling | alex@chaordic.com.br
Fausto Siqueira | siqueira@chaordic.com.br
Automação de testes Web
Ruby + Watir + Test::Unit + PageObject
Agenda
● Apresentação
● Expectativas
● Introdução ao teste de software
● Automação de testes, o que devo automatizar?
● Instalando o Ruby
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
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
Expectativas
Apresentação dos
participantes
● Trabalha em ambiente ágil ou tradicional?
● É QA?
● Sua equipe escreve testes unitários?
● Sua equipe pratica TDD ou outra prática
test-driven?
Teste de software
Por que testar?
Por que testar?
Por que testar?
Por que testar?
Testes consistem na verificaçã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
● Encontrar e documentar 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
● Muitos bugs sã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
Custo de
correção
Então, testando
eliminamos
todos os
defeitos?
Segundo MYERS (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
“Qualidade não é uma
fase do ciclo de
desenvolvimento de
software, é parte de
todas as fases”
Quando testar?
Quando testar?
Durante todo o ciclo de vida.
Quando testar?
Como faço para
saber o 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.
Por que e o que
devo automatizar?
Vantagens de
test scripts
● Operações definidas
● Escopo definido
● Resultado esperado definido
● Testes manuais controlados
Vantagens de
test scripts
● Re-uso
● Documentação
● Evidências da execução
● Cálculo de métricas como cobertura de testes
Razões para
automatizar
● Testes manuais demoram muito
● Processos manuais são mais suscetíveis à erros
● Tester executa casos mais “criativos”
Razões para
automatizar
● Documentação ativa
● Testes guiando o código
● Cobertura de teste
Razões para
automatizar
● Escalabilidade de 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
Integração
contínua
● Área de Staging
● 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 -
Testes
candidatos ● Testes de regressão
● Re-teste de bugs
● Testes unitários
● Testes de aceitação
Integração
contínua
● Feedback contínuo para 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
Quadrantes
do teste ágil
fonte: lisacrispin.com
Candidatos à
automação
● Teste unitários
● Re-teste de bugs
● Testes de aceitação
● Formando suites de regressão
Testes
unitários
● Cenários básicos
● Common cases
● Happy paths / Negative paths
● Edge cases
● Bug fix -> automated re-test
● Cobertura > 90%
Frameworks
para testes
unitários
● xUnit
● JUnit
● TestNG
● Test::Unit
● MiniTest
Notações
fonte: http://www.mkyong.com/unittest/junit-4-vs-testng-comparison/
Test::Unit
● Implementação do framework xUnit para
Ruby
● Test::Unit::Assertions
○ assert
○ assert_equal
○ assert_not_equal
○ assert_raise
Um teste automático por 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
Testes de
aceitação
● Feedback contí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
Bug tracking
Adotar?
● Comunicação
● Agilidade em corrigir bugs
● Priorização para correções VS. novas funcionalidades
● Métricas
● Knowledge base
● Auditoria
● Evidências
Bug tracking
Adotar?
● Times distribuídos
● Grandes equipes
● Ferramenta de comunicação
● Rastreabilidade entre requisitos
● Bugs em produção
Bug tracking
Urgências
● Regressão falhando -> ALERTA VERMELHO
● Bugs em produção
● Bugs reportados pelo cliente
Desafios
● Atitude
● Coragem para codificar
● Conhecimento
● Curva de aprendizado
● Investimento inicial
● Não quer ser DEV
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
Instalação
Ruby em
Linux
● $ source /home/siqueira/.rvm/scripts/rvm
● Criar GemSet
○ $ rvm create gemset academia_chaordic
Instalação
Ruby em
Windows
● http://rubyinstaller.org/downloads
Instalação Watir-
Webdriver e
Test::Unit Gem
● Gemfile
source 'https://rubygems.org'
gem 'test-unit'
gem 'watir-webdriver’
● $ bundle install
Ruby
Ruby basics
Editor texto
Sublime Text
Tudo em RUBY é
um OBJETO
IRB
● Interpretador Ruby
$ irb
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
Classes e
métodos
Require
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 $
Strings
Operações
Soma
Multiplicação
Strings
Concatenação e
Comparação
Concatenação
Comparação
de tamanho
Strings
Regex match
Match regex
Strings
Métodos
interessantes
capitalize
downcase
empty
gsub
Interpolação
de Strings
Curiosidades
Imprimindo
na tela
● puts ‘Academia Chaordic’
● print ‘Academia Chaordic’
Array
● a = Array.new
● b = [ ]
● a = [ 1, 2, 3 ]
● b = [ 1, 3, 4 ]
Array push & pop
● a.push 4
● a.pop
● a.pop 2
a << 4
Array shift
● a.shift
● a.unshift 0
Array
adição e
subtração
Subtração
Adição
Array index
Range inclusivo e
exclusivo
Ìndices
Range inválido
Array
deletion
delete_at
delete
Array
methods
Desafio
Encontre o tamanho das Strings
"test",
"ruby_r0x",
"academia_chaordic"
Pode-se usar um Array e o
método collect
Desafio
Encontre o tamanho das Strings
["test", "ruby_r0x", "academia_chaordic"].collect{
|string| string.length }
=> [ 4, 8, 17 ]
Desafio 2
Somar os números
1 ,3 ,5 ,7 ,9 ,11 ,13
Pode-se usar um Array e o
método inject
Desafio 2
Somar os números
# Sum 1,3,5,7,9,11,13
[1,3,5,7,11,13].inject { |a,b| a+b }
Condicionais
● if...else
if conditional [then]
code...
[elsif conditional [then]
code...]...
[else
code...]
end
Condicionais
● if...else
Condicionais
● unless
Loops
● while
Loops
● while
Loops
● until
Loops
● for
● each
Loops
● break
File I/O
● handle
File I/O
● Imprima em um arquivo o maior e o menor valor de
um array com 10 números inteiros
● Aqui você pode utilizar os conceitos de Array, if e
for
Web Application Testing in Ruby
Automate your web browser
beautifully, nicely and
easily with some very sweet
syntactic sugar.
What is Watir?
● Open-source web test automation framework
● Bibliotecas Ruby
● Independente de tecnologia da app
● Simula input de usuário no navegador
Watir drives browsers the
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
Watir-classic
● Somente Internet Explorer
● 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
Watir-webdriver
● Versão moderna da API Watir baseada em Selenium
2.0 com WebDriver
● Jari Bakken implementou
● Construída a partir da especificação HTML
● W3C compatível
Watij
● Web Application Testing in Java
● Simplicidade do Watir com poder do Java
● Pode-se usar JRuby e o interpretador IRB
Vantagens
● Comunidade ativa
● Ruby nativa
● Suporte a multiplos browsers
● Poderosa, leve e fácil de utilizar
● Sem gravadores - Test records
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
Vantagens
● Fácil de lidar com iFrames
● Utilizar com rubygem PageObject
● Possível medir performance da página com Watir-
WebDriver-Performance gem
Wait explícitos
Watir::Wait.until { code block }
object.when_present.method
object.wait_until_present.method
object.wait_while_present.method
Wait explícitos
Wait implícitos
require 'watir-webdriver'
browser = Watir::Browser.new
browser.driver.manage.timeouts.implicit_wait = 3
● Teste pode se tornar mais devagar
● “Vício do uso” polui código
Cookies
add (name, value, opts = {})
cookie.clear
cookies.delete (name)
cookies.to_a
iFrames
browser.frame(: => “content_ifr”).button(:id => ‘button_01’).
click
Js alerts();
browser.alert.ok
browser.alert.exists?
browser.alert.text
browser.alert.close
Element
presence
● exists?
● visible?
● present?
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
Performance
● Measure page performance 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.”
Performance
● Measure page performance gem
LOC
● Lines of Code comparison
● Selenium WebDriver VS. Watir WebDriver
Selenium
WebDriver
Selenium
WebDriver
Watir
WebDriver
Chaordic Mindset to write
your Automated scripts
Testing your script
Cenários
de Aceitação
1. Usuário do ecommerce
fastshop.com.br quer colocar um
produto no carrinho e calcula o
frete
● Quais seriam as validações a
serem feitas?
Test::Unit
xUnit family test automation
framework for Ruby
● assert_block
● assert
● assert_equal
● assert_not_nil (exp, msg)
● assert_no_match (regexp, string, msg)
● assert_equal (expected, actual, msg)
http://rubydoc.info/gems/test-unit/2.5.5/frames
● assert_compare (1, “<”, 10)
● assert_inclue ([1..10, 2, msg)
● assert_equal (expected, actual, msg)
http://www.ruby-doc.org/stdlib-2.1.2
/libdoc/test/unit/rdoc/Test/Unit/Assertions.html
● Setup and Teardown
● Test suite
● Test case
● Helpers
● Wireframe = Maps web UI elements
● Devs do homework = IDs
● QA creates a class (model) for the page
● Model will support testing
● DRY
● Easy API
● Implementa o padrã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.”
● 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
● A Simple way 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
● Accessors
http://rubydoc.info/github/cheezy/page-
object/master/PageObject/Accessors
● Element return
● Checkbox
Acessors
auto
methods
● Button
● Link
Acessors
auto
methods
example
class
script class
UI
elements
naming
update
script class
Links úteis
● Ruby
○ http://www.tutorialspoint.com/ruby/
○ https://www.ruby-toolbox.com
○ https://github.com/watir/watir/wiki/Cheat-Sheet-for-Ruby
● Watir Webdriver
○ http://watirwebdriver.com/
○ http://www.hiretheworld.com/blog/tech-blog/migrating-unit-tests-
from-selenium-to-watir-webdriver
○ http://en.wikipedia.org/wiki/Watir#Watir-webdriver
○ https://github.com/watir/watir/wiki/HTML-Elements-Supported-by-
Watir
● PageObject
○ http://www.cheezyworld.com/2011/07/29/introducing-page-object-
gem/
○ http://martinfowler.com/bliki/PageObject.html
● Integração Contínua
○ http://en.wikipedia.
org/wiki/Comparison_of_continuous_integration_software
Alex Warmling | alex@chaordic.com.br
Fausto Siqueira | siqueira@chaordic.com.br

Mais conteúdo relacionado

Mais procurados

Gestão de Projeto de Desenvolvimento Agil(XP)
Gestão de Projeto de Desenvolvimento Agil(XP)Gestão de Projeto de Desenvolvimento Agil(XP)
Gestão de Projeto de Desenvolvimento Agil(XP)
elliando dias
 

Mais procurados (20)

Groovy grails
Groovy grailsGroovy grails
Groovy grails
 
Jenkins com SonarQube
Jenkins com SonarQubeJenkins com SonarQube
Jenkins com SonarQube
 
13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver
13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver
13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver
 
[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)
[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)
[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)
 
Do commit à produção: integração contínua e entrega contínua no pipeline de i...
Do commit à produção: integração contínua e entrega contínua no pipeline de i...Do commit à produção: integração contínua e entrega contínua no pipeline de i...
Do commit à produção: integração contínua e entrega contínua no pipeline de i...
 
Oficina groovy grails - infoway
Oficina  groovy grails - infowayOficina  groovy grails - infoway
Oficina groovy grails - infoway
 
Android Studio: Primeiros Passos
Android Studio: Primeiros PassosAndroid Studio: Primeiros Passos
Android Studio: Primeiros Passos
 
Introdução ao vraptor
Introdução ao vraptorIntrodução ao vraptor
Introdução ao vraptor
 
Começando com React.js
Começando com React.jsComeçando com React.js
Começando com React.js
 
Selenium
SeleniumSelenium
Selenium
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
 
Dividindo responsabilidades com VRaptor, Rest, HTML5 e CSS3
Dividindo responsabilidades com VRaptor, Rest, HTML5 e CSS3Dividindo responsabilidades com VRaptor, Rest, HTML5 e CSS3
Dividindo responsabilidades com VRaptor, Rest, HTML5 e CSS3
 
Praticando o Desapego: quando ignorar a dívida técnica
Praticando o Desapego: quando ignorar a dívida técnicaPraticando o Desapego: quando ignorar a dívida técnica
Praticando o Desapego: quando ignorar a dívida técnica
 
Ruby para testers III - Selenium
Ruby para testers III - SeleniumRuby para testers III - Selenium
Ruby para testers III - Selenium
 
Aprendendo Angular com a CLI
Aprendendo Angular com a CLIAprendendo Angular com a CLI
Aprendendo Angular com a CLI
 
GDG Angular 2
GDG Angular 2GDG Angular 2
GDG Angular 2
 
Selenium ide apresentação
Selenium ide   apresentaçãoSelenium ide   apresentação
Selenium ide apresentação
 
Gestão de Projeto de Desenvolvimento Agil(XP)
Gestão de Projeto de Desenvolvimento Agil(XP)Gestão de Projeto de Desenvolvimento Agil(XP)
Gestão de Projeto de Desenvolvimento Agil(XP)
 
Testando aplicações Flex com Selenium
Testando aplicações Flex com SeleniumTestando aplicações Flex com Selenium
Testando aplicações Flex com Selenium
 
Ruby para testers I
Ruby para testers IRuby para testers I
Ruby para testers I
 

Semelhante a AutomaçãoWeb - Chaordic Academy

Qualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALMQualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALM
Adriano Bertucci
 

Semelhante a AutomaçãoWeb - Chaordic Academy (20)

Importância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsImportância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOps
 
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
 
Introdução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade IIntrodução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade I
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junit
 
Be React. Do Tests!
Be React. Do Tests!Be React. Do Tests!
Be React. Do Tests!
 
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
 
Teste de software
Teste de softwareTeste de software
Teste de software
 
Qualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALMQualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALM
 
Test-Driven Development with PHP
Test-Driven Development with PHPTest-Driven Development with PHP
Test-Driven Development with PHP
 
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
 
Testes Funcionais - Unidade IV
Testes Funcionais - Unidade IVTestes Funcionais - Unidade IV
Testes Funcionais - Unidade IV
 
[Uff] Continuous Delivery: Entrega Contínua de Software de Valor
[Uff] Continuous Delivery: Entrega Contínua de Software de Valor[Uff] Continuous Delivery: Entrega Contínua de Software de Valor
[Uff] Continuous Delivery: Entrega Contínua de Software de Valor
 
TDC2018FLN | Trilha Arquitetura - Elixir Umbrella - Aplicacoes desacopladas s...
TDC2018FLN | Trilha Arquitetura - Elixir Umbrella - Aplicacoes desacopladas s...TDC2018FLN | Trilha Arquitetura - Elixir Umbrella - Aplicacoes desacopladas s...
TDC2018FLN | Trilha Arquitetura - Elixir Umbrella - Aplicacoes desacopladas s...
 
Testando sua aplicação asp.net mvc de forma automatizada de ponta a ponta
Testando sua aplicação asp.net mvc de forma automatizada de ponta a pontaTestando sua aplicação asp.net mvc de forma automatizada de ponta a ponta
Testando sua aplicação asp.net mvc de forma automatizada de ponta a ponta
 
4° Encontro Mensal ALATS: Automação de Teste - Mitos e Verdades
4° Encontro Mensal ALATS: Automação de Teste - Mitos e Verdades4° Encontro Mensal ALATS: Automação de Teste - Mitos e Verdades
4° Encontro Mensal ALATS: Automação de Teste - Mitos e Verdades
 
TDC 2016 Trilha Testes - Floripa
TDC 2016 Trilha Testes - FloripaTDC 2016 Trilha Testes - Floripa
TDC 2016 Trilha Testes - Floripa
 
GOTEST-Aula3-Automacao-Processo-Testes.pdf
GOTEST-Aula3-Automacao-Processo-Testes.pdfGOTEST-Aula3-Automacao-Processo-Testes.pdf
GOTEST-Aula3-Automacao-Processo-Testes.pdf
 
Strider CD - Deploy Contínuo com JavaScript
Strider CD -  Deploy Contínuo com JavaScriptStrider CD -  Deploy Contínuo com JavaScript
Strider CD - Deploy Contínuo com JavaScript
 
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosParalelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 

AutomaçãoWeb - Chaordic Academy