SlideShare a Scribd company logo
1 of 32
Download to read offline
Headless Testing com
GhostDriver
Stefan Teixeira
!
stefanfk@gmail.com / stefanteixeira.com.br
1
Sobre o palestrante
Stefan Teixeira
• QA Engineer @ Orga Systems
• Bacharel em Ciência da Computação pela UFRJ
• Cursando MBA em Garantia de Qualidade de Software na Escola Politécnica
da UFRJ
• Certificado CTAL-TA / CTAL-TM pelo ISTQB e CPRE-FL pelo IREB
• Mantém um blog técnico sobre Testes: stefanteixeira.com.br
!
• Contatos:
• E-mail: stefanfk@gmail.com
• Twitter: twitter.com/stefan_teixeira
• Facebook: facebook.com/stefan.teixeira
• LinkedIn: linkedin.com/in/stefanteixeira
• GitHub: github.com/stefanteixeira
2
O que é Headless
Testing?
3
Testar usando um
Headless Browser! :)
4
Headless Browsers
5
PhantomJS
6
PhantomJS
• Headless Browser mais popular atualmente
• Utiliza engine gráfica WebKit, a mesma usada pelo
Safari e pelo Chrome (até a versão 27 - Abril/2013)
Hoje, o Chrome usa sua própria engine (Blink), que é
um fork do WebKit
• Criado por Ariya Hidayat
• phantomjs.org / https://github.com/ariya/
phantomjs
7
Frameworks / Test Runners
Frameworks Test Runners
Selenium WebDriver GhostDriver
Capybara Poltergeist
Jasmine Chutzpah
Robot Framework phantomrobot
8
Por que usar?
9
#1: Feedback mais
rápido
10
Importância do tempo de build
e feedback
!
• XP (Extreme Programming)
10-minute build
• James Shore (The Art of Agile Development)
10 or 15-minute build
11
– James Shore, The Art of Agile Development
“That’s about the right amount of time to
stretch my legs, get some coffee, and talk over
our work with my pairing partner.”
12
Importância do tempo de build
e feedback
• Dan Bodart
• Palestra “Crazy Fast Build Times - or when 10
seconds starts to make you nervous”
• Mostra formas de reduzir em até 10 vezes o
tempo de build de uma aplicação
• Palestra na InfoQ: http://goo.gl/ScN6HH
13
#2: Ideal para Smoke
Tests
14
!
!
– Definição de Smoke Tests pelo ISTQB (International Software Testing
Qualifications Board)
“Subconjunto de todos os casos de testes
definidos/planejados que cobre as principais
funcionalidades de um componente ou sistema,
para averiguar as principais funções de um
programa em funcionamento sem se preocupar
com maiores detalhes.”
15
#3: Ideal para
Integração Contínua
16
Headless Browsers + CI
!
• Possível rodar os testes no próprio servidor de CI
• Setup simples
• Para projetos no GitHub, o Travis CI oferece
suporte ao PhantomJS por default ;)
17
Atenção!



Testar com um Headless Browser não
substitui a necessidade de testar em
browsers reais.
18
GhostDriver
19
GhostDriver
• Implementação do WebDriver Wire Protocol para o
PhantomJS
• Criado por Ivan De Marino
• Versão atual: 1.1.1 (12/01/2014)
• GitHub: https://github.com/detro/ghostdriver
• Projeto também inclui Java bindings
(PhantomJSDriver)
20
Setup
• Windows: baixar .zip do PhantomJS, extrair, e
adicionar o diretório no PATH
• Ubuntu: http://goo.gl/6Qv9cB
• Mac OS X: brew update && brew install phantomjs
• Versão do Selenium >= 2.33.0
OBS: 2.40.0 já conta com a versão 1.1.0 do
PhantomJSDriver (Java binding)
21
Dependências
•Maven:
<dependency>
<groupId>com.github.detro.ghostdriver</groupId>
<artifactId>phantomjsdriver</artifactId>
<version>1.1.0</version>
</dependency>
!
•Gradle:
dependencies {
…
testCompile “com.github.detro.ghostdriver:phantomjsdriver:1.1.0"
…
}
22
Como usar?
!
!
WebDriver driver = new PhantomJSDriver();
23
Passando CLI arguments
•É possível passar parâmetros de linha de comando do
PhantomJS para o GhostDriver, por exemplo:
ArrayList argumentos = new ArrayList();
argumentos.add(“--ignore-ssl-errors=true”);
argumentos.add(“--ssl-protocol=any”);
argumentos.add(“--proxy-type=none”);
!
DesiredCapabilities caps = DesiredCapabilities.phantomjs();
caps.setCapability(“phantomjs.cli.args”, argumentos);
!
WebDriver driver = new PhantomJSDriver(caps);
!
!
• Lista de parâmetros: phantomjs.org/api/command-
line.html
24
Issues conhecidas
25
#1: Tratamento de alerts



github.com/detro/ghostdriver/issues/20
26
Workaround 1
•Usar JavaScriptExecutor (colocar código antes da
ação que gera o alerta JS):
!
!
((JavaScriptExecutor) driver).executeScript(“window.alert = function(msg)
{};”);
!
!
((JavaScriptExecutor) driver).executeScript(“window.confirm = function(msg)
{return true;};”);
27
Workaround 2
•Usar callbacks do PhantomJS (colocar código antes da
ação que gera o alerta JS)
•A partir da versão 1.1.0 do GhostDriver, é possível
executar código do PhantomJS através do método
executePhantomJS
!
PhantomJSDriver phantom = (PhantomJSDriver) driver;
!
phantom.executePhantomJS(“var page = this;” +
“page.onConfirm = function(msg) {“ +
“console.log(‘CONFIRM: ‘ + msg);” +
“return true;” +
“};”);
28
#2: SendKeys dentro de
nested frames



github.com/detro/ghostdriver/issues/335
29
Problema
• Quando há um campo de texto dentro de nested
frames (frame dentro de um iframe, por exemplo),
o GhostDriver só digita o último caractere :(
• Essa issue ainda não foi investigada, apesar de três
pessoas já terem notificado o problema.
30
Demo
• Teste simples com uma página de exemplo
• Jenkins + GhostDriver (+ Gradle)
• Travis CI + GhostDriver (+ Gradle)
• Projeto de exemplo no GitHub: https://
github.com/stefanteixeira/exemplo-ghostdriver-
gradle
• Slides disponíveis em: http://pt.slideshare.net/
stefanteixeira
31
Obrigado!
Stefan Teixeira
stefanfk@gmail.com
stefanteixeira.com.br
@stefan_teixeira

More Related Content

What's hot

Tester, pegue suas coisas, você está demitido
Tester, pegue suas coisas, você está demitidoTester, pegue suas coisas, você está demitido
Tester, pegue suas coisas, você está demitidoLeonardo Galani
 
Cloud Computing e Integração Contínua com o Windows Azure
Cloud Computing e Integração Contínua com o Windows AzureCloud Computing e Integração Contínua com o Windows Azure
Cloud Computing e Integração Contínua com o Windows AzureGrupo de Testes Carioca
 
Minas Testing Conference 2015 - Visual Regression Testing em ambientes na nuvem
Minas Testing Conference 2015 - Visual Regression Testing em ambientes na nuvemMinas Testing Conference 2015 - Visual Regression Testing em ambientes na nuvem
Minas Testing Conference 2015 - Visual Regression Testing em ambientes na nuvemStefan Teixeira
 
Tdd em django sem desculpas versao final
Tdd em django sem desculpas versao finalTdd em django sem desculpas versao final
Tdd em django sem desculpas versao finalAdriano Petrich
 
Agile Brazil 2014 - Visual Regression Testing com PhantomCSS
Agile Brazil 2014 - Visual Regression Testing com PhantomCSSAgile Brazil 2014 - Visual Regression Testing com PhantomCSS
Agile Brazil 2014 - Visual Regression Testing com PhantomCSSStefan Teixeira
 
Como criar testes rápidos e robustos com Cypress
Como criar testes rápidos e robustos com CypressComo criar testes rápidos e robustos com Cypress
Como criar testes rápidos e robustos com CypressWalmyr Lima e Silva Filho
 
TDC2016SP - Trilha DevOps Java
TDC2016SP - Trilha DevOps JavaTDC2016SP - Trilha DevOps Java
TDC2016SP - Trilha DevOps Javatdc-globalcode
 
Acelere - e melhore! - o feedback com testes automatizados rápidos
Acelere - e melhore! - o feedback com testes automatizados rápidosAcelere - e melhore! - o feedback com testes automatizados rápidos
Acelere - e melhore! - o feedback com testes automatizados rápidosIgor Abade
 
TDC 2016 SP - Cobertura de código de procedures T-SQL com SQLCC
TDC 2016 SP - Cobertura de código de procedures T-SQL com SQLCCTDC 2016 SP - Cobertura de código de procedures T-SQL com SQLCC
TDC 2016 SP - Cobertura de código de procedures T-SQL com SQLCCStefan Teixeira
 
Testes automatizados com Cypress
Testes automatizados com CypressTestes automatizados com Cypress
Testes automatizados com CypressCOTIC-PROEG (UFPA)
 
Novidades das Bibliotecas Jetpack do Android (2021)
Novidades das Bibliotecas Jetpack do Android (2021)Novidades das Bibliotecas Jetpack do Android (2021)
Novidades das Bibliotecas Jetpack do Android (2021)Nelson Glauber Leal
 
Incluindo Ferramentas de Segurança no Pipeline
Incluindo Ferramentas de Segurança no PipelineIncluindo Ferramentas de Segurança no Pipeline
Incluindo Ferramentas de Segurança no PipelineClaudio Romao
 
TDC 2016 SP - Desmistificando cobertura de código como métrica de qualidade
TDC 2016 SP - Desmistificando cobertura de código como métrica de qualidadeTDC 2016 SP - Desmistificando cobertura de código como métrica de qualidade
TDC 2016 SP - Desmistificando cobertura de código como métrica de qualidadeStefan Teixeira
 
[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
 
Criando Desktop Apps com Electron
Criando Desktop Apps com ElectronCriando Desktop Apps com Electron
Criando Desktop Apps com ElectronEmerson Thompson
 
O que é preciso para ser um desenvolvedor Android
O que é preciso para ser um desenvolvedor AndroidO que é preciso para ser um desenvolvedor Android
O que é preciso para ser um desenvolvedor AndroidNelson Glauber Leal
 
Load Testing com VisualStudio + Azure
Load Testing com VisualStudio + AzureLoad Testing com VisualStudio + Azure
Load Testing com VisualStudio + AzureBruno Nunes Trassante
 
Mtc docker - utilizando no seu dia a dia
Mtc   docker - utilizando no seu dia a diaMtc   docker - utilizando no seu dia a dia
Mtc docker - utilizando no seu dia a diaRafael Chiavegatto
 
TDCPOA2018 - Trilha Python - Testes de Performance com Locust
TDCPOA2018 - Trilha Python - Testes de Performance com LocustTDCPOA2018 - Trilha Python - Testes de Performance com Locust
TDCPOA2018 - Trilha Python - Testes de Performance com LocustMayara Fernandes
 
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker Compose
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker ComposeScrum Gathering Rio 2016 - Conteinerizando Testes com Docker Compose
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker ComposeStefan Teixeira
 

What's hot (20)

Tester, pegue suas coisas, você está demitido
Tester, pegue suas coisas, você está demitidoTester, pegue suas coisas, você está demitido
Tester, pegue suas coisas, você está demitido
 
Cloud Computing e Integração Contínua com o Windows Azure
Cloud Computing e Integração Contínua com o Windows AzureCloud Computing e Integração Contínua com o Windows Azure
Cloud Computing e Integração Contínua com o Windows Azure
 
Minas Testing Conference 2015 - Visual Regression Testing em ambientes na nuvem
Minas Testing Conference 2015 - Visual Regression Testing em ambientes na nuvemMinas Testing Conference 2015 - Visual Regression Testing em ambientes na nuvem
Minas Testing Conference 2015 - Visual Regression Testing em ambientes na nuvem
 
Tdd em django sem desculpas versao final
Tdd em django sem desculpas versao finalTdd em django sem desculpas versao final
Tdd em django sem desculpas versao final
 
Agile Brazil 2014 - Visual Regression Testing com PhantomCSS
Agile Brazil 2014 - Visual Regression Testing com PhantomCSSAgile Brazil 2014 - Visual Regression Testing com PhantomCSS
Agile Brazil 2014 - Visual Regression Testing com PhantomCSS
 
Como criar testes rápidos e robustos com Cypress
Como criar testes rápidos e robustos com CypressComo criar testes rápidos e robustos com Cypress
Como criar testes rápidos e robustos com Cypress
 
TDC2016SP - Trilha DevOps Java
TDC2016SP - Trilha DevOps JavaTDC2016SP - Trilha DevOps Java
TDC2016SP - Trilha DevOps Java
 
Acelere - e melhore! - o feedback com testes automatizados rápidos
Acelere - e melhore! - o feedback com testes automatizados rápidosAcelere - e melhore! - o feedback com testes automatizados rápidos
Acelere - e melhore! - o feedback com testes automatizados rápidos
 
TDC 2016 SP - Cobertura de código de procedures T-SQL com SQLCC
TDC 2016 SP - Cobertura de código de procedures T-SQL com SQLCCTDC 2016 SP - Cobertura de código de procedures T-SQL com SQLCC
TDC 2016 SP - Cobertura de código de procedures T-SQL com SQLCC
 
Testes automatizados com Cypress
Testes automatizados com CypressTestes automatizados com Cypress
Testes automatizados com Cypress
 
Novidades das Bibliotecas Jetpack do Android (2021)
Novidades das Bibliotecas Jetpack do Android (2021)Novidades das Bibliotecas Jetpack do Android (2021)
Novidades das Bibliotecas Jetpack do Android (2021)
 
Incluindo Ferramentas de Segurança no Pipeline
Incluindo Ferramentas de Segurança no PipelineIncluindo Ferramentas de Segurança no Pipeline
Incluindo Ferramentas de Segurança no Pipeline
 
TDC 2016 SP - Desmistificando cobertura de código como métrica de qualidade
TDC 2016 SP - Desmistificando cobertura de código como métrica de qualidadeTDC 2016 SP - Desmistificando cobertura de código como métrica de qualidade
TDC 2016 SP - Desmistificando cobertura de código como métrica de qualidade
 
[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)
 
Criando Desktop Apps com Electron
Criando Desktop Apps com ElectronCriando Desktop Apps com Electron
Criando Desktop Apps com Electron
 
O que é preciso para ser um desenvolvedor Android
O que é preciso para ser um desenvolvedor AndroidO que é preciso para ser um desenvolvedor Android
O que é preciso para ser um desenvolvedor Android
 
Load Testing com VisualStudio + Azure
Load Testing com VisualStudio + AzureLoad Testing com VisualStudio + Azure
Load Testing com VisualStudio + Azure
 
Mtc docker - utilizando no seu dia a dia
Mtc   docker - utilizando no seu dia a diaMtc   docker - utilizando no seu dia a dia
Mtc docker - utilizando no seu dia a dia
 
TDCPOA2018 - Trilha Python - Testes de Performance com Locust
TDCPOA2018 - Trilha Python - Testes de Performance com LocustTDCPOA2018 - Trilha Python - Testes de Performance com Locust
TDCPOA2018 - Trilha Python - Testes de Performance com Locust
 
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker Compose
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker ComposeScrum Gathering Rio 2016 - Conteinerizando Testes com Docker Compose
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker Compose
 

Similar to Headless Testing com GhostDriver

Scrum Gathering Rio 2014 - Melhorando sua Estratégia de Testes Automatizados
Scrum Gathering Rio 2014 - Melhorando sua Estratégia de Testes AutomatizadosScrum Gathering Rio 2014 - Melhorando sua Estratégia de Testes Automatizados
Scrum Gathering Rio 2014 - Melhorando sua Estratégia de Testes AutomatizadosStefan Teixeira
 
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 & DevOpsSamanta Cicilia
 
Scrum Gathering Rio 2015 - Testando na nuvem a UI e o JavaScript de sua aplic...
Scrum Gathering Rio 2015 - Testando na nuvem a UI e o JavaScript de sua aplic...Scrum Gathering Rio 2015 - Testando na nuvem a UI e o JavaScript de sua aplic...
Scrum Gathering Rio 2015 - Testando na nuvem a UI e o JavaScript de sua aplic...Stefan Teixeira
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptxCarlos Gonzaga
 
SonarQube
SonarQubeSonarQube
SonarQubeCDS
 
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ápidosElias Nogueira
 
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitDomingos Teruel
 
Treinamento Android Embarcado
Treinamento Android EmbarcadoTreinamento Android Embarcado
Treinamento Android EmbarcadoOdair Sousa
 
[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes AutomatizadosSamanta Cicilia
 
CNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous DeliveryCNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous DeliverySamanta Cicilia
 
UAI Test - Introdução Prática ao Jenkins
UAI Test - Introdução Prática ao JenkinsUAI Test - Introdução Prática ao Jenkins
UAI Test - Introdução Prática ao JenkinsStefan Teixeira
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaAlexandre Tarifa
 
[TheBugConference] Testes automatizados de aplicativos na google cloud
[TheBugConference] Testes automatizados de aplicativos na google cloud[TheBugConference] Testes automatizados de aplicativos na google cloud
[TheBugConference] Testes automatizados de aplicativos na google cloudBárbara Cabral da Conceição, CTFL
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de softwarericardophp
 
Automação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilAutomação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilElias Nogueira
 
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
 
Sonarqube
SonarqubeSonarqube
SonarqubeCDS
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e djangoIgor Sobreira
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesCamilo Ribeiro
 
Robot Framework no DevTests #34
Robot Framework no DevTests #34Robot Framework no DevTests #34
Robot Framework no DevTests #34Mayara Fernandes
 

Similar to Headless Testing com GhostDriver (20)

Scrum Gathering Rio 2014 - Melhorando sua Estratégia de Testes Automatizados
Scrum Gathering Rio 2014 - Melhorando sua Estratégia de Testes AutomatizadosScrum Gathering Rio 2014 - Melhorando sua Estratégia de Testes Automatizados
Scrum Gathering Rio 2014 - Melhorando sua Estratégia de Testes Automatizados
 
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
 
Scrum Gathering Rio 2015 - Testando na nuvem a UI e o JavaScript de sua aplic...
Scrum Gathering Rio 2015 - Testando na nuvem a UI e o JavaScript de sua aplic...Scrum Gathering Rio 2015 - Testando na nuvem a UI e o JavaScript de sua aplic...
Scrum Gathering Rio 2015 - Testando na nuvem a UI e o JavaScript de sua aplic...
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptx
 
SonarQube
SonarQubeSonarQube
SonarQube
 
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
 
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnit
 
Treinamento Android Embarcado
Treinamento Android EmbarcadoTreinamento Android Embarcado
Treinamento Android Embarcado
 
[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados
 
CNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous DeliveryCNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous Delivery
 
UAI Test - Introdução Prática ao Jenkins
UAI Test - Introdução Prática ao JenkinsUAI Test - Introdução Prática ao Jenkins
UAI Test - Introdução Prática ao Jenkins
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
 
[TheBugConference] Testes automatizados de aplicativos na google cloud
[TheBugConference] Testes automatizados de aplicativos na google cloud[TheBugConference] Testes automatizados de aplicativos na google cloud
[TheBugConference] Testes automatizados de aplicativos na google cloud
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de software
 
Automação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilAutomação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira Ágil
 
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
 
Sonarqube
SonarqubeSonarqube
Sonarqube
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e django
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
 
Robot Framework no DevTests #34
Robot Framework no DevTests #34Robot Framework no DevTests #34
Robot Framework no DevTests #34
 

More from Stefan Teixeira

Scrum Gathering Portugal 2016 - Containerizing Tests with Docker
Scrum Gathering Portugal 2016 - Containerizing Tests with DockerScrum Gathering Portugal 2016 - Containerizing Tests with Docker
Scrum Gathering Portugal 2016 - Containerizing Tests with DockerStefan Teixeira
 
Agile Brazil 2016 - 5 fundamentos essenciais de padrões xUnit
Agile Brazil 2016 - 5 fundamentos essenciais de padrões xUnitAgile Brazil 2016 - 5 fundamentos essenciais de padrões xUnit
Agile Brazil 2016 - 5 fundamentos essenciais de padrões xUnitStefan Teixeira
 
Latinoware 2016 - Continuous Delivery com ferramentas open source
Latinoware 2016 - Continuous Delivery com ferramentas open sourceLatinoware 2016 - Continuous Delivery com ferramentas open source
Latinoware 2016 - Continuous Delivery com ferramentas open sourceStefan Teixeira
 
Ágiles 2016 - Using open source tools to support Continuous Delivery
Ágiles 2016 - Using open source tools to support Continuous DeliveryÁgiles 2016 - Using open source tools to support Continuous Delivery
Ágiles 2016 - Using open source tools to support Continuous DeliveryStefan Teixeira
 
6º Encontro do Grupo de Testes Carioca - Testes em um contexto de Continuous ...
6º Encontro do Grupo de Testes Carioca - Testes em um contexto de Continuous ...6º Encontro do Grupo de Testes Carioca - Testes em um contexto de Continuous ...
6º Encontro do Grupo de Testes Carioca - Testes em um contexto de Continuous ...Stefan Teixeira
 
TDC 2016 SP - Continuous Delivery para aplicações Java com ferramentas open-s...
TDC 2016 SP - Continuous Delivery para aplicações Java com ferramentas open-s...TDC 2016 SP - Continuous Delivery para aplicações Java com ferramentas open-s...
TDC 2016 SP - Continuous Delivery para aplicações Java com ferramentas open-s...Stefan Teixeira
 
TDC 2016 SP - 5 libs de teste JavaScript que você deveria conhecer
TDC 2016 SP - 5 libs de teste JavaScript que você deveria conhecerTDC 2016 SP - 5 libs de teste JavaScript que você deveria conhecer
TDC 2016 SP - 5 libs de teste JavaScript que você deveria conhecerStefan Teixeira
 
4º Encontro do Grupo de Testes Carioca - Testes de Carga com Locust
4º Encontro do Grupo de Testes Carioca - Testes de Carga com Locust4º Encontro do Grupo de Testes Carioca - Testes de Carga com Locust
4º Encontro do Grupo de Testes Carioca - Testes de Carga com LocustStefan Teixeira
 
Meetup DevOps Carioca - Testes de Carga com Locust
Meetup DevOps Carioca - Testes de Carga com LocustMeetup DevOps Carioca - Testes de Carga com Locust
Meetup DevOps Carioca - Testes de Carga com LocustStefan Teixeira
 
TDC 2016 Floripa - Criando APIs REST em minutos com Spark + Java 8
TDC 2016 Floripa - Criando APIs REST em minutos com Spark + Java 8TDC 2016 Floripa - Criando APIs REST em minutos com Spark + Java 8
TDC 2016 Floripa - Criando APIs REST em minutos com Spark + Java 8Stefan Teixeira
 
TDC 2016 Floripa - Aprendendo Docker sem bruxaria
TDC 2016 Floripa - Aprendendo Docker sem bruxariaTDC 2016 Floripa - Aprendendo Docker sem bruxaria
TDC 2016 Floripa - Aprendendo Docker sem bruxariaStefan Teixeira
 
TDC 2016 Floripa - Testando APIs REST com Supertest e Promises
TDC 2016 Floripa - Testando APIs REST com Supertest e PromisesTDC 2016 Floripa - Testando APIs REST com Supertest e Promises
TDC 2016 Floripa - Testando APIs REST com Supertest e PromisesStefan Teixeira
 
Agile Testers Conference 2016 - GoCD + Docker + Docker Compose: uma história ...
Agile Testers Conference 2016 - GoCD + Docker + Docker Compose: uma história ...Agile Testers Conference 2016 - GoCD + Docker + Docker Compose: uma história ...
Agile Testers Conference 2016 - GoCD + Docker + Docker Compose: uma história ...Stefan Teixeira
 
VR Dev Summit 2016 - Primeiros Passos em Automação de Testes
VR Dev Summit 2016 - Primeiros Passos em Automação de TestesVR Dev Summit 2016 - Primeiros Passos em Automação de Testes
VR Dev Summit 2016 - Primeiros Passos em Automação de TestesStefan Teixeira
 
Meetup DevOps Carioca - GoCD + Docker + Docker Compose: uma história de amor
Meetup DevOps Carioca - GoCD + Docker + Docker Compose: uma história de amorMeetup DevOps Carioca - GoCD + Docker + Docker Compose: uma história de amor
Meetup DevOps Carioca - GoCD + Docker + Docker Compose: uma história de amorStefan Teixeira
 
Meetup AngularJS Rio - Testes e2e para apps AngularJS com Protractor
Meetup AngularJS Rio - Testes e2e para apps AngularJS com ProtractorMeetup AngularJS Rio - Testes e2e para apps AngularJS com Protractor
Meetup AngularJS Rio - Testes e2e para apps AngularJS com ProtractorStefan Teixeira
 
1º Encontro do Grupo de Testes Carioca - Primeiros Passos em Automação de Testes
1º Encontro do Grupo de Testes Carioca - Primeiros Passos em Automação de Testes1º Encontro do Grupo de Testes Carioca - Primeiros Passos em Automação de Testes
1º Encontro do Grupo de Testes Carioca - Primeiros Passos em Automação de TestesStefan Teixeira
 
Testadores 2015 - O Fantástico Mundo de Docker
Testadores 2015 - O Fantástico Mundo de DockerTestadores 2015 - O Fantástico Mundo de Docker
Testadores 2015 - O Fantástico Mundo de DockerStefan Teixeira
 
Agile Brazil 2015 - Testando na Nuvem a UI e o JavaScript de sua aplicação
Agile Brazil 2015 - Testando na Nuvem a UI e o JavaScript de sua aplicaçãoAgile Brazil 2015 - Testando na Nuvem a UI e o JavaScript de sua aplicação
Agile Brazil 2015 - Testando na Nuvem a UI e o JavaScript de sua aplicaçãoStefan Teixeira
 
TDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de DockerTDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de DockerStefan Teixeira
 

More from Stefan Teixeira (20)

Scrum Gathering Portugal 2016 - Containerizing Tests with Docker
Scrum Gathering Portugal 2016 - Containerizing Tests with DockerScrum Gathering Portugal 2016 - Containerizing Tests with Docker
Scrum Gathering Portugal 2016 - Containerizing Tests with Docker
 
Agile Brazil 2016 - 5 fundamentos essenciais de padrões xUnit
Agile Brazil 2016 - 5 fundamentos essenciais de padrões xUnitAgile Brazil 2016 - 5 fundamentos essenciais de padrões xUnit
Agile Brazil 2016 - 5 fundamentos essenciais de padrões xUnit
 
Latinoware 2016 - Continuous Delivery com ferramentas open source
Latinoware 2016 - Continuous Delivery com ferramentas open sourceLatinoware 2016 - Continuous Delivery com ferramentas open source
Latinoware 2016 - Continuous Delivery com ferramentas open source
 
Ágiles 2016 - Using open source tools to support Continuous Delivery
Ágiles 2016 - Using open source tools to support Continuous DeliveryÁgiles 2016 - Using open source tools to support Continuous Delivery
Ágiles 2016 - Using open source tools to support Continuous Delivery
 
6º Encontro do Grupo de Testes Carioca - Testes em um contexto de Continuous ...
6º Encontro do Grupo de Testes Carioca - Testes em um contexto de Continuous ...6º Encontro do Grupo de Testes Carioca - Testes em um contexto de Continuous ...
6º Encontro do Grupo de Testes Carioca - Testes em um contexto de Continuous ...
 
TDC 2016 SP - Continuous Delivery para aplicações Java com ferramentas open-s...
TDC 2016 SP - Continuous Delivery para aplicações Java com ferramentas open-s...TDC 2016 SP - Continuous Delivery para aplicações Java com ferramentas open-s...
TDC 2016 SP - Continuous Delivery para aplicações Java com ferramentas open-s...
 
TDC 2016 SP - 5 libs de teste JavaScript que você deveria conhecer
TDC 2016 SP - 5 libs de teste JavaScript que você deveria conhecerTDC 2016 SP - 5 libs de teste JavaScript que você deveria conhecer
TDC 2016 SP - 5 libs de teste JavaScript que você deveria conhecer
 
4º Encontro do Grupo de Testes Carioca - Testes de Carga com Locust
4º Encontro do Grupo de Testes Carioca - Testes de Carga com Locust4º Encontro do Grupo de Testes Carioca - Testes de Carga com Locust
4º Encontro do Grupo de Testes Carioca - Testes de Carga com Locust
 
Meetup DevOps Carioca - Testes de Carga com Locust
Meetup DevOps Carioca - Testes de Carga com LocustMeetup DevOps Carioca - Testes de Carga com Locust
Meetup DevOps Carioca - Testes de Carga com Locust
 
TDC 2016 Floripa - Criando APIs REST em minutos com Spark + Java 8
TDC 2016 Floripa - Criando APIs REST em minutos com Spark + Java 8TDC 2016 Floripa - Criando APIs REST em minutos com Spark + Java 8
TDC 2016 Floripa - Criando APIs REST em minutos com Spark + Java 8
 
TDC 2016 Floripa - Aprendendo Docker sem bruxaria
TDC 2016 Floripa - Aprendendo Docker sem bruxariaTDC 2016 Floripa - Aprendendo Docker sem bruxaria
TDC 2016 Floripa - Aprendendo Docker sem bruxaria
 
TDC 2016 Floripa - Testando APIs REST com Supertest e Promises
TDC 2016 Floripa - Testando APIs REST com Supertest e PromisesTDC 2016 Floripa - Testando APIs REST com Supertest e Promises
TDC 2016 Floripa - Testando APIs REST com Supertest e Promises
 
Agile Testers Conference 2016 - GoCD + Docker + Docker Compose: uma história ...
Agile Testers Conference 2016 - GoCD + Docker + Docker Compose: uma história ...Agile Testers Conference 2016 - GoCD + Docker + Docker Compose: uma história ...
Agile Testers Conference 2016 - GoCD + Docker + Docker Compose: uma história ...
 
VR Dev Summit 2016 - Primeiros Passos em Automação de Testes
VR Dev Summit 2016 - Primeiros Passos em Automação de TestesVR Dev Summit 2016 - Primeiros Passos em Automação de Testes
VR Dev Summit 2016 - Primeiros Passos em Automação de Testes
 
Meetup DevOps Carioca - GoCD + Docker + Docker Compose: uma história de amor
Meetup DevOps Carioca - GoCD + Docker + Docker Compose: uma história de amorMeetup DevOps Carioca - GoCD + Docker + Docker Compose: uma história de amor
Meetup DevOps Carioca - GoCD + Docker + Docker Compose: uma história de amor
 
Meetup AngularJS Rio - Testes e2e para apps AngularJS com Protractor
Meetup AngularJS Rio - Testes e2e para apps AngularJS com ProtractorMeetup AngularJS Rio - Testes e2e para apps AngularJS com Protractor
Meetup AngularJS Rio - Testes e2e para apps AngularJS com Protractor
 
1º Encontro do Grupo de Testes Carioca - Primeiros Passos em Automação de Testes
1º Encontro do Grupo de Testes Carioca - Primeiros Passos em Automação de Testes1º Encontro do Grupo de Testes Carioca - Primeiros Passos em Automação de Testes
1º Encontro do Grupo de Testes Carioca - Primeiros Passos em Automação de Testes
 
Testadores 2015 - O Fantástico Mundo de Docker
Testadores 2015 - O Fantástico Mundo de DockerTestadores 2015 - O Fantástico Mundo de Docker
Testadores 2015 - O Fantástico Mundo de Docker
 
Agile Brazil 2015 - Testando na Nuvem a UI e o JavaScript de sua aplicação
Agile Brazil 2015 - Testando na Nuvem a UI e o JavaScript de sua aplicaçãoAgile Brazil 2015 - Testando na Nuvem a UI e o JavaScript de sua aplicação
Agile Brazil 2015 - Testando na Nuvem a UI e o JavaScript de sua aplicação
 
TDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de DockerTDC 2015 POA - O Fantástico Mundo de Docker
TDC 2015 POA - O Fantástico Mundo de Docker
 

Headless Testing com GhostDriver

  • 1. Headless Testing com GhostDriver Stefan Teixeira ! stefanfk@gmail.com / stefanteixeira.com.br 1
  • 2. Sobre o palestrante Stefan Teixeira • QA Engineer @ Orga Systems • Bacharel em Ciência da Computação pela UFRJ • Cursando MBA em Garantia de Qualidade de Software na Escola Politécnica da UFRJ • Certificado CTAL-TA / CTAL-TM pelo ISTQB e CPRE-FL pelo IREB • Mantém um blog técnico sobre Testes: stefanteixeira.com.br ! • Contatos: • E-mail: stefanfk@gmail.com • Twitter: twitter.com/stefan_teixeira • Facebook: facebook.com/stefan.teixeira • LinkedIn: linkedin.com/in/stefanteixeira • GitHub: github.com/stefanteixeira 2
  • 3. O que é Headless Testing? 3
  • 7. PhantomJS • Headless Browser mais popular atualmente • Utiliza engine gráfica WebKit, a mesma usada pelo Safari e pelo Chrome (até a versão 27 - Abril/2013) Hoje, o Chrome usa sua própria engine (Blink), que é um fork do WebKit • Criado por Ariya Hidayat • phantomjs.org / https://github.com/ariya/ phantomjs 7
  • 8. Frameworks / Test Runners Frameworks Test Runners Selenium WebDriver GhostDriver Capybara Poltergeist Jasmine Chutzpah Robot Framework phantomrobot 8
  • 11. Importância do tempo de build e feedback ! • XP (Extreme Programming) 10-minute build • James Shore (The Art of Agile Development) 10 or 15-minute build 11
  • 12. – James Shore, The Art of Agile Development “That’s about the right amount of time to stretch my legs, get some coffee, and talk over our work with my pairing partner.” 12
  • 13. Importância do tempo de build e feedback • Dan Bodart • Palestra “Crazy Fast Build Times - or when 10 seconds starts to make you nervous” • Mostra formas de reduzir em até 10 vezes o tempo de build de uma aplicação • Palestra na InfoQ: http://goo.gl/ScN6HH 13
  • 14. #2: Ideal para Smoke Tests 14
  • 15. ! ! – Definição de Smoke Tests pelo ISTQB (International Software Testing Qualifications Board) “Subconjunto de todos os casos de testes definidos/planejados que cobre as principais funcionalidades de um componente ou sistema, para averiguar as principais funções de um programa em funcionamento sem se preocupar com maiores detalhes.” 15
  • 17. Headless Browsers + CI ! • Possível rodar os testes no próprio servidor de CI • Setup simples • Para projetos no GitHub, o Travis CI oferece suporte ao PhantomJS por default ;) 17
  • 18. Atenção!
 
 Testar com um Headless Browser não substitui a necessidade de testar em browsers reais. 18
  • 20. GhostDriver • Implementação do WebDriver Wire Protocol para o PhantomJS • Criado por Ivan De Marino • Versão atual: 1.1.1 (12/01/2014) • GitHub: https://github.com/detro/ghostdriver • Projeto também inclui Java bindings (PhantomJSDriver) 20
  • 21. Setup • Windows: baixar .zip do PhantomJS, extrair, e adicionar o diretório no PATH • Ubuntu: http://goo.gl/6Qv9cB • Mac OS X: brew update && brew install phantomjs • Versão do Selenium >= 2.33.0 OBS: 2.40.0 já conta com a versão 1.1.0 do PhantomJSDriver (Java binding) 21
  • 23. Como usar? ! ! WebDriver driver = new PhantomJSDriver(); 23
  • 24. Passando CLI arguments •É possível passar parâmetros de linha de comando do PhantomJS para o GhostDriver, por exemplo: ArrayList argumentos = new ArrayList(); argumentos.add(“--ignore-ssl-errors=true”); argumentos.add(“--ssl-protocol=any”); argumentos.add(“--proxy-type=none”); ! DesiredCapabilities caps = DesiredCapabilities.phantomjs(); caps.setCapability(“phantomjs.cli.args”, argumentos); ! WebDriver driver = new PhantomJSDriver(caps); ! ! • Lista de parâmetros: phantomjs.org/api/command- line.html 24
  • 26. #1: Tratamento de alerts
 
 github.com/detro/ghostdriver/issues/20 26
  • 27. Workaround 1 •Usar JavaScriptExecutor (colocar código antes da ação que gera o alerta JS): ! ! ((JavaScriptExecutor) driver).executeScript(“window.alert = function(msg) {};”); ! ! ((JavaScriptExecutor) driver).executeScript(“window.confirm = function(msg) {return true;};”); 27
  • 28. Workaround 2 •Usar callbacks do PhantomJS (colocar código antes da ação que gera o alerta JS) •A partir da versão 1.1.0 do GhostDriver, é possível executar código do PhantomJS através do método executePhantomJS ! PhantomJSDriver phantom = (PhantomJSDriver) driver; ! phantom.executePhantomJS(“var page = this;” + “page.onConfirm = function(msg) {“ + “console.log(‘CONFIRM: ‘ + msg);” + “return true;” + “};”); 28
  • 29. #2: SendKeys dentro de nested frames
 
 github.com/detro/ghostdriver/issues/335 29
  • 30. Problema • Quando há um campo de texto dentro de nested frames (frame dentro de um iframe, por exemplo), o GhostDriver só digita o último caractere :( • Essa issue ainda não foi investigada, apesar de três pessoas já terem notificado o problema. 30
  • 31. Demo • Teste simples com uma página de exemplo • Jenkins + GhostDriver (+ Gradle) • Travis CI + GhostDriver (+ Gradle) • Projeto de exemplo no GitHub: https:// github.com/stefanteixeira/exemplo-ghostdriver- gradle • Slides disponíveis em: http://pt.slideshare.net/ stefanteixeira 31