SlideShare a Scribd company logo
1 of 86
Download to read offline
El stack de testing de
aceptación definitivo de moda
 el primer trimestre de 2010
  RSpec · Steak · Capybara · RackTest · Culerity · ...


     madrid-rb                                  Sergio Gil
     @madridrb                                  @porras
¿Por qué testing?
¿Por qué testing?
         TDD
Testing = QA
TDD
TDD
medio para otras prácticas
TDD
medio para otras prácticas
         (ágiles)
TDD
medio para otras prácticas
          (ágiles)
 que son el verdadero valor
The Simplest Thing That Could Possibly Work
Dejar que el diseño “emerja”
Refactorización Continua
Refactorización Continua


  Red / Green / Refactor
Integración Continua
Propiedad Colectiva del código
Releases Frecuentes
Despliegue Continuo
¿Es posible Agile
   sin TDD?
¿Por qué testing de
   aceptación?
Es el tipo de testing que más valor aporta
Porque empieza por el interfaz
Porque empieza por el interfaz
 y tu interfaz es tu producto*
Porque empieza por el interfaz
 y tu interfaz es tu producto*




                   *http://gettingreal.37signals.com/ch09_Interface_First.php
Porque te ayuda a pensar realmente en la feature
Porque te ayuda a pensar realmente en la feature
  e implementar exclusivamente lo que hace falta
Porque te ayuda a pensar realmente en la feature
  e implementar exclusivamente lo que hace falta
                 (= aporta valor)
Porque es menos frágil
Porque es menos frágil
(= acoplado a la implementación)
Porque todo lo dicho sobre TDD
 y Agile es especialmente cierto
  con el testing de aceptación
¿Y por qué no
 Cucumber?
<rant>
¡He dicho
que no me gusta el
      pepino!
Porque el texto plano no aporta nada si quienes
  escribimos y leemos somos desarrolladores
     (sólo una capa más a cambio de nada)
Porque el único producto del desarrollo del
software susceptible de validación es el software


                               (Manifiesto Ágil, minuto 1)
Porque el mantenimiento, reutilización y refactorización
de features y steps acaba siendo muy complejo y trabajoso
             (que era lo que queríamos evitar)
</rant>
Steak
 “The minimalist acceptance testing on top of RSpec”
feature "Main page" do

  background do
    create_user :login => "wadus"
  end

  scenario "should show existing books" do
    create_book :title => "The Pragmatic Programmer"

      login_as "wadus"
      visit "/"

    page.should have_css(".book", :text => "The Pragmatic Programmer")
  end

end
feature "Main page" do

  background do
    create_user :login => "wadus"
  end

  scenario "should show existing books" do
    create_book :title => "The Pragmatic Programmer"

      login_as "wadus"
      visit "/"

    page.should have_css(".book", :text => "The Pragmatic Programmer")
  end

end
feature "Main page" do

  background do
    create_user :login => "wadus"
  end

  scenario "should show existing books" do
    create_book :title => "The Pragmatic Programmer"

      login_as "wadus"
      visit "/"

    page.should have_css(".book", :text => "The Pragmatic Programmer")
  end

end
feature "Main page" do

  background do
    create_user :login => "wadus"
  end

  scenario "should show existing books" do
    create_book :title => "The Pragmatic Programmer"

      login_as "wadus"
      visit "/"

    page.should have_css(".book", :text => "The Pragmatic Programmer")
  end

end
feature "Main page" do

  background do
    create_user :login => "wadus"
  end

  scenario "should show existing books" do
    create_book :title => "The Pragmatic Programmer"

      login_as "wadus"
      visit "/"

    page.should have_css(".book", :text => "The Pragmatic Programmer")
  end

end
feature "Main page" do

  background do
    create_user :login => "wadus"
  end

  scenario "should show existing books" do
    create_book :title => "The Pragmatic Programmer"

      login_as "wadus"
      visit "/"

    page.should have_css(".book", :text => "The Pragmatic Programmer")
  end

end
feature "Main page" do

  background do
    create_user :login => "wadus"
  end

  scenario "should show existing books" do
    create_book :title => "The Pragmatic Programmer"

      login_as "wadus"
      visit "/"

    page.should have_css(".book", :text => "The Pragmatic Programmer")
  end

end
RSpec
    “The original Behaviour Driven
   Development framework for Ruby”
describe RSpec do
  it "should be cool" do
    RSpec.should be_cool
  end
end
Capybara
  “DSL for interacting with a web application”
Ideal para testing de aceptación
Ideal para testing de aceptación


           Alto nivel
Ideal para testing de aceptación


            Alto nivel


No se habla de modelos o métodos
Ideal para testing de aceptación


             Alto nivel


No se habla de modelos o métodos


Ni tampoco de acciones o peticiones
Ideal para testing de aceptación


                Alto nivel


   No se habla de modelos o métodos


   Ni tampoco de acciones o peticiones


Sino de páginas, enlaces y formularios
Adaptadores
Adaptadores




 rack_test
Adaptadores




 rack_test
 selenium
Adaptadores




   rack_test
    selenium
celerity/culerity
RackTest




Selenium




Culerity



           0   37,5   75,0   112,5   150,0
API de Capybara




                  visit "/wadus"
API de Capybara




        click_link "Add article"
API de Capybara




        click_link "Add article"
        click "Add article"
API de Capybara



      fill_in "Title", :with => "Wadus"
API de Capybara



      fill_in "Title", :with => "Wadus"
      choose "Option"
API de Capybara



      fill_in "Title", :with => "Wadus"
      choose "Option"
      check "Option"
API de Capybara



      fill_in "Title", :with => "Wadus"
      choose "Option"
      check "Option"
      uncheck "Option"
API de Capybara



      fill_in "Title", :with => "Wadus"
      choose "Option"
      check "Option"
      uncheck "Option"
      select "1980", :from => "Birth Year"
API de Capybara



      fill_in "Title", :with => "Wadus"
      choose "Option"
      check "Option"
      uncheck "Option"
      select "1980", :from => "Birth Year"
      click_button "Save"
API de Capybara



      fill_in "Title", :with => "Wadus"
      choose "Option"
      check "Option"
      uncheck "Option"
      select "1980", :from => "Birth Year"
      click_button "Save"
      click "Save"
API de Capybara




  within :css, ".article:first" do
    click_link "Edit"
  end
API de Capybara




       page.should have_content("Wadus")
API de Capybara




       page.should have_content("Wadus")
       page.should have_no_content("Wadus")
API de Capybara




       page.should have_content("Wadus")
       page.should have_no_content("Wadus")
       page.should have_css(".article", :text => "Wadus")
API de Capybara




       page.should   have_content("Wadus")
       page.should   have_no_content("Wadus")
       page.should   have_css(".article", :text => "Wadus")
       page.should   have_css(".article", :count => 3)
API de Capybara




       page.should   have_content("Wadus")
       page.should   have_no_content("Wadus")
       page.should   have_css(".article", :text => "Wadus")
       page.should   have_css(".article", :count => 3)
       page.should   have_xpath("//*[@class='article']")
API de Capybara




  page.should have_css(".article", :text => "Wadus") do |article|
    article.should have_css(".author", :text => "@porras")
    article.should have_css(".links") do |links|
      links.should have_css("a", :href => "http://wadus.info")
      links.should have_css("a", :href => "http://bit.ly/wadus")
    end
  end
API de Capybara




             save_and_open_page
if Time.now < begins_at + 40.minutes && !me.thirsty?
  me.make :demo
else
  me.show(the_code) && go_to(:bar)
end
if Time.now < begins_at + 40.minutes && !me.thirsty?
  me.make :demo
else
  me.show(the_code) && go_to(:bar)
end




def the_code
  visit "http://github.com/porras/madrid-rb-feb-2010"
end
Otras herramientas
Spork

     Sin spork


    Con spork


                 0   3,75   7,50   11,25 15,00
WebMock

 request(:post, "www.example.com").
                 with(:body => "abc").
                 should have_been_made.once
Delorean

it "should show latest created user" do
  time_travel_to(3.minutes.ago) { create_user :name => "John" }
  time_travel_to(5.minutes.ago) { create_user :name => "Chris" }

  get '/'

  response.should have_text("John")
  response.should_not have_text("Chris")
end
Rakegrowl
¿?
http://cukes.info/
http://github.com/aslakhellesoy/cucumber
http://github.com/cavalle/steak
http://rspec.info/
http://wiki.github.com/dchelimsky/rspec/
http://github.com/dchelimsky/rspec
http://github.com/jnicklas/capybara
http://github.com/brynary/rack-test
http://seleniumhq.org/
http://code.google.com/p/selenium/
http://celerity.rubyforge.org/
http://htmlunit.sourceforge.net/
http://github.com/langalex/culerity
http://github.com/bmabey/database_cleaner
http://github.com/timcharper/spork
http://github.com/bblimke/webmock
http://github.com/bebanjo/delorean
http://github.com/porras/rakegrowl
Gracias :)

More Related Content

Viewers also liked

Negociaciones ue ajonjoli_final
Negociaciones ue ajonjoli_finalNegociaciones ue ajonjoli_final
Negociaciones ue ajonjoli_final
Lourdes Montes
 
Matricula ficha medica-autorizacion
Matricula ficha medica-autorizacionMatricula ficha medica-autorizacion
Matricula ficha medica-autorizacion
Atletico La Solana
 
V5 modelos de optimización de redes v. 5a
V5 modelos de optimización de redes v. 5aV5 modelos de optimización de redes v. 5a
V5 modelos de optimización de redes v. 5a
Carlosjmolestina
 
Satelit tv piala konfederasi
Satelit tv piala konfederasiSatelit tv piala konfederasi
Satelit tv piala konfederasi
Reza Castello
 
Newsletter 1 2010 dt.
Newsletter 1 2010 dt.Newsletter 1 2010 dt.
Newsletter 1 2010 dt.
Dominik Feusi
 
Mercado del metal
Mercado del metalMercado del metal
Mercado del metal
jablas
 

Viewers also liked (14)

Negociaciones ue ajonjoli_final
Negociaciones ue ajonjoli_finalNegociaciones ue ajonjoli_final
Negociaciones ue ajonjoli_final
 
Matricula ficha medica-autorizacion
Matricula ficha medica-autorizacionMatricula ficha medica-autorizacion
Matricula ficha medica-autorizacion
 
V5 modelos de optimización de redes v. 5a
V5 modelos de optimización de redes v. 5aV5 modelos de optimización de redes v. 5a
V5 modelos de optimización de redes v. 5a
 
La prefabricación en hormigón: industrialización, BIM e innovación, tres conc...
La prefabricación en hormigón: industrialización, BIM e innovación, tres conc...La prefabricación en hormigón: industrialización, BIM e innovación, tres conc...
La prefabricación en hormigón: industrialización, BIM e innovación, tres conc...
 
Erp Peoplesoft Functionality Of Crm Software
Erp Peoplesoft Functionality Of Crm SoftwareErp Peoplesoft Functionality Of Crm Software
Erp Peoplesoft Functionality Of Crm Software
 
todo sobre Ergonomía
todo sobre Ergonomíatodo sobre Ergonomía
todo sobre Ergonomía
 
Rrr
RrrRrr
Rrr
 
Des bâtiments en route vers l'exemplarité
Des bâtiments en route vers l'exemplarité Des bâtiments en route vers l'exemplarité
Des bâtiments en route vers l'exemplarité
 
Gifts of Hope Catalog - Christmas 2013
Gifts of Hope Catalog - Christmas 2013Gifts of Hope Catalog - Christmas 2013
Gifts of Hope Catalog - Christmas 2013
 
Cultural planning l'viv 1181
Cultural planning l'viv 1181Cultural planning l'viv 1181
Cultural planning l'viv 1181
 
Satelit tv piala konfederasi
Satelit tv piala konfederasiSatelit tv piala konfederasi
Satelit tv piala konfederasi
 
aplicacion de tecnologia en el aula rural
aplicacion de tecnologia en el aula rural aplicacion de tecnologia en el aula rural
aplicacion de tecnologia en el aula rural
 
Newsletter 1 2010 dt.
Newsletter 1 2010 dt.Newsletter 1 2010 dt.
Newsletter 1 2010 dt.
 
Mercado del metal
Mercado del metalMercado del metal
Mercado del metal
 

Similar to Acceptance testing with Steak and Capybara

Frameworks CSS
Frameworks CSSFrameworks CSS
Frameworks CSS
betabeers
 
Buenas Prácticas de desarrollo en Ruby on Rails
Buenas Prácticas de desarrollo en Ruby on RailsBuenas Prácticas de desarrollo en Ruby on Rails
Buenas Prácticas de desarrollo en Ruby on Rails
Sergio Gil
 

Similar to Acceptance testing with Steak and Capybara (20)

Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos AiresPresentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
 
Javascript en proyectos reales: jQuery
Javascript en proyectos reales: jQueryJavascript en proyectos reales: jQuery
Javascript en proyectos reales: jQuery
 
Estándares Web con Chico UI
Estándares Web con Chico UIEstándares Web con Chico UI
Estándares Web con Chico UI
 
Curso de Django | Django Course
Curso de Django | Django CourseCurso de Django | Django Course
Curso de Django | Django Course
 
Frameworks CSS
Frameworks CSSFrameworks CSS
Frameworks CSS
 
Introducción a los Frameworks CSS
Introducción a los Frameworks CSSIntroducción a los Frameworks CSS
Introducción a los Frameworks CSS
 
Accesibilidad práctica con HTML5, CSS3 y WAI-ARIA
Accesibilidad práctica con HTML5, CSS3 y WAI-ARIAAccesibilidad práctica con HTML5, CSS3 y WAI-ARIA
Accesibilidad práctica con HTML5, CSS3 y WAI-ARIA
 
Buenas Prácticas de desarrollo en Ruby on Rails
Buenas Prácticas de desarrollo en Ruby on RailsBuenas Prácticas de desarrollo en Ruby on Rails
Buenas Prácticas de desarrollo en Ruby on Rails
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
 
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
 
Screen scraping
Screen scrapingScreen scraping
Screen scraping
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on rails
 
Rails intro
Rails introRails intro
Rails intro
 
iDay Feb 2017 - Marcado de datos estructurados. Pónselo fácil a Google
iDay Feb 2017 - Marcado de datos estructurados. Pónselo fácil a GoogleiDay Feb 2017 - Marcado de datos estructurados. Pónselo fácil a Google
iDay Feb 2017 - Marcado de datos estructurados. Pónselo fácil a Google
 
En 20 minutos ... jQuery
En 20 minutos ... jQueryEn 20 minutos ... jQuery
En 20 minutos ... jQuery
 
Java script
Java scriptJava script
Java script
 
Grails: Framework para el desarrollo de aplicaciones Web No 3
Grails: Framework para el desarrollo de aplicaciones Web No 3Grails: Framework para el desarrollo de aplicaciones Web No 3
Grails: Framework para el desarrollo de aplicaciones Web No 3
 
Liferay 6.1 Service Builder
Liferay 6.1  Service BuilderLiferay 6.1  Service Builder
Liferay 6.1 Service Builder
 
El Ferrocarril Contra Los Arboles Muertos2
El Ferrocarril Contra Los Arboles Muertos2El Ferrocarril Contra Los Arboles Muertos2
El Ferrocarril Contra Los Arboles Muertos2
 
Todo lo que necesitas saber sobre Drupal 8
Todo lo que necesitas saber sobre Drupal 8Todo lo que necesitas saber sobre Drupal 8
Todo lo que necesitas saber sobre Drupal 8
 

More from Sergio Gil (8)

Five Languages in a Moment
Five Languages in a MomentFive Languages in a Moment
Five Languages in a Moment
 
A [git] workflow
A [git] workflowA [git] workflow
A [git] workflow
 
The Total IDE
The Total IDEThe Total IDE
The Total IDE
 
El Desarrollador Total
El Desarrollador TotalEl Desarrollador Total
El Desarrollador Total
 
Metaprogramación (en Ruby): programas que escriben programas
Metaprogramación (en Ruby): programas que escriben programasMetaprogramación (en Ruby): programas que escriben programas
Metaprogramación (en Ruby): programas que escriben programas
 
Más allá del testing
Más allá del testingMás allá del testing
Más allá del testing
 
Ruby on Rails
Ruby on RailsRuby on Rails
Ruby on Rails
 
Ruby Mola (y por qué)
Ruby Mola (y por qué)Ruby Mola (y por qué)
Ruby Mola (y por qué)
 

Recently uploaded

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Recently uploaded (11)

Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 

Acceptance testing with Steak and Capybara