ideais cowabunga - headless testing com ghostdriver

32
Headless Testing com GhostDriver Stefan Teixeira [email protected] / stefanteixeira.com.br 1

Upload: stefan-teixeira

Post on 18-Dec-2014

323 views

Category:

Technology


5 download

DESCRIPTION

Palestra ministrada no evento Ideais Cowabunga, de 22/07/14.

TRANSCRIPT

Page 1: Ideais Cowabunga - Headless Testing com GhostDriver

Headless Testing com GhostDriver

Stefan Teixeira [email protected] / stefanteixeira.com.br

1

Page 2: Ideais Cowabunga - Headless Testing com GhostDriver

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: [email protected] • Twitter: twitter.com/stefan_teixeira • Facebook: facebook.com/stefan.teixeira • LinkedIn: linkedin.com/in/stefanteixeira • GitHub: github.com/stefanteixeira

2

Page 3: Ideais Cowabunga - Headless Testing com GhostDriver

O que é Headless Testing?

3

Page 4: Ideais Cowabunga - Headless Testing com GhostDriver

Testar usando um Headless Browser! :)

4

Page 5: Ideais Cowabunga - Headless Testing com GhostDriver

Headless Browsers

5

Page 6: Ideais Cowabunga - Headless Testing com GhostDriver

PhantomJS

6

Page 7: Ideais Cowabunga - Headless Testing com GhostDriver

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

Page 8: Ideais Cowabunga - Headless Testing com GhostDriver

Frameworks / Test Runners

Frameworks Test Runners

Selenium WebDriver GhostDriver

Capybara Poltergeist

Jasmine Chutzpah

Robot Framework phantomrobot

8

Page 9: Ideais Cowabunga - Headless Testing com GhostDriver

Por que usar?

9

Page 10: Ideais Cowabunga - Headless Testing com GhostDriver

#1: Feedback mais rápido

10

Page 11: Ideais Cowabunga - Headless Testing com GhostDriver

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

Page 12: Ideais Cowabunga - Headless Testing com GhostDriver

– 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

Page 13: Ideais Cowabunga - Headless Testing com GhostDriver

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

Page 14: Ideais Cowabunga - Headless Testing com GhostDriver

#2: Ideal para Smoke Tests

14

Page 15: Ideais Cowabunga - Headless Testing com GhostDriver

!!– 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

Page 16: Ideais Cowabunga - Headless Testing com GhostDriver

#3: Ideal para Integração Contínua

16

Page 17: Ideais Cowabunga - Headless Testing com GhostDriver

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

Page 18: Ideais Cowabunga - Headless Testing com GhostDriver

Atenção!

Testar com um Headless Browser não substitui a necessidade de testar em

browsers reais.

18

Page 19: Ideais Cowabunga - Headless Testing com GhostDriver

GhostDriver

19

Page 20: Ideais Cowabunga - Headless Testing com GhostDriver

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

Page 21: Ideais Cowabunga - Headless Testing com GhostDriver

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

Page 22: Ideais Cowabunga - Headless Testing com GhostDriver

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

Page 23: Ideais Cowabunga - Headless Testing com GhostDriver

Como usar?

!

!

WebDriver driver = new PhantomJSDriver();

23

Page 24: Ideais Cowabunga - Headless Testing com GhostDriver

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

Page 25: Ideais Cowabunga - Headless Testing com GhostDriver

Issues conhecidas

25

Page 26: Ideais Cowabunga - Headless Testing com GhostDriver

#1: Tratamento de alerts github.com/detro/ghostdriver/issues/20

26

Page 27: Ideais Cowabunga - Headless Testing com GhostDriver

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

Page 28: Ideais Cowabunga - Headless Testing com GhostDriver

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

Page 29: Ideais Cowabunga - Headless Testing com GhostDriver

#2: SendKeys dentro de nested frames github.com/detro/ghostdriver/issues/335

29

Page 30: Ideais Cowabunga - Headless Testing com GhostDriver

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

Page 31: Ideais Cowabunga - Headless Testing com GhostDriver

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

Page 32: Ideais Cowabunga - Headless Testing com GhostDriver

Obrigado!

Stefan Teixeira [email protected] stefanteixeira.com.br @stefan_teixeira