automaçãoweb - chaordic academy

132
Alex Warmling | alex@chaordic.com.br Fausto Siqueira | siqueira@chaordic.com.br Automação de testes Web Ruby + Watir + Test::Unit + PageObject

Upload: fausto-siqueira

Post on 12-Aug-2015

84 views

Category:

Documents


9 download

TRANSCRIPT

Page 1: AutomaçãoWeb - Chaordic Academy

Alex Warmling | [email protected] Siqueira | [email protected]

Automação de testes WebRuby + Watir + Test::Unit + PageObject

Page 2: AutomaçãoWeb - Chaordic Academy

Agenda

● Apresentação

● Expectativas

● Introdução ao teste de software

● Automação de testes, o que devo automatizar?

● Instalando o Ruby

Page 3: AutomaçãoWeb - Chaordic Academy

Quem somos

● Alex Warmling - [email protected]

○ 3+ anos de QA

○ Já atuou como DEV

○ Instrutor de teste de software no programa

GeraçãoTEC;

○ FullStack QA na Chaordic

Page 4: AutomaçãoWeb - Chaordic Academy

Quem somos

● Fausto Siqueira - [email protected]

○ 8+ anos de QA

○ Trabalhou na EDS e IBM

○ Agile test lead na Chaordic

○ ISTQB Certified Foundation Level Tester

Page 5: AutomaçãoWeb - Chaordic Academy

Expectativas

Page 6: AutomaçãoWeb - Chaordic Academy

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?

Page 7: AutomaçãoWeb - Chaordic Academy

Teste de software

Page 9: AutomaçãoWeb - Chaordic Academy

Por que testar?

Page 10: AutomaçãoWeb - Chaordic Academy

Por que testar?

Page 11: AutomaçãoWeb - Chaordic Academy

Por que testar?

Page 12: AutomaçãoWeb - Chaordic Academy

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

Page 13: AutomaçãoWeb - Chaordic Academy

● 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

Page 14: AutomaçãoWeb - Chaordic Academy

● 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

Page 15: AutomaçãoWeb - Chaordic Academy

Custo de correção

Page 16: AutomaçãoWeb - Chaordic Academy

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

Page 17: AutomaçãoWeb - Chaordic Academy

“Qualidade não é uma fase do ciclo de

desenvolvimento de software, é parte de

todas as fases”

Page 18: AutomaçãoWeb - Chaordic Academy

Quando testar?

Page 19: AutomaçãoWeb - Chaordic Academy

Quando testar?

Durante todo o ciclo de vida.

Page 20: AutomaçãoWeb - Chaordic Academy

Quando testar?

Page 21: AutomaçãoWeb - Chaordic Academy

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.

Page 22: AutomaçãoWeb - Chaordic Academy

Por que e o que devo automatizar?

Page 23: AutomaçãoWeb - Chaordic Academy

Vantagens de test scripts

● Operações definidas

● Escopo definido

● Resultado esperado definido

● Testes manuais controlados

Page 24: AutomaçãoWeb - Chaordic Academy

Vantagens de test scripts

● Re-uso

● Documentação

● Evidências da execução

● Cálculo de métricas como cobertura de testes

Page 25: AutomaçãoWeb - Chaordic Academy

Razões para automatizar

● Testes manuais demoram muito

● Processos manuais são mais suscetíveis à erros

● Tester executa casos mais “criativos”

Page 26: AutomaçãoWeb - Chaordic Academy

Razões para automatizar

● Documentação ativa

● Testes guiando o código

● Cobertura de teste

Page 27: AutomaçãoWeb - Chaordic Academy

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

Page 28: AutomaçãoWeb - Chaordic Academy

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

Page 29: AutomaçãoWeb - Chaordic Academy

Integração contínua - Testes candidatos ● Testes de regressão

● Re-teste de bugs

● Testes unitários

● Testes de aceitação

Page 30: AutomaçãoWeb - Chaordic Academy

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

Page 31: AutomaçãoWeb - Chaordic Academy

Quadrantes do teste ágil

fonte: lisacrispin.com

Page 32: AutomaçãoWeb - Chaordic Academy

Candidatos à automação

● Teste unitários

● Re-teste de bugs

● Testes de aceitação

● Formando suites de regressão

Page 33: AutomaçãoWeb - Chaordic Academy

Testes unitários

● Cenários básicos

● Common cases

● Happy paths / Negative paths

● Edge cases

● Bug fix -> automated re-test

● Cobertura > 90%

Page 34: AutomaçãoWeb - Chaordic Academy

Frameworks para testes unitários

● xUnit

● JUnit

● TestNG

● Test::Unit

● MiniTest

Page 35: AutomaçãoWeb - Chaordic Academy

Notações

fonte: http://www.mkyong.com/unittest/junit-4-vs-testng-comparison/

Page 36: AutomaçãoWeb - Chaordic Academy

Test::Unit

● Implementação do framework xUnit para

Ruby

● Test::Unit::Assertions

○ assert

○ assert_equal

○ assert_not_equal

○ assert_raise

Page 37: AutomaçãoWeb - Chaordic Academy

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

Page 38: AutomaçãoWeb - Chaordic Academy

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

Page 39: AutomaçãoWeb - Chaordic Academy

Bug tracking

Adotar?● Comunicação

● Agilidade em corrigir bugs

● Priorização para correções VS. novas funcionalidades

● Métricas

● Knowledge base

● Auditoria

● Evidências

Page 40: AutomaçãoWeb - Chaordic Academy

Bug tracking

Adotar?● Times distribuídos

● Grandes equipes

● Ferramenta de comunicação

● Rastreabilidade entre requisitos

● Bugs em produção

Page 41: AutomaçãoWeb - Chaordic Academy

Bug tracking

Urgências● Regressão falhando -> ALERTA VERMELHO

● Bugs em produção

● Bugs reportados pelo cliente

Page 42: AutomaçãoWeb - Chaordic Academy

Desafios

● Atitude

● Coragem para codificar

● Conhecimento

● Curva de aprendizado

● Investimento inicial

● Não quer ser DEV

Page 43: AutomaçãoWeb - Chaordic Academy

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

Page 44: AutomaçãoWeb - Chaordic Academy

Instalação Ruby em Linux

● $ source /home/siqueira/.rvm/scripts/rvm

● Criar GemSet○ $ rvm create gemset academia_chaordic

Page 45: AutomaçãoWeb - Chaordic Academy

Instalação Ruby em Windows

● http://rubyinstaller.org/downloads

Page 46: AutomaçãoWeb - Chaordic Academy

Instalação Watir-Webdriver e Test::Unit Gem

● Gemfile

source 'https://rubygems.org'gem 'test-unit'gem 'watir-webdriver’

● $ bundle install

Page 47: AutomaçãoWeb - Chaordic Academy

Ruby

Page 48: AutomaçãoWeb - Chaordic Academy

Ruby basics

Page 49: AutomaçãoWeb - Chaordic Academy

Editor textoSublime Text

Page 50: AutomaçãoWeb - Chaordic Academy

Tudo em RUBY é um OBJETO

Page 51: AutomaçãoWeb - Chaordic Academy

IRB

● Interpretador Ruby

$ irb

Page 52: AutomaçãoWeb - Chaordic Academy

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

=beginfor i in 0..5

if i > 2 then break

endputs "Valor da variavel local seria #{i}"

end =end

Page 53: AutomaçãoWeb - Chaordic Academy

Classes e métodos

Page 54: AutomaçãoWeb - Chaordic Academy

Require

Page 55: AutomaçãoWeb - Chaordic Academy

Escopo de variáveis

● Locaisa. Escopo de métodob. 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 $

Page 56: AutomaçãoWeb - Chaordic Academy

Strings Operações

Soma

Multiplicação

Page 57: AutomaçãoWeb - Chaordic Academy

Strings Concatenação e Comparação

Concatenação

Comparação de tamanho

Page 58: AutomaçãoWeb - Chaordic Academy

Strings Regex match

Match regex

Page 59: AutomaçãoWeb - Chaordic Academy

Strings Métodos interessantes

capitalize

downcase

empty

gsub

Page 60: AutomaçãoWeb - Chaordic Academy

Interpolação de Strings

Page 61: AutomaçãoWeb - Chaordic Academy

Curiosidades

Page 62: AutomaçãoWeb - Chaordic Academy

Imprimindo na tela

● puts ‘Academia Chaordic’

● print ‘Academia Chaordic’

Page 63: AutomaçãoWeb - Chaordic Academy

Array

● a = Array.new

● b = [ ]

● a = [ 1, 2, 3 ]

● b = [ 1, 3, 4 ]

Page 64: AutomaçãoWeb - Chaordic Academy

Array push & pop

● a.push 4

● a.pop

● a.pop 2

a << 4

Page 65: AutomaçãoWeb - Chaordic Academy

Array shift

● a.shift

● a.unshift 0

Page 66: AutomaçãoWeb - Chaordic Academy

Array adição e subtração

Subtração

Adição

Page 67: AutomaçãoWeb - Chaordic Academy

Array index

Range inclusivo e exclusivo

Ìndices

Range inválido

Page 68: AutomaçãoWeb - Chaordic Academy

Array deletion

delete_at

delete

Page 69: AutomaçãoWeb - Chaordic Academy

Array methods

Page 70: AutomaçãoWeb - Chaordic Academy

Desafio

Encontre o tamanho das Strings

"test",

"ruby_r0x",

"academia_chaordic"

Pode-se usar um Array e o método collect

Page 71: AutomaçãoWeb - Chaordic Academy

Desafio

Encontre o tamanho das Strings

["test", "ruby_r0x", "academia_chaordic"].collect{ |string| string.length }=> [ 4, 8, 17 ]

Page 72: AutomaçãoWeb - Chaordic Academy

Desafio 2

Somar os números

1 ,3 ,5 ,7 ,9 ,11 ,13

Pode-se usar um Array e o método inject

Page 73: AutomaçãoWeb - Chaordic Academy

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 }

Page 74: AutomaçãoWeb - Chaordic Academy

Condicionais

● if...else

if conditional [then] code...

[elsif conditional [then] code...]...

[else code...]

end

Page 75: AutomaçãoWeb - Chaordic Academy

Condicionais

● if...else

Page 76: AutomaçãoWeb - Chaordic Academy

Condicionais

● unless

Page 77: AutomaçãoWeb - Chaordic Academy

Loops

● while

Page 78: AutomaçãoWeb - Chaordic Academy

Loops

● while

Page 79: AutomaçãoWeb - Chaordic Academy

Loops

● until

Page 80: AutomaçãoWeb - Chaordic Academy

Loops

● for

● each

Page 81: AutomaçãoWeb - Chaordic Academy

Loops

● break

Page 82: AutomaçãoWeb - Chaordic Academy

File I/O

● handle

Page 83: AutomaçãoWeb - Chaordic Academy

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

Page 84: AutomaçãoWeb - Chaordic Academy

Web Application Testing in Ruby

Page 85: AutomaçãoWeb - Chaordic Academy

Automate your web browser beautifully, nicely and

easily with some very sweet syntactic sugar.

Page 86: AutomaçãoWeb - Chaordic Academy

What is Watir?

● Open-source web test automation framework

● Bibliotecas Ruby

● Independente de tecnologia da app

● Simula input de usuário no navegador

Page 87: AutomaçãoWeb - Chaordic Academy

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

Page 88: AutomaçãoWeb - Chaordic Academy

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

Page 89: AutomaçãoWeb - Chaordic Academy

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

Page 90: AutomaçãoWeb - Chaordic Academy

Watij

● Web Application Testing in Java

● Simplicidade do Watir com poder do Java

● Pode-se usar JRuby e o interpretador IRB

Page 91: AutomaçãoWeb - Chaordic Academy

Vantagens

● Comunidade ativa

● Ruby nativa

● Suporte a multiplos browsers

● Poderosa, leve e fácil de utilizar

● Sem gravadores - Test records

Page 92: AutomaçãoWeb - Chaordic Academy

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

Page 93: AutomaçãoWeb - Chaordic Academy

Vantagens

● Fácil de lidar com iFrames

● Utilizar com rubygem PageObject

● Possível medir performance da página com Watir-

WebDriver-Performance gem

Page 94: AutomaçãoWeb - Chaordic Academy

Wait explícitosWatir::Wait.until { code block }

object.when_present.method

object.wait_until_present.method

object.wait_while_present.method

Page 95: AutomaçãoWeb - Chaordic Academy

Wait explícitos

Page 96: AutomaçãoWeb - Chaordic Academy

Wait implícitos

require 'watir-webdriver'browser = Watir::Browser.newbrowser.driver.manage.timeouts.implicit_wait = 3

● Teste pode se tornar mais devagar

● “Vício do uso” polui código

Page 97: AutomaçãoWeb - Chaordic Academy

Cookies

add (name, value, opts = {})

cookie.clear

cookies.delete (name)

cookies.to_a

Page 98: AutomaçãoWeb - Chaordic Academy

iFrames

browser.frame(: => “content_ifr”).button(:id => ‘button_01’).click

Page 99: AutomaçãoWeb - Chaordic Academy

Js alerts();browser.alert.ok

browser.alert.exists?

browser.alert.text

browser.alert.close

Page 100: AutomaçãoWeb - Chaordic Academy

Element presence

● exists?

● visible?

● present?

Page 101: AutomaçãoWeb - Chaordic Academy

Exemplorequire 'watir-webdriver'

firefox = Watir::Browser.new :firefoxfirefox.goto 'google.com'firefox.text_field(:name => 'q').set 'chaordic'firefox.button(:name => 'btnG').click

beginfirefox.links.each do |link|link.click if link.href == 'http://www.chaordic.com.br/'endrescue Selenium::WebDriver::Error::StaleElementReferenceError

nilend

firefox.quit

Page 102: AutomaçãoWeb - Chaordic Academy

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.”

Page 103: AutomaçãoWeb - Chaordic Academy

Performance● Measure page performance gem

Page 104: AutomaçãoWeb - Chaordic Academy

LOC● Lines of Code comparison

● Selenium WebDriver VS. Watir WebDriver

Page 105: AutomaçãoWeb - Chaordic Academy

Selenium WebDriver

Page 106: AutomaçãoWeb - Chaordic Academy

Selenium WebDriver

Page 107: AutomaçãoWeb - Chaordic Academy

Watir WebDriver

Page 108: AutomaçãoWeb - Chaordic Academy

Chaordic Mindset to write your Automated scripts

Testing your script

Page 109: AutomaçãoWeb - Chaordic Academy

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?

Page 110: AutomaçãoWeb - Chaordic Academy

Test::Unit

xUnit family test automation framework for Ruby

Page 111: AutomaçãoWeb - Chaordic Academy

● assert_block

● assert

● assert_equal

Page 112: AutomaçãoWeb - Chaordic Academy

● 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

Page 113: AutomaçãoWeb - Chaordic Academy

● 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

Page 114: AutomaçãoWeb - Chaordic Academy

● Setup and Teardown

Page 115: AutomaçãoWeb - Chaordic Academy

● Test suite

Page 116: AutomaçãoWeb - Chaordic Academy

● Test case

Page 117: AutomaçãoWeb - Chaordic Academy

● Helpers

Page 118: AutomaçãoWeb - Chaordic Academy
Page 119: AutomaçãoWeb - Chaordic Academy

● Wireframe = Maps web UI elements

● Devs do homework = IDs

● QA creates a class (model) for the page

Page 120: AutomaçãoWeb - Chaordic Academy

● Model will support testing

● DRY

● Easy API

Page 121: AutomaçãoWeb - Chaordic Academy

● 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.”

Page 122: AutomaçãoWeb - Chaordic Academy

● 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

Page 124: AutomaçãoWeb - Chaordic Academy

● Accessors

http://rubydoc.info/github/cheezy/page-

object/master/PageObject/Accessors

Page 125: AutomaçãoWeb - Chaordic Academy

● Element return

● Checkbox

Acessorsauto methods

Page 126: AutomaçãoWeb - Chaordic Academy

● Button

● Link

Acessorsauto methods

Page 127: AutomaçãoWeb - Chaordic Academy

exampleclass

Page 128: AutomaçãoWeb - Chaordic Academy

script class

Page 129: AutomaçãoWeb - Chaordic Academy

UI elements naming update

Page 130: AutomaçãoWeb - Chaordic Academy

script class

Page 131: AutomaçãoWeb - Chaordic Academy

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

Page 132: AutomaçãoWeb - Chaordic Academy

Alex Warmling | [email protected] Siqueira | [email protected]