SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler offline
www.qualister.com.br
(48) 4052-9536 / 9540
contato@qualister.com.br
Automação de Testes
Web em Ruby com
Cucumber e Webdriver



por Júlio de Lima

@juliodelimas
38º encontro do Guru-SP | São Paulo, 07 de novembro de 2015
Palestrante
Júlio de Lima

Especialista em teste de software com ênfase em automação de testes
de software, possui formação em Tecnologia da Informação e
certificações internacionais (CTFL e CTAL-TM pelo ISTQB) e nacional
(CBTS pela ALATS) relacionada a testes de software além de ser
certificado na ferramenta SoapUI Pro pela SmartBear Software.
Atualmente é consultor de automação de testes e instrutor na Qualister
e é professor de disciplina de teste de software em cursos de pós-
graduação no Paraná e em Santa Catarina.
julio.lima@qualister.com.br
twitter.com/juliodelimas
br.linkedin.com/in/juliodelimas
goldtips.by/juliodelimas
www.qualister.com.brwww.qualister.com.br
Texto do Título
• Nível de Corpo Um
– Nível de Corpo Dois
• Nível de Corpo Três
– Nível de Corpo Quatro
» Nível de Corpo Cinco
3
www.qualister.com.brwww.qualister.com.br
Texto do Título
• Nível de Corpo Um
– Nível de Corpo Dois
• Nível de Corpo Três
– Nível de Corpo Quatro
» Nível de Corpo Cinco
Cucumber
Especificação
dos Testes
Frameworks utilizados
4
Selenium
Webdriver
Driver
RSpec
Expectativas
www.qualister.com.brwww.qualister.com.br
Texto do Título
• Nível de Corpo Um
– Nível de Corpo Dois
• Nível de Corpo Três
– Nível de Corpo Quatro
» Nível de Corpo Cinco
Cucumber é um framework escrito em Ruby utilizado
para automação de testes de aceitação. Testes
escritos com Cucumber descrevem como a aplicação
deve se comportar.
A descrição dos comportamentos da aplicação pode
ser feitos em diversos idiomas, inclusive em
Português. Cucumber é escrito em Ruby, mas pode
ser utilizado em diversas linguagens de programação,
como: Java, C# e Python.
A descrição dos comportamentos da aplicação é
composta basicamente por Funcionalidade, Cenários
e Passos do cenário. Esta descrição é feita utilizando
Gherkin, um modelo de escrita compreendida pelo
Cucumber.
Cucumber
5
Cucumber
Especificação
dos Testes
www.qualister.com.brwww.qualister.com.br
Texto do Título
• Nível de Corpo Um
– Nível de Corpo Dois
• Nível de Corpo Três
– Nível de Corpo Quatro
» Nível de Corpo Cinco
O que o Cucumber pode fazer
▪ Escrever comportamentos do sistema em texto puro, em
diversos idiomas
▪ Testar classes e métodos Ruby, Java, C# e Python
▪ Executar testes a partir de linha de comando
▪ Integrar-se com ferramentas de integração contínua
▪ Gerar documentação dos comportamentos da aplicação
▪ Gerar relatórios de execução dos testes
Cucumber
6
Cucumber
Especificação
dos Testes
www.qualister.com.brwww.qualister.com.br
Texto do Título
• Nível de Corpo Um
– Nível de Corpo Dois
• Nível de Corpo Três
– Nível de Corpo Quatro
» Nível de Corpo Cinco
Gherkin é a sintaxe utilizada para escrever
funcionalidades no Cucumber. É um domínio
específico de linguagem para escrever regras de
negócio de fácil leitura
Sintaxe criada para ser utilizada por usuário técnicos e
não técnicos. Funcionalidades escritas no formato
Gherkin também são usadas como documentação do
sistema. Elas não detalham como a funcionalidade
deverá ser implementada.
Cada linha da descrição da funcionalidade é iniciada
por uma palavra chave e o escopo é definido
utilizando indentação. Funcionalidades em Gherkin
podem ser escritas em português ou em mais de 30
idiomas. Linhas podem ser comentadas utilizando “#”
no início da linha
Gherkin
7
Gherkin
DSL
www.qualister.com.brwww.qualister.com.br
Texto do Título
• Nível de Corpo Um
– Nível de Corpo Dois
• Nível de Corpo Três
– Nível de Corpo Quatro
» Nível de Corpo Cinco
Exemplo:
# language: pt

Funcionalidade: Descrição da funcionalidade desejada
Sendo alguém que será beneficiado

Posso utilizar uma funcionalidade do sistema

Para que possa alcançar um benefício para o negócio
Cenário: Uma situação de negócio
Dado que tenho uma precondição

Quando eu executo alguma ação

E executo alguma outra ação

Então recebo uma saída resultante das ações
executadas

Mas algo muda no estado atual do sistema
Gherkin
8
Gherkin
DSL
Daniel Wildt e Rafael Helm - Histórias de Usuário 3a Ed.(www.wildtech.com.br/historias-de-usuario/)
Introducing BDD | Dan North & Associates (dannorth.net/introducing-bdd/)
www.qualister.com.brwww.qualister.com.br
Texto do Título
• Nível de Corpo Um
– Nível de Corpo Dois
• Nível de Corpo Três
– Nível de Corpo Quatro
» Nível de Corpo Cinco
Os arquivos são salvos com a extensão .feature.
Funcionalidades podem ter múltiplos cenários e cada
cenário é iniciado pela palavra chave “Cenário”.
Cada cenário possui passos, sempre iniciados pelas
palavras chave: Dado, Quando, Então, E e Mas.
Gherkin
9
Gherkin
DSL
www.qualister.com.brwww.qualister.com.br
Texto do Título
• Nível de Corpo Um
– Nível de Corpo Dois
• Nível de Corpo Três
– Nível de Corpo Quatro
» Nível de Corpo Cinco
Selenium Webdriver é um framework de
automação de testes originalmente escrito em Java,
mas posteriormente disseminado em diversas
linguagens de programação.
Possui uma biblioteca completa de simulação de
ações do usuário sobre o browser, permitindo assim
automatizar estas ações.
O WebDriver conversa diretamente com um
browser real (Firefox, por padrão), por isso, há a
necessidade de tê-lo instalado na máquina.
O que é?
10
Selenium
Webdriver
Driver
www.qualister.com.brwww.qualister.com.br
Texto do Título
• Nível de Corpo Um
– Nível de Corpo Dois
• Nível de Corpo Três
– Nível de Corpo Quatro
» Nível de Corpo Cinco
O RSpec é um framework BDD (Behavior-Driven
Development), escrito em Ruby, utilizado para
estruturar os testes em ordem comportamental,
utilizando escrita em linguagem natural.
Ele também possui uma potente biblioteca de
expectativas e matchers, que é utilizada juntamente
com outros diversos frameworks de validação de
aplicações.
Usaremos ele em conjunto com os demais
frameworks para validar nossas aplicações.
O que é?
11
RSpec
Especificação
dos testes
www.qualister.com.brwww.qualister.com.br
Texto do Título
• Nível de Corpo Um
– Nível de Corpo Dois
• Nível de Corpo Três
– Nível de Corpo Quatro
» Nível de Corpo Cinco
12
Preparando o projeto
www.qualister.com.brwww.qualister.com.br
Texto do Título
• Nível de Corpo Um
– Nível de Corpo Dois
• Nível de Corpo Três
– Nível de Corpo Quatro
» Nível de Corpo Cinco
Preparando o projeto
1. Crie o diretório C:GURUSPCucumber
2. Crie o diretório C:GURUSPCucumberfeatures
3. Crie o diretório C:GURUSPCucumberfeaturesstep_definitions
4. Crie o diretório C:GURUSPCucumberfeaturessupport
5. Instale o Bundler, um gerenciador de dependências, com gem install bundler
6. Execute o comando “bundle init” dentro do diretório Cucumber
Adicione as dependências ao Gemfile que foi gerado na raiz do projeto:



# A sample Gemfile

source "http://rubygems.org"



# gem "rails"

gem 'selenium-webdriver', '~> 2.48.1'
gem 'rspec-expectations', '~> 3.3.1'
gem 'cucumber', '~> 2.1.0'
8. Execute o comando "bundle install”
9. E então veremos o status abaixo:

Bundle complete! 3 Gemfile dependencies, 15 gems now
installed. 13
www.qualister.com.brwww.qualister.com.br
Texto do Título
• Nível de Corpo Um
– Nível de Corpo Dois
• Nível de Corpo Três
– Nível de Corpo Quatro
» Nível de Corpo Cinco
14
Hands-on
www.qualister.com.brwww.qualister.com.br
Texto do Título
• Nível de Corpo Um
– Nível de Corpo Dois
• Nível de Corpo Três
– Nível de Corpo Quatro
» Nível de Corpo Cinco
15
Hands-on
Crie dentro do diretório “features” um arquivo chamado
gerenciarMovimentacoes.feature” e adicione a ele o seguinte texto:
# language: pt
Funcionalidade: Gerenciar Movimentações
Sendo o administrador de uma loja
Posso gerenciar movimentações
Para que possa ver, de forma simples, as entradas e saídas de valores
Cenário: Gerando uma movimentação de entrada


Dado que eu esteja autenticado como administrador
E que eu tenha acessado o menu "Movimentações"
E clicado em "Nova movimentação” para inserir uma movimentação
Quando informar "Entrada" como tipo de movimentação
E informar "50,00" como valor da movimentação
E Informar "PlayStation e XBox" como itens da movimentação
E clicar em "Gravar"
Então verei a mensagem "Sucesso ao inserir a movimentação" como sucesso da operação
www.qualister.com.brwww.qualister.com.br
Texto do Título
• Nível de Corpo Um
– Nível de Corpo Dois
• Nível de Corpo Três
– Nível de Corpo Quatro
» Nível de Corpo Cinco
16
Hands-on
Agora, execute o comando cucumber --color na raiz do projeto e então
veremos como foi a execução dos cenários:
1 scenario (1 undefined)
8 steps (8 undefined)
0m0.062s
Serão gerados snippets de código para os cenários ainda não definidos, veja
um exemplo:
You can implement step definitions for undefined steps
with these snippets:
Dado(/^que eu esteja autenticado como administrador$/) do
pending # Write code here
end
www.qualister.com.brwww.qualister.com.br
Texto do Título
• Nível de Corpo Um
– Nível de Corpo Dois
• Nível de Corpo Três
– Nível de Corpo Quatro
» Nível de Corpo Cinco
17
Hands-on
O que faremos agora é criar um arquivo chamado "gerenciarMovimentacoes.rb" no diretório
“step_definitions" e então cole o snippet de código que foi copiado do console:
# encoding: utf-8
Dado(/^que eu esteja autenticado como administrador$/) do
pending # Write code here
end
Este método propõe que façamos login na aplicação que desejamos testar, então,
escreveremos comandos do Selenium Webdriver, que reproduzirão as ações do usuário,
começando por abrir o navegador, maximizar a tela e determinar um tempo máximo de
espera:
@navegador = Selenium::WebDriver.for :firefox
@navegador.manage.window.maximize
@navegador.manage.timeouts.implicit_wait = 5
O “@“ serve para fazer com que a variável possa navegar por todos os passos do nosso
teste. 



Agora iremos navegar até a página inicial de nossa aplicação:
@navegador.get ‘http://localhost:4567/quickloja/'
www.qualister.com.brwww.qualister.com.br
Texto do Título
• Nível de Corpo Um
– Nível de Corpo Dois
• Nível de Corpo Três
– Nível de Corpo Quatro
» Nível de Corpo Cinco
18
Hands-on
E agora, preencher os campos do formulário de login e clicar no botão “Entrar" para
ter acesso ao interior da aplicação, veja:
@navegador.find_element(:id, 'usuariologin').send_keys("teste")
@navegador.find_element(:id, 'usuariosenha').send_keys("123")
@navegador.find_element(:css, ‘button[type="submit"]').click
Ótimo, já escrevemos o primeiro passo, antes de executá-lo precisamos criar um
arquivo “env.rb” no diretório “features/support" e adicionar a ele os requires para o
RSpec, Cucumber e Webdriver:
# encoding: utf-8
require 'cucumber/formatter/unicode'
require 'rspec/expectations'
require ‘selenium-webdriver'
Agora executaremos os cenários novamente:
cucumber --color
www.qualister.com.brwww.qualister.com.br
Texto do Título
• Nível de Corpo Um
– Nível de Corpo Dois
• Nível de Corpo Três
– Nível de Corpo Quatro
» Nível de Corpo Cinco
19
Hands-on
O resultado será a apresentação do primeiro passo em verde:
Dado que eu esteja autenticado como administrador
# features/step_definitions/gerenciarMovimentacoes.rb:3
E os demais em amarelo, uma vez que ainda não foram definidos. E o status geral
demonstrará o seguinte resultado:
1 scenario (1 undefined)
8 steps (7 undefined, 1 passed)
0m7.539s
O próximo passo é copiar o segundo passo e automatizar os testes que demonstram
que ele pode ser executado com sucesso, logo, copio o snippet para o arquivo
“gerenciarMovimentacoes.rb" e crio a automação para ele, veja:
Dado(/^que eu tenha acessado o menu "([^"]*)"$/) do |arg1|
pending # Write code here that turns the phrase above into
concrete actions
www.qualister.com.brwww.qualister.com.br
Texto do Título
• Nível de Corpo Um
– Nível de Corpo Dois
• Nível de Corpo Três
– Nível de Corpo Quatro
» Nível de Corpo Cinco
20
Hands-on
Este passo tem duas características diferentes, uma expressão regular e uma variável
que receberá o valor extraído por ela, veja:
Dado(/^que eu tenha acessado o menu "([^"]*)"$/) do |arg1|
pending # Write code here
end

Vamos renomear a variável “arg1" para “menu”. A variável menu possuirá o nome do
menu a ser clicado, então nosso código ficará assim:
Dado(/^que eu tenha acessado o menu "([^"]*)"$/) do |menu|
@navegador.find_element(:link_text, menu).click
end
Ao executar o teste agora, veremos que dois casos já foram executados, restando agora 7
passos indefinidos, okay, vamos ao próximo:
Dado(/^clicado em "([^"]*)" para inserir uma movimentação$/) do |
arg1|
pending # Write code here
end
www.qualister.com.brwww.qualister.com.br
Texto do Título
• Nível de Corpo Um
– Nível de Corpo Dois
• Nível de Corpo Três
– Nível de Corpo Quatro
» Nível de Corpo Cinco
21
Hands-on
Que ficará assim:
Dado(/^clicado em "([^"]*)" para inserir uma movimentação$/) do |botao|
@navegador.find_element(:link_text, botao).click
end
Agora restam 5 passos, vamos ao próximo:
Quando(/^informar "([^"]*)" como tipo de movimentação$/) do |arg1|
pending # Write code here
end
Que ficará assim:
Quando(/^informar "([^"]*)" como tipo de movimentação$/) do |tipo|
movimentacaotipo =
Selenium::WebDriver::Support::Select.new(@navegador.find_element(:name,
"movimentacaotipo"))
movimentacaotipo.select_by(:text, "Saída") # ou :index ou :value
end
Agora restam 4 passos, o próximo é:
Quando(/^informar "([^"]*)" como valor da movimentaçao$/) do |arg1|
pending # Write code here
end
www.qualister.com.brwww.qualister.com.br
Texto do Título
• Nível de Corpo Um
– Nível de Corpo Dois
• Nível de Corpo Três
– Nível de Corpo Quatro
» Nível de Corpo Cinco
22
Hands-on
Que ficará assim:
Quando(/^informar "([^"]*)" como valor da movimentação$/) do |valor|
@navegador.find_element(:name, "movimentacaovalor").send_keys(valor)
end
Agora restam 3 passos, vamos ao próximo:
Quando(/^Informar "([^"]*)" como itens da movimentação$/) do |itens|
pending # Write code here
end
Que ficará assim:
Quando(/^Informar "([^"]*)" como itens da movimentação$/) do |itens|
@navegador.find_element(:name, "movimentacaoitens").send_keys(itens)
end
Agora restam 2 passos, o próximo é:
Quando(/^clicar em "([^"]*)"$/) do |arg1|
pending # Write code here
end
www.qualister.com.brwww.qualister.com.br
Texto do Título
• Nível de Corpo Um
– Nível de Corpo Dois
• Nível de Corpo Três
– Nível de Corpo Quatro
» Nível de Corpo Cinco
23
Hands-on
Que ficará assim:
Quando(/^clicar em "([^"]*)"$/) do |botao|
@navegador.find_element(:css, ".btn.btn-primary").click
end
Vamos ao último passo:
Entao(/^verei a mensagem "([^"]*)" como sucesso da operação$/) do |arg1|
pending # Write code here
end
Que ficará assim:
Entao(/^verei a mensagem "([^"]*)" como sucesso da operação$/) do |msg|
expect(@navegador.find_element(:css, ".alert").text).to eq(msg)
@navegador.quit
end
Obs. Note que usamos o método “quit" para fechar o browser ao fim da execução, agora, ao executar
o teste teremos o seguinte resultado:
1 scenario (1 passed)
8 steps (8 passed)
0m12.360s
www.qualister.com.brwww.qualister.com.br
Texto do Título
• Nível de Corpo Um
– Nível de Corpo Dois
• Nível de Corpo Três
– Nível de Corpo Quatro
» Nível de Corpo Cinco
24
Gerar um relatório de execução no formato HTML
cucumber --format html --out relatorio.html
Hands-on
Saída:
www.qualister.com.brwww.qualister.com.br
Texto do Título
• Nível de Corpo Um
– Nível de Corpo Dois
• Nível de Corpo Três
– Nível de Corpo Quatro
» Nível de Corpo Cinco
25
Links interessantes
www.qualister.com.brwww.qualister.com.br
Texto do Título
• Nível de Corpo Um
– Nível de Corpo Dois
• Nível de Corpo Três
– Nível de Corpo Quatro
» Nível de Corpo Cinco
26
Documentação da API do Cucumber
http://www.rubydoc.info/gems/cucumber/
Cucumber
Documentação da API do Selenium WebDriver
http://www.rubydoc.info/gems/selenium-
webdriver/0.0.28/Selenium/WebDriver
https://selenium.googlecode.com/svn/trunk/
docs/api/rb/Selenium/WebDriver.html
Relatórios de execução
www.qualister.com.brwww.qualister.com.br
Texto do Título
• Nível de Corpo Um
– Nível de Corpo Dois
• Nível de Corpo Três
– Nível de Corpo Quatro
» Nível de Corpo Cinco
27
Slides:

http://goo.gl/CgaaWo
Vídeo da palestra:

https://youtu.be/-W6335X4jno

Mais conteúdo relacionado

Destaque

Medindo a performance de aplicações web com JMeter
Medindo a performance de aplicações web com JMeterMedindo a performance de aplicações web com JMeter
Medindo a performance de aplicações web com JMeterJúlio de Lima
 
[UNIP2015] Testando a Performance de Aplicações Web com JMeter
[UNIP2015] Testando a Performance de Aplicações Web com JMeter[UNIP2015] Testando a Performance de Aplicações Web com JMeter
[UNIP2015] Testando a Performance de Aplicações Web com JMeterJúlio de Lima
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Diego Pacheco
 
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 driverJúlio de Lima
 
Criação de uma equipe de QAs, do Waterfall ao Agile
Criação de uma equipe de QAs, do Waterfall ao AgileCriação de uma equipe de QAs, do Waterfall ao Agile
Criação de uma equipe de QAs, do Waterfall ao AgileRobson Agapito Correa
 
Presentation Virtuele Straat
Presentation Virtuele StraatPresentation Virtuele Straat
Presentation Virtuele StraatVinger
 
DevQA: Enfim aprendi à resolver problemas
DevQA: Enfim aprendi à resolver problemasDevQA: Enfim aprendi à resolver problemas
DevQA: Enfim aprendi à resolver problemasKamilla Queiroz Xavier
 
Qualidade e Teste de Software - O que preciso saber
Qualidade e Teste de Software - O que preciso saberQualidade e Teste de Software - O que preciso saber
Qualidade e Teste de Software - O que preciso saberKamilla Queiroz Xavier
 
Spivpratsia z gromadamy_umovy_konkursu_4
Spivpratsia z gromadamy_umovy_konkursu_4Spivpratsia z gromadamy_umovy_konkursu_4
Spivpratsia z gromadamy_umovy_konkursu_4Library Franko
 
Brochure i mes icores (co-ritec) - viet
Brochure i mes icores (co-ritec) - vietBrochure i mes icores (co-ritec) - viet
Brochure i mes icores (co-ritec) - vietDentechUMP
 
проект зелена бібліотека
проект зелена бібліотекапроект зелена бібліотека
проект зелена бібліотекаOlena Bashun
 
[PHPConference 2016] Criando Mocks com Prophecy
[PHPConference 2016] Criando Mocks com Prophecy[PHPConference 2016] Criando Mocks com Prophecy
[PHPConference 2016] Criando Mocks com ProphecyJúlio de Lima
 
[QANinjaConference] Carreira em Testes: Ainda vale a pena?
[QANinjaConference] Carreira em Testes: Ainda vale a pena?[QANinjaConference] Carreira em Testes: Ainda vale a pena?
[QANinjaConference] Carreira em Testes: Ainda vale a pena?Júlio de Lima
 
aguazulito mi llano lindo
aguazulito mi llano lindoaguazulito mi llano lindo
aguazulito mi llano lindokonith02
 

Destaque (20)

Medindo a performance de aplicações web com JMeter
Medindo a performance de aplicações web com JMeterMedindo a performance de aplicações web com JMeter
Medindo a performance de aplicações web com JMeter
 
[UNIP2015] Testando a Performance de Aplicações Web com JMeter
[UNIP2015] Testando a Performance de Aplicações Web com JMeter[UNIP2015] Testando a Performance de Aplicações Web com JMeter
[UNIP2015] Testando a Performance de Aplicações Web com JMeter
 
BDD com Cucumber
BDD com CucumberBDD com Cucumber
BDD com Cucumber
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1
 
Alats Seminario V03 3
Alats Seminario V03 3Alats Seminario V03 3
Alats Seminario V03 3
 
Seu site voando
Seu site voandoSeu site voando
Seu site voando
 
Apresentação sobre JRuby
Apresentação sobre JRubyApresentação sobre JRuby
Apresentação sobre JRuby
 
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
 
Criação de uma equipe de QAs, do Waterfall ao Agile
Criação de uma equipe de QAs, do Waterfall ao AgileCriação de uma equipe de QAs, do Waterfall ao Agile
Criação de uma equipe de QAs, do Waterfall ao Agile
 
Presentation Virtuele Straat
Presentation Virtuele StraatPresentation Virtuele Straat
Presentation Virtuele Straat
 
Las tics
Las ticsLas tics
Las tics
 
DevQA: Enfim aprendi à resolver problemas
DevQA: Enfim aprendi à resolver problemasDevQA: Enfim aprendi à resolver problemas
DevQA: Enfim aprendi à resolver problemas
 
Qualidade e Teste de Software - O que preciso saber
Qualidade e Teste de Software - O que preciso saberQualidade e Teste de Software - O que preciso saber
Qualidade e Teste de Software - O que preciso saber
 
Spivpratsia z gromadamy_umovy_konkursu_4
Spivpratsia z gromadamy_umovy_konkursu_4Spivpratsia z gromadamy_umovy_konkursu_4
Spivpratsia z gromadamy_umovy_konkursu_4
 
Brochure i mes icores (co-ritec) - viet
Brochure i mes icores (co-ritec) - vietBrochure i mes icores (co-ritec) - viet
Brochure i mes icores (co-ritec) - viet
 
проект зелена бібліотека
проект зелена бібліотекапроект зелена бібліотека
проект зелена бібліотека
 
El acceso abierto al conocimiento científico
El acceso abierto al conocimiento científico El acceso abierto al conocimiento científico
El acceso abierto al conocimiento científico
 
[PHPConference 2016] Criando Mocks com Prophecy
[PHPConference 2016] Criando Mocks com Prophecy[PHPConference 2016] Criando Mocks com Prophecy
[PHPConference 2016] Criando Mocks com Prophecy
 
[QANinjaConference] Carreira em Testes: Ainda vale a pena?
[QANinjaConference] Carreira em Testes: Ainda vale a pena?[QANinjaConference] Carreira em Testes: Ainda vale a pena?
[QANinjaConference] Carreira em Testes: Ainda vale a pena?
 
aguazulito mi llano lindo
aguazulito mi llano lindoaguazulito mi llano lindo
aguazulito mi llano lindo
 

Semelhante a [38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver

[PHPConferenceBR] Automação de testes com Codeception
[PHPConferenceBR] Automação de testes com Codeception[PHPConferenceBR] Automação de testes com Codeception
[PHPConferenceBR] Automação de testes com CodeceptionJúlio de Lima
 
Tutorial visão automação de testes e casper js
Tutorial visão automação de testes e casper jsTutorial visão automação de testes e casper js
Tutorial visão automação de testes e casper js4ALL Tests
 
Tutorial - Visão sobre Automação de Testes com CasperJS
Tutorial - Visão sobre Automação de Testes com CasperJSTutorial - Visão sobre Automação de Testes com CasperJS
Tutorial - Visão sobre Automação de Testes com CasperJSFrederico Allan
 
Curso de Performance and Tuning - Linux
Curso de Performance and Tuning - LinuxCurso de Performance and Tuning - Linux
Curso de Performance and Tuning - LinuxDell Technologies
 
Agile Brazil 2018
Agile Brazil 2018Agile Brazil 2018
Agile Brazil 2018Karla Silva
 
Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Tchelinux
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHPRangel Javier
 
[Karla e Larissa] Agile Brazil 2018
[Karla e Larissa] Agile Brazil 2018[Karla e Larissa] Agile Brazil 2018
[Karla e Larissa] Agile Brazil 2018Larissa Soares
 
pepinos do cliente no código de testes da aplicação com OSS
pepinos do cliente no código de testes da aplicação com OSSpepinos do cliente no código de testes da aplicação com OSS
pepinos do cliente no código de testes da aplicação com OSSRodrigo Urubatan
 
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando PimentaIniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando Pimentamichel adriano medeiros
 
Ideais Cowabunga - Headless Testing com GhostDriver
Ideais Cowabunga - Headless Testing com GhostDriverIdeais Cowabunga - Headless Testing com GhostDriver
Ideais Cowabunga - Headless Testing com GhostDriverStefan Teixeira
 
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAcelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAmazon Web Services LATAM
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesOziel Moreira Neto
 
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOpsQuebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOpsJosé Alexandre Macedo
 

Semelhante a [38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver (20)

[PHPConferenceBR] Automação de testes com Codeception
[PHPConferenceBR] Automação de testes com Codeception[PHPConferenceBR] Automação de testes com Codeception
[PHPConferenceBR] Automação de testes com Codeception
 
Desafio Rest API
Desafio Rest APIDesafio Rest API
Desafio Rest API
 
Tutorial visão automação de testes e casper js
Tutorial visão automação de testes e casper jsTutorial visão automação de testes e casper js
Tutorial visão automação de testes e casper js
 
Tutorial - Visão sobre Automação de Testes com CasperJS
Tutorial - Visão sobre Automação de Testes com CasperJSTutorial - Visão sobre Automação de Testes com CasperJS
Tutorial - Visão sobre Automação de Testes com CasperJS
 
De 0 a DevOps
De 0 a DevOpsDe 0 a DevOps
De 0 a DevOps
 
Curso de Performance and Tuning - Linux
Curso de Performance and Tuning - LinuxCurso de Performance and Tuning - Linux
Curso de Performance and Tuning - Linux
 
Agile Brazil 2018
Agile Brazil 2018Agile Brazil 2018
Agile Brazil 2018
 
Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes.
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHP
 
[Karla e Larissa] Agile Brazil 2018
[Karla e Larissa] Agile Brazil 2018[Karla e Larissa] Agile Brazil 2018
[Karla e Larissa] Agile Brazil 2018
 
pepinos do cliente no código de testes da aplicação com OSS
pepinos do cliente no código de testes da aplicação com OSSpepinos do cliente no código de testes da aplicação com OSS
pepinos do cliente no código de testes da aplicação com OSS
 
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando PimentaIniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
 
Ideais Cowabunga - Headless Testing com GhostDriver
Ideais Cowabunga - Headless Testing com GhostDriverIdeais Cowabunga - Headless Testing com GhostDriver
Ideais Cowabunga - Headless Testing com GhostDriver
 
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAcelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
 
Cucumber
CucumberCucumber
Cucumber
 
E so mais um campinho na tela
E so mais um campinho na telaE so mais um campinho na tela
E so mais um campinho na tela
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Ruby On Rails Regis
Ruby On Rails RegisRuby On Rails Regis
Ruby On Rails Regis
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOpsQuebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
 

Mais de Júlio de Lima

[ATC2021] Distribuição de Testes em Diferentes Camadas
[ATC2021] Distribuição de Testes em Diferentes Camadas[ATC2021] Distribuição de Testes em Diferentes Camadas
[ATC2021] Distribuição de Testes em Diferentes CamadasJúlio de Lima
 
ALTER FACE Test Heuristic
ALTER FACE Test HeuristicALTER FACE Test Heuristic
ALTER FACE Test HeuristicJúlio de Lima
 
[ScrumDay2020] A evolução da responsabilidade em testes
[ScrumDay2020] A evolução da responsabilidade em testes[ScrumDay2020] A evolução da responsabilidade em testes
[ScrumDay2020] A evolução da responsabilidade em testesJúlio de Lima
 
Reducing the scope of load test analysis (STAREast 2020)
Reducing the scope of load test analysis (STAREast 2020)Reducing the scope of load test analysis (STAREast 2020)
Reducing the scope of load test analysis (STAREast 2020)Júlio de Lima
 
[TDC2019] Inteligência Artificial e Testes in a Nutshell
[TDC2019] Inteligência Artificial e Testes  in a Nutshell[TDC2019] Inteligência Artificial e Testes  in a Nutshell
[TDC2019] Inteligência Artificial e Testes in a NutshellJúlio de Lima
 
[GaragemTalks2019] Cultura de Testes e Qualidade de Software
[GaragemTalks2019] Cultura de Testes e Qualidade de Software[GaragemTalks2019] Cultura de Testes e Qualidade de Software
[GaragemTalks2019] Cultura de Testes e Qualidade de SoftwareJúlio de Lima
 
[MoT SP #1] PRISMA para Testes Baseados em Risco
[MoT SP #1] PRISMA para Testes Baseados em Risco[MoT SP #1] PRISMA para Testes Baseados em Risco
[MoT SP #1] PRISMA para Testes Baseados em RiscoJúlio de Lima
 
Mindset de QA em Diferentes Contextos
Mindset de QA em Diferentes ContextosMindset de QA em Diferentes Contextos
Mindset de QA em Diferentes ContextosJúlio de Lima
 
[DevelopersBR-2018] Testes de performance usando a nuvem
[DevelopersBR-2018] Testes de performance usando a nuvem[DevelopersBR-2018] Testes de performance usando a nuvem
[DevelopersBR-2018] Testes de performance usando a nuvemJúlio de Lima
 
[7Masters Aug, 2018] Escolhas durante automação de testes de API
[7Masters Aug, 2018] Escolhas durante automação de testes de API[7Masters Aug, 2018] Escolhas durante automação de testes de API
[7Masters Aug, 2018] Escolhas durante automação de testes de APIJúlio de Lima
 
[Front in Sampa 2018] Desenvolvendo como QAs
[Front in Sampa 2018] Desenvolvendo como QAs[Front in Sampa 2018] Desenvolvendo como QAs
[Front in Sampa 2018] Desenvolvendo como QAsJúlio de Lima
 
Mindset do QA em diferentes contextos
Mindset do QA em diferentes contextosMindset do QA em diferentes contextos
Mindset do QA em diferentes contextosJúlio de Lima
 
[QANinjaConf2017] Testes de Regressão Visual com Galen Framework
[QANinjaConf2017] Testes de Regressão Visual com Galen Framework[QANinjaConf2017] Testes de Regressão Visual com Galen Framework
[QANinjaConf2017] Testes de Regressão Visual com Galen FrameworkJúlio de Lima
 
[QANinjaConference] Automação de Testes com Codeception
[QANinjaConference] Automação de Testes com Codeception[QANinjaConference] Automação de Testes com Codeception
[QANinjaConference] Automação de Testes com CodeceptionJúlio de Lima
 
[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)Júlio de Lima
 
Palestra DevOps para Teste de Software
Palestra DevOps para Teste de SoftwarePalestra DevOps para Teste de Software
Palestra DevOps para Teste de SoftwareJúlio de Lima
 
[TICNOVA2015] Palestra sobre Automação de Testes
[TICNOVA2015] Palestra sobre Automação de Testes[TICNOVA2015] Palestra sobre Automação de Testes
[TICNOVA2015] Palestra sobre Automação de TestesJúlio de Lima
 
TDC2015: Testes em APIs REST com Rest-Assured
TDC2015: Testes em APIs REST com Rest-AssuredTDC2015: Testes em APIs REST com Rest-Assured
TDC2015: Testes em APIs REST com Rest-AssuredJúlio de Lima
 
Palestra sobre automação de testes em APIs Rest com Rest-Assured
Palestra sobre automação de testes em APIs Rest com Rest-AssuredPalestra sobre automação de testes em APIs Rest com Rest-Assured
Palestra sobre automação de testes em APIs Rest com Rest-AssuredJúlio de Lima
 
Introdução à Automação de Testes Funcionais (IPASGO, Goiânia)
Introdução à Automação de Testes Funcionais (IPASGO, Goiânia)Introdução à Automação de Testes Funcionais (IPASGO, Goiânia)
Introdução à Automação de Testes Funcionais (IPASGO, Goiânia)Júlio de Lima
 

Mais de Júlio de Lima (20)

[ATC2021] Distribuição de Testes em Diferentes Camadas
[ATC2021] Distribuição de Testes em Diferentes Camadas[ATC2021] Distribuição de Testes em Diferentes Camadas
[ATC2021] Distribuição de Testes em Diferentes Camadas
 
ALTER FACE Test Heuristic
ALTER FACE Test HeuristicALTER FACE Test Heuristic
ALTER FACE Test Heuristic
 
[ScrumDay2020] A evolução da responsabilidade em testes
[ScrumDay2020] A evolução da responsabilidade em testes[ScrumDay2020] A evolução da responsabilidade em testes
[ScrumDay2020] A evolução da responsabilidade em testes
 
Reducing the scope of load test analysis (STAREast 2020)
Reducing the scope of load test analysis (STAREast 2020)Reducing the scope of load test analysis (STAREast 2020)
Reducing the scope of load test analysis (STAREast 2020)
 
[TDC2019] Inteligência Artificial e Testes in a Nutshell
[TDC2019] Inteligência Artificial e Testes  in a Nutshell[TDC2019] Inteligência Artificial e Testes  in a Nutshell
[TDC2019] Inteligência Artificial e Testes in a Nutshell
 
[GaragemTalks2019] Cultura de Testes e Qualidade de Software
[GaragemTalks2019] Cultura de Testes e Qualidade de Software[GaragemTalks2019] Cultura de Testes e Qualidade de Software
[GaragemTalks2019] Cultura de Testes e Qualidade de Software
 
[MoT SP #1] PRISMA para Testes Baseados em Risco
[MoT SP #1] PRISMA para Testes Baseados em Risco[MoT SP #1] PRISMA para Testes Baseados em Risco
[MoT SP #1] PRISMA para Testes Baseados em Risco
 
Mindset de QA em Diferentes Contextos
Mindset de QA em Diferentes ContextosMindset de QA em Diferentes Contextos
Mindset de QA em Diferentes Contextos
 
[DevelopersBR-2018] Testes de performance usando a nuvem
[DevelopersBR-2018] Testes de performance usando a nuvem[DevelopersBR-2018] Testes de performance usando a nuvem
[DevelopersBR-2018] Testes de performance usando a nuvem
 
[7Masters Aug, 2018] Escolhas durante automação de testes de API
[7Masters Aug, 2018] Escolhas durante automação de testes de API[7Masters Aug, 2018] Escolhas durante automação de testes de API
[7Masters Aug, 2018] Escolhas durante automação de testes de API
 
[Front in Sampa 2018] Desenvolvendo como QAs
[Front in Sampa 2018] Desenvolvendo como QAs[Front in Sampa 2018] Desenvolvendo como QAs
[Front in Sampa 2018] Desenvolvendo como QAs
 
Mindset do QA em diferentes contextos
Mindset do QA em diferentes contextosMindset do QA em diferentes contextos
Mindset do QA em diferentes contextos
 
[QANinjaConf2017] Testes de Regressão Visual com Galen Framework
[QANinjaConf2017] Testes de Regressão Visual com Galen Framework[QANinjaConf2017] Testes de Regressão Visual com Galen Framework
[QANinjaConf2017] Testes de Regressão Visual com Galen Framework
 
[QANinjaConference] Automação de Testes com Codeception
[QANinjaConference] Automação de Testes com Codeception[QANinjaConference] Automação de Testes com Codeception
[QANinjaConference] Automação de Testes com Codeception
 
[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)
 
Palestra DevOps para Teste de Software
Palestra DevOps para Teste de SoftwarePalestra DevOps para Teste de Software
Palestra DevOps para Teste de Software
 
[TICNOVA2015] Palestra sobre Automação de Testes
[TICNOVA2015] Palestra sobre Automação de Testes[TICNOVA2015] Palestra sobre Automação de Testes
[TICNOVA2015] Palestra sobre Automação de Testes
 
TDC2015: Testes em APIs REST com Rest-Assured
TDC2015: Testes em APIs REST com Rest-AssuredTDC2015: Testes em APIs REST com Rest-Assured
TDC2015: Testes em APIs REST com Rest-Assured
 
Palestra sobre automação de testes em APIs Rest com Rest-Assured
Palestra sobre automação de testes em APIs Rest com Rest-AssuredPalestra sobre automação de testes em APIs Rest com Rest-Assured
Palestra sobre automação de testes em APIs Rest com Rest-Assured
 
Introdução à Automação de Testes Funcionais (IPASGO, Goiânia)
Introdução à Automação de Testes Funcionais (IPASGO, Goiânia)Introdução à Automação de Testes Funcionais (IPASGO, Goiânia)
Introdução à Automação de Testes Funcionais (IPASGO, Goiânia)
 

Último

Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfSamaraLunas
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuisKitota
 

Último (8)

Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 

[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver

  • 1. www.qualister.com.br (48) 4052-9536 / 9540 contato@qualister.com.br Automação de Testes Web em Ruby com Cucumber e Webdriver
 
 por Júlio de Lima
 @juliodelimas 38º encontro do Guru-SP | São Paulo, 07 de novembro de 2015
  • 2. Palestrante Júlio de Lima
 Especialista em teste de software com ênfase em automação de testes de software, possui formação em Tecnologia da Informação e certificações internacionais (CTFL e CTAL-TM pelo ISTQB) e nacional (CBTS pela ALATS) relacionada a testes de software além de ser certificado na ferramenta SoapUI Pro pela SmartBear Software. Atualmente é consultor de automação de testes e instrutor na Qualister e é professor de disciplina de teste de software em cursos de pós- graduação no Paraná e em Santa Catarina. julio.lima@qualister.com.br twitter.com/juliodelimas br.linkedin.com/in/juliodelimas goldtips.by/juliodelimas
  • 3. www.qualister.com.brwww.qualister.com.br Texto do Título • Nível de Corpo Um – Nível de Corpo Dois • Nível de Corpo Três – Nível de Corpo Quatro » Nível de Corpo Cinco 3
  • 4. www.qualister.com.brwww.qualister.com.br Texto do Título • Nível de Corpo Um – Nível de Corpo Dois • Nível de Corpo Três – Nível de Corpo Quatro » Nível de Corpo Cinco Cucumber Especificação dos Testes Frameworks utilizados 4 Selenium Webdriver Driver RSpec Expectativas
  • 5. www.qualister.com.brwww.qualister.com.br Texto do Título • Nível de Corpo Um – Nível de Corpo Dois • Nível de Corpo Três – Nível de Corpo Quatro » Nível de Corpo Cinco Cucumber é um framework escrito em Ruby utilizado para automação de testes de aceitação. Testes escritos com Cucumber descrevem como a aplicação deve se comportar. A descrição dos comportamentos da aplicação pode ser feitos em diversos idiomas, inclusive em Português. Cucumber é escrito em Ruby, mas pode ser utilizado em diversas linguagens de programação, como: Java, C# e Python. A descrição dos comportamentos da aplicação é composta basicamente por Funcionalidade, Cenários e Passos do cenário. Esta descrição é feita utilizando Gherkin, um modelo de escrita compreendida pelo Cucumber. Cucumber 5 Cucumber Especificação dos Testes
  • 6. www.qualister.com.brwww.qualister.com.br Texto do Título • Nível de Corpo Um – Nível de Corpo Dois • Nível de Corpo Três – Nível de Corpo Quatro » Nível de Corpo Cinco O que o Cucumber pode fazer ▪ Escrever comportamentos do sistema em texto puro, em diversos idiomas ▪ Testar classes e métodos Ruby, Java, C# e Python ▪ Executar testes a partir de linha de comando ▪ Integrar-se com ferramentas de integração contínua ▪ Gerar documentação dos comportamentos da aplicação ▪ Gerar relatórios de execução dos testes Cucumber 6 Cucumber Especificação dos Testes
  • 7. www.qualister.com.brwww.qualister.com.br Texto do Título • Nível de Corpo Um – Nível de Corpo Dois • Nível de Corpo Três – Nível de Corpo Quatro » Nível de Corpo Cinco Gherkin é a sintaxe utilizada para escrever funcionalidades no Cucumber. É um domínio específico de linguagem para escrever regras de negócio de fácil leitura Sintaxe criada para ser utilizada por usuário técnicos e não técnicos. Funcionalidades escritas no formato Gherkin também são usadas como documentação do sistema. Elas não detalham como a funcionalidade deverá ser implementada. Cada linha da descrição da funcionalidade é iniciada por uma palavra chave e o escopo é definido utilizando indentação. Funcionalidades em Gherkin podem ser escritas em português ou em mais de 30 idiomas. Linhas podem ser comentadas utilizando “#” no início da linha Gherkin 7 Gherkin DSL
  • 8. www.qualister.com.brwww.qualister.com.br Texto do Título • Nível de Corpo Um – Nível de Corpo Dois • Nível de Corpo Três – Nível de Corpo Quatro » Nível de Corpo Cinco Exemplo: # language: pt
 Funcionalidade: Descrição da funcionalidade desejada Sendo alguém que será beneficiado
 Posso utilizar uma funcionalidade do sistema
 Para que possa alcançar um benefício para o negócio Cenário: Uma situação de negócio Dado que tenho uma precondição
 Quando eu executo alguma ação
 E executo alguma outra ação
 Então recebo uma saída resultante das ações executadas
 Mas algo muda no estado atual do sistema Gherkin 8 Gherkin DSL Daniel Wildt e Rafael Helm - Histórias de Usuário 3a Ed.(www.wildtech.com.br/historias-de-usuario/) Introducing BDD | Dan North & Associates (dannorth.net/introducing-bdd/)
  • 9. www.qualister.com.brwww.qualister.com.br Texto do Título • Nível de Corpo Um – Nível de Corpo Dois • Nível de Corpo Três – Nível de Corpo Quatro » Nível de Corpo Cinco Os arquivos são salvos com a extensão .feature. Funcionalidades podem ter múltiplos cenários e cada cenário é iniciado pela palavra chave “Cenário”. Cada cenário possui passos, sempre iniciados pelas palavras chave: Dado, Quando, Então, E e Mas. Gherkin 9 Gherkin DSL
  • 10. www.qualister.com.brwww.qualister.com.br Texto do Título • Nível de Corpo Um – Nível de Corpo Dois • Nível de Corpo Três – Nível de Corpo Quatro » Nível de Corpo Cinco Selenium Webdriver é um framework de automação de testes originalmente escrito em Java, mas posteriormente disseminado em diversas linguagens de programação. Possui uma biblioteca completa de simulação de ações do usuário sobre o browser, permitindo assim automatizar estas ações. O WebDriver conversa diretamente com um browser real (Firefox, por padrão), por isso, há a necessidade de tê-lo instalado na máquina. O que é? 10 Selenium Webdriver Driver
  • 11. www.qualister.com.brwww.qualister.com.br Texto do Título • Nível de Corpo Um – Nível de Corpo Dois • Nível de Corpo Três – Nível de Corpo Quatro » Nível de Corpo Cinco O RSpec é um framework BDD (Behavior-Driven Development), escrito em Ruby, utilizado para estruturar os testes em ordem comportamental, utilizando escrita em linguagem natural. Ele também possui uma potente biblioteca de expectativas e matchers, que é utilizada juntamente com outros diversos frameworks de validação de aplicações. Usaremos ele em conjunto com os demais frameworks para validar nossas aplicações. O que é? 11 RSpec Especificação dos testes
  • 12. www.qualister.com.brwww.qualister.com.br Texto do Título • Nível de Corpo Um – Nível de Corpo Dois • Nível de Corpo Três – Nível de Corpo Quatro » Nível de Corpo Cinco 12 Preparando o projeto
  • 13. www.qualister.com.brwww.qualister.com.br Texto do Título • Nível de Corpo Um – Nível de Corpo Dois • Nível de Corpo Três – Nível de Corpo Quatro » Nível de Corpo Cinco Preparando o projeto 1. Crie o diretório C:GURUSPCucumber 2. Crie o diretório C:GURUSPCucumberfeatures 3. Crie o diretório C:GURUSPCucumberfeaturesstep_definitions 4. Crie o diretório C:GURUSPCucumberfeaturessupport 5. Instale o Bundler, um gerenciador de dependências, com gem install bundler 6. Execute o comando “bundle init” dentro do diretório Cucumber Adicione as dependências ao Gemfile que foi gerado na raiz do projeto:
 
 # A sample Gemfile
 source "http://rubygems.org"
 
 # gem "rails"
 gem 'selenium-webdriver', '~> 2.48.1' gem 'rspec-expectations', '~> 3.3.1' gem 'cucumber', '~> 2.1.0' 8. Execute o comando "bundle install” 9. E então veremos o status abaixo:
 Bundle complete! 3 Gemfile dependencies, 15 gems now installed. 13
  • 14. www.qualister.com.brwww.qualister.com.br Texto do Título • Nível de Corpo Um – Nível de Corpo Dois • Nível de Corpo Três – Nível de Corpo Quatro » Nível de Corpo Cinco 14 Hands-on
  • 15. www.qualister.com.brwww.qualister.com.br Texto do Título • Nível de Corpo Um – Nível de Corpo Dois • Nível de Corpo Três – Nível de Corpo Quatro » Nível de Corpo Cinco 15 Hands-on Crie dentro do diretório “features” um arquivo chamado gerenciarMovimentacoes.feature” e adicione a ele o seguinte texto: # language: pt Funcionalidade: Gerenciar Movimentações Sendo o administrador de uma loja Posso gerenciar movimentações Para que possa ver, de forma simples, as entradas e saídas de valores Cenário: Gerando uma movimentação de entrada 
 Dado que eu esteja autenticado como administrador E que eu tenha acessado o menu "Movimentações" E clicado em "Nova movimentação” para inserir uma movimentação Quando informar "Entrada" como tipo de movimentação E informar "50,00" como valor da movimentação E Informar "PlayStation e XBox" como itens da movimentação E clicar em "Gravar" Então verei a mensagem "Sucesso ao inserir a movimentação" como sucesso da operação
  • 16. www.qualister.com.brwww.qualister.com.br Texto do Título • Nível de Corpo Um – Nível de Corpo Dois • Nível de Corpo Três – Nível de Corpo Quatro » Nível de Corpo Cinco 16 Hands-on Agora, execute o comando cucumber --color na raiz do projeto e então veremos como foi a execução dos cenários: 1 scenario (1 undefined) 8 steps (8 undefined) 0m0.062s Serão gerados snippets de código para os cenários ainda não definidos, veja um exemplo: You can implement step definitions for undefined steps with these snippets: Dado(/^que eu esteja autenticado como administrador$/) do pending # Write code here end
  • 17. www.qualister.com.brwww.qualister.com.br Texto do Título • Nível de Corpo Um – Nível de Corpo Dois • Nível de Corpo Três – Nível de Corpo Quatro » Nível de Corpo Cinco 17 Hands-on O que faremos agora é criar um arquivo chamado "gerenciarMovimentacoes.rb" no diretório “step_definitions" e então cole o snippet de código que foi copiado do console: # encoding: utf-8 Dado(/^que eu esteja autenticado como administrador$/) do pending # Write code here end Este método propõe que façamos login na aplicação que desejamos testar, então, escreveremos comandos do Selenium Webdriver, que reproduzirão as ações do usuário, começando por abrir o navegador, maximizar a tela e determinar um tempo máximo de espera: @navegador = Selenium::WebDriver.for :firefox @navegador.manage.window.maximize @navegador.manage.timeouts.implicit_wait = 5 O “@“ serve para fazer com que a variável possa navegar por todos os passos do nosso teste. 
 
 Agora iremos navegar até a página inicial de nossa aplicação: @navegador.get ‘http://localhost:4567/quickloja/'
  • 18. www.qualister.com.brwww.qualister.com.br Texto do Título • Nível de Corpo Um – Nível de Corpo Dois • Nível de Corpo Três – Nível de Corpo Quatro » Nível de Corpo Cinco 18 Hands-on E agora, preencher os campos do formulário de login e clicar no botão “Entrar" para ter acesso ao interior da aplicação, veja: @navegador.find_element(:id, 'usuariologin').send_keys("teste") @navegador.find_element(:id, 'usuariosenha').send_keys("123") @navegador.find_element(:css, ‘button[type="submit"]').click Ótimo, já escrevemos o primeiro passo, antes de executá-lo precisamos criar um arquivo “env.rb” no diretório “features/support" e adicionar a ele os requires para o RSpec, Cucumber e Webdriver: # encoding: utf-8 require 'cucumber/formatter/unicode' require 'rspec/expectations' require ‘selenium-webdriver' Agora executaremos os cenários novamente: cucumber --color
  • 19. www.qualister.com.brwww.qualister.com.br Texto do Título • Nível de Corpo Um – Nível de Corpo Dois • Nível de Corpo Três – Nível de Corpo Quatro » Nível de Corpo Cinco 19 Hands-on O resultado será a apresentação do primeiro passo em verde: Dado que eu esteja autenticado como administrador # features/step_definitions/gerenciarMovimentacoes.rb:3 E os demais em amarelo, uma vez que ainda não foram definidos. E o status geral demonstrará o seguinte resultado: 1 scenario (1 undefined) 8 steps (7 undefined, 1 passed) 0m7.539s O próximo passo é copiar o segundo passo e automatizar os testes que demonstram que ele pode ser executado com sucesso, logo, copio o snippet para o arquivo “gerenciarMovimentacoes.rb" e crio a automação para ele, veja: Dado(/^que eu tenha acessado o menu "([^"]*)"$/) do |arg1| pending # Write code here that turns the phrase above into concrete actions
  • 20. www.qualister.com.brwww.qualister.com.br Texto do Título • Nível de Corpo Um – Nível de Corpo Dois • Nível de Corpo Três – Nível de Corpo Quatro » Nível de Corpo Cinco 20 Hands-on Este passo tem duas características diferentes, uma expressão regular e uma variável que receberá o valor extraído por ela, veja: Dado(/^que eu tenha acessado o menu "([^"]*)"$/) do |arg1| pending # Write code here end
 Vamos renomear a variável “arg1" para “menu”. A variável menu possuirá o nome do menu a ser clicado, então nosso código ficará assim: Dado(/^que eu tenha acessado o menu "([^"]*)"$/) do |menu| @navegador.find_element(:link_text, menu).click end Ao executar o teste agora, veremos que dois casos já foram executados, restando agora 7 passos indefinidos, okay, vamos ao próximo: Dado(/^clicado em "([^"]*)" para inserir uma movimentação$/) do | arg1| pending # Write code here end
  • 21. www.qualister.com.brwww.qualister.com.br Texto do Título • Nível de Corpo Um – Nível de Corpo Dois • Nível de Corpo Três – Nível de Corpo Quatro » Nível de Corpo Cinco 21 Hands-on Que ficará assim: Dado(/^clicado em "([^"]*)" para inserir uma movimentação$/) do |botao| @navegador.find_element(:link_text, botao).click end Agora restam 5 passos, vamos ao próximo: Quando(/^informar "([^"]*)" como tipo de movimentação$/) do |arg1| pending # Write code here end Que ficará assim: Quando(/^informar "([^"]*)" como tipo de movimentação$/) do |tipo| movimentacaotipo = Selenium::WebDriver::Support::Select.new(@navegador.find_element(:name, "movimentacaotipo")) movimentacaotipo.select_by(:text, "Saída") # ou :index ou :value end Agora restam 4 passos, o próximo é: Quando(/^informar "([^"]*)" como valor da movimentaçao$/) do |arg1| pending # Write code here end
  • 22. www.qualister.com.brwww.qualister.com.br Texto do Título • Nível de Corpo Um – Nível de Corpo Dois • Nível de Corpo Três – Nível de Corpo Quatro » Nível de Corpo Cinco 22 Hands-on Que ficará assim: Quando(/^informar "([^"]*)" como valor da movimentação$/) do |valor| @navegador.find_element(:name, "movimentacaovalor").send_keys(valor) end Agora restam 3 passos, vamos ao próximo: Quando(/^Informar "([^"]*)" como itens da movimentação$/) do |itens| pending # Write code here end Que ficará assim: Quando(/^Informar "([^"]*)" como itens da movimentação$/) do |itens| @navegador.find_element(:name, "movimentacaoitens").send_keys(itens) end Agora restam 2 passos, o próximo é: Quando(/^clicar em "([^"]*)"$/) do |arg1| pending # Write code here end
  • 23. www.qualister.com.brwww.qualister.com.br Texto do Título • Nível de Corpo Um – Nível de Corpo Dois • Nível de Corpo Três – Nível de Corpo Quatro » Nível de Corpo Cinco 23 Hands-on Que ficará assim: Quando(/^clicar em "([^"]*)"$/) do |botao| @navegador.find_element(:css, ".btn.btn-primary").click end Vamos ao último passo: Entao(/^verei a mensagem "([^"]*)" como sucesso da operação$/) do |arg1| pending # Write code here end Que ficará assim: Entao(/^verei a mensagem "([^"]*)" como sucesso da operação$/) do |msg| expect(@navegador.find_element(:css, ".alert").text).to eq(msg) @navegador.quit end Obs. Note que usamos o método “quit" para fechar o browser ao fim da execução, agora, ao executar o teste teremos o seguinte resultado: 1 scenario (1 passed) 8 steps (8 passed) 0m12.360s
  • 24. www.qualister.com.brwww.qualister.com.br Texto do Título • Nível de Corpo Um – Nível de Corpo Dois • Nível de Corpo Três – Nível de Corpo Quatro » Nível de Corpo Cinco 24 Gerar um relatório de execução no formato HTML cucumber --format html --out relatorio.html Hands-on Saída:
  • 25. www.qualister.com.brwww.qualister.com.br Texto do Título • Nível de Corpo Um – Nível de Corpo Dois • Nível de Corpo Três – Nível de Corpo Quatro » Nível de Corpo Cinco 25 Links interessantes
  • 26. www.qualister.com.brwww.qualister.com.br Texto do Título • Nível de Corpo Um – Nível de Corpo Dois • Nível de Corpo Três – Nível de Corpo Quatro » Nível de Corpo Cinco 26 Documentação da API do Cucumber http://www.rubydoc.info/gems/cucumber/ Cucumber Documentação da API do Selenium WebDriver http://www.rubydoc.info/gems/selenium- webdriver/0.0.28/Selenium/WebDriver https://selenium.googlecode.com/svn/trunk/ docs/api/rb/Selenium/WebDriver.html Relatórios de execução
  • 27. www.qualister.com.brwww.qualister.com.br Texto do Título • Nível de Corpo Um – Nível de Corpo Dois • Nível de Corpo Três – Nível de Corpo Quatro » Nível de Corpo Cinco 27 Slides:
 http://goo.gl/CgaaWo Vídeo da palestra:
 https://youtu.be/-W6335X4jno