testando interfaces web
       @andrewsmedina
andrews medina


•?
andrews medina


• o que os outros pensam...
andrews medina


• o que eu penso...
andrews medina


• o que minha mãe pensa...
andrews medina


• como realmente é!
interfaces?
http://farm4.static.flickr.com/3293/3045994303_6f2a4f36d2.jpg
http://farm4.static.flickr.com/3522/3468280305_fb2681f996.jpg
testes?
teste + interface = ???

•   porque testar?

•   o que testar?

•   como testar?

•   quando testar?
porque testar?



•   garantir que a interface está tendo o comportamento esperado
o que testar?


•   css?

•   visual?

•   comportamento/funcionamento?
o que testar?


• css?
• visual?
• comportamento/funcionamento!
o que testar?


•   interface?

•   componentes?
o que testar?



• interface e componentes!
componente?
como testar?


•   componentes

•   interface
testando componentes


•   qUnit

•   jasmine
qUnit

•   jquey

•   unitário

•   api “feia”

•   ruim para testes assíncronos
jasmine

•   bdd

•   api “bonita”

•   inspirado no rspec

•   baseado em tópicos

•   bom para testes assíncronos
como rodar jasmine/qunit?



•   jasmine-splinter-runner
como rodar jasmine/qunit?


•   abrir o browser toda vez para rodar um teste?

•   jasmine/qunit + integração contínua (ci) ?
jasmine-splinter-runner



•   https://github.com/cobrateam/jasmine-splinter-runner
jasmine-splinter-runner


•   pip install jasmine-splinter-runner

•   jasmine-splinter URI
testando interfaces
•   selenium 1.0   •   htmlunit

•   pyccuracy      •   zombie.js

•   selenium 2.0   •   zope testbrowser

•   capybara       •   mechanize

•   splinter       •   phantomjs
selenium 1

•   lento

•   necessita de server

•   obsoleto

•   funcionalidades legais
selenium 2

•   não necessita server

•   vários browsers (firefox, ie, opera, chrome)

•   instável

•   diferença entre browsers (api)

•   features legais
zope testbrowser

•   rápido

•   headless

•   não renderiza js

•   api estável

•   trata formulários de forma especial
zombie.js

•   rápido

•   headless

•   suporta js

•   node.js

•   instável
htmlunit

•   rápido

•   headless

•   suporta js

•   java :-(
webkit

•   rápido

•   headless

•   suporta js

•   phantomjs, ghost.py
headless ou não headless?
headless

• rápido
• não consome muitos recursos (memória x processamento)
• difícil de debugar
• mas não é um browser...
não headless


•   lento

•   usa o browser

•   fácil de debugar (você pode ver o que está acontecendo)
headless + não headless
headless


•   TDD

•   executar os testes localmente
não headless


•   escrever os testes

•   rodar os testes em uma máquina de integração contínua (ci)
headless + não headless?



•   #comofaz???
headless + não headless?


•   capybara

•   splinter
capybara

•   api

•   ruby

•   drivers: firefox

•   third party drivers: webkit, chrome, zombie.js...
capybara


•   seletores css, xpath, tag, name

•   ajax

•   javascript
splinter

•   api

•   python

•   drivers: chrome, firefox, zope testbrowser

•   em andamento: webkit, zombie.js
splinter
•   seletores css, xpath, tag, name

•   ajax

•   javascript

•   cookies

•   iframes, alerts

•   http status code
bônus!


•   http://sikuli.org/

•   http://needle.readthedocs.org/
perguntas?
 @andrewsmedina
andrewsmedina.com

testando interfaces web