Tests Interfaces Web avec Rails
-
Upload
jean-michel-garnier -
Category
Technology
-
view
1.683 -
download
0
description
Transcript of Tests Interfaces Web avec Rails
![Page 1: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/1.jpg)
Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
http://www.21croissants.com
Les Tests d'Interface Web avec Rails
PARIS ON RAILS – 1er Décembre 2008
![Page 2: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/2.jpg)
2
![Page 3: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/3.jpg)
3
Tests unitairesVues, Helpers, js
![Page 4: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/4.jpg)
4Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
test/functional/assert_selectassert_select_RJS
specs/helpersspec/views
OU
Test::Unit
RSpec
2 frameworks de test:
![Page 5: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/5.jpg)
5Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
RSpec minimaliste des Vues
describe "/events/show" do
before(:each) do @event = stub_event_in_barcelona assigns[:event] = @event render('/events/show') end
it "should render correctly an event" do response.should include_text( @event.name ) end
end
![Page 6: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/6.jpg)
6Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
TDD javascript avec ScrewUnit
/!\ Ne pas tester jQuery ou Prototype /!\
http://pivotallabs.com/users/nick/blog/articles/447-screw-unit-0-3
script/plugin install git://github.com/pivotal/screw-unit-server.git
![Page 7: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/7.jpg)
7Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
// RAILS_ROOT/public/javascripts/application.jsrequire("/implementations/application");
Screw.Unit(function() { describe('HelloWorldExampleClass', function() { var hello; describe('#helloWorld', function() { describe('when running ...', function() { before(function() { hello = new HelloWorldExample({}); }); it("should say 'Hello World!'", function() { expect(hello.sayHelloWorld()).to(equal,"Hello World!"); }); }); ...
![Page 8: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/8.jpg)
8Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
script/screw_unit_server http://0.0.0.0:8080/specs
Onclick: lance le test
![Page 9: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/9.jpg)
9
Tests Acceptance Utilisateur avec cucumber
http://github.com/aslakhellesoy/cucumber/wikis/ruby-on-rails
![Page 10: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/10.jpg)
10
Fonctionnalités utilisées
Source:Aslak HellesøyCHAOS report
![Page 11: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/11.jpg)
11
Origine des erreurs
Source:Aslak HellesøyCHAOS report
![Page 12: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/12.jpg)
12Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
Août 2008 : cucumber
Aslak Hellesøy
Fonctionnalité.txt
+ cucumber= Spec exécutable
![Page 13: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/13.jpg)
13
Le dernier joujou des alpha geeks?
![Page 14: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/14.jpg)
14
Fonctionnalité: Addition
Afin de financer mon bonus avec l'argent des pigeons
En tant que trader Je souhaite pouvoir additionner 2 chiffres
Valeur
Rôle
Fonctionnalité
/features/calculatrice.feature
![Page 15: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/15.jpg)
15Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
Scénario: Addition de produits dérivés
Étant donné que je tape 55000000000000
Et que je tape 2
Lorsque je tape additionner
Alors le résultat doit être 5500000000002
GIVEN: contexte, pré-conditions
GIVEN
![Page 16: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/16.jpg)
16Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
Scénario: Addition de produits dérivés
Étant donné que je tape 55000000000000
Et que je tape 2
Lorsque je tape additionner
Alors le résultat doit être 5500000000002
WHEN: événement, action
WHEN
![Page 17: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/17.jpg)
17Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
Boulot du développeur
Aider le client à rédiger des critères d'acceptance
Ecrire le code ruby de chaque « step » pour que les fonctionnalités soient exécutées
![Page 18: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/18.jpg)
18Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
Scénario: Addition de produits dérivés
Étant donné que je tape 55000000000000
Et que je tape 2
Lorsque je tape additionner
Alors le résultat doit être 5500000000002
THEN: résultat, post-conditions
THEN
![Page 19: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/19.jpg)
19Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
Before do @calc = Calcu lat r i ce .newend
# Etant donné que je tape / Et que je tapeGiven /que je tape (\d+)/ do |n| @calc.push n.to_iend
# Lorsque je tape additionnerWhen 'je tape additionner' do @result = @calc.additionnerend
# Alors le résultat doit être ...Then /le résultat doit être (\d*)/ do |expected| @result.should == expected.to_iend
/features/step_definitions/calculatrice.rb
![Page 20: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/20.jpg)
20Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
Exécution: rake features
![Page 21: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/21.jpg)
21Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
Documentation à jour + exécutable
![Page 22: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/22.jpg)
22Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
Le format de Tables à la FIT
Etant donné que je tape 2
Et que je tape 1
Lorsque je tape additionner
Alors le résultat doit être 3
Plus d'exemples:
| a | b | somme |
| 2 | 2 | 4 |
| 2 | 3 | 5 |
![Page 23: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/23.jpg)
23Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
rake features
![Page 24: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/24.jpg)
24
Tests AcceptanceUtilisateur
avec cucumber + webrathttp://github.com/brynary/webrat
![Page 25: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/25.jpg)
25Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
Web Application Ruby Acceptance Testing
![Page 26: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/26.jpg)
26Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
Cucumber /features/step_definitions/common_webrat_steps .fr
Given /^que je suis dans la page de "(.*)"$/ do |url| visits urlend
When /^je tape "(.*)" dans le champ "(.*)"$/ do |value, field| fills_in(field, :with => value)end
When /^je clique sur le bouton "(.*)"$/ do |button| clicks_button(button)end
Then /^je devrais voir le texte "(.*)"$/ do |text| response_body.should contain(text)end
![Page 27: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/27.jpg)
27Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
Limitation de Webrat::RailsSession
« simule » le butineur, pas de render de la page
=> Rapide :-)
=> Pas de support de javascript :-(
![Page 28: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/28.jpg)
28Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
Webrat::CeleritySession
1.1.4 et 6 ou
Basé sur la librarie java HtmlUnit jgem install celerity + toutes tes gems du
projet jruby -S rake features
Prototype Ajax.update ne fonctionne pas :-(
![Page 29: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/29.jpg)
29Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
Webrat::SeleniumSession rocks!
Vidéo Selenium User group (fev 2008) http://www.youtube.com/watch?v=EDb8yOM3Vpw
« Fermes » selenium de google:
50 équipes & 51 000 tests Phillipe Hanrigou:
gem install selenium-client Voir les /examples/ruby de
![Page 30: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/30.jpg)
30
Tester Ajaxavec cucumber + webrat +
seleniumhttp://github.com/ph7/selenium-client/
![Page 31: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/31.jpg)
31Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
La newsletter de lecool
![Page 32: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/32.jpg)
32Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
Fonctionnalité: Programmation d'une journée de la newsletter Afin de gagner du temps dans la programmation de la Newsletter En tant qu'éditeur de lecool, je souhaite pouvoir changer l'ordre des événements par glisser-déposer
Scénario: Etant donné que je suis logged in en tant qu'administrateur Lorsque j'édite la newsletter "Barcelona Selected * 256" Et que je clique sur l'événement "Los buenos muñecos viven para siempre" pour le déposer sur l'événement "La Leyenda de Los Planetas" Alors l'évenement "Los buenos muñecos viven para siempre" devrait être en position 2
![Page 33: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/33.jpg)
33Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
# Etant donné que je suis logged in en tant qu'administrateurGiven /que je suis logged in en tant qu'administrateur/ do user = User.find_by_nickname(...) visits "/admin/login" fills_in("Email", :with => "[email protected]") fills_in("Password", :with => "12345678") clicks_button("Sign in")end
Log:
![Page 34: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/34.jpg)
34Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
# Lorsque j'édite la newsletter "Barcelona Selected * 256"When /^j'édite la newsletter "(.*)"$/ do |name| @newsletter = News le t ter.find_by_title(name) visits"/admin/newsletters/#{@newsletter.id}/edit_newsletter"end
![Page 35: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/35.jpg)
35Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
# Et que je clique sur l'évenement "Los buenos muñecos viven parasiempre" pour le déposer sur l'évenement "La Leyenda de Los Planetas"
When /^que je clique sur l'évenement "(.*)" pour ledéposer sur l'évenement "(.*)"/ do |from_event_name,to_event_name| drag_and_drop_to_object xpath_event(from_event_name),
xpath_event(to_event_name) wait_for_ajaxend
![Page 36: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/36.jpg)
36Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
# Alors l'évenement "Los buenos muñecos viven para siempre"devrait être en position 2
Then /^l'évenement "(.*)" devrait être en position(\d+)/ do |event_name, position| Event.find_by_name(event_name).position_in_newsletter.should == position.to_iend
![Page 37: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/37.jpg)
37Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
Fonctionnalité: Google map
Afin de pouvoir trouver plus facilement le lieu de l'événement En tant que lecteur de lecool, je souhaite pouvoir visualiser une google map Scénario: Voir la carte d'un événement
Etant donné que je suis dans la page de "/cities/barcelona/" Lorsque je clique sur "VIEW MAP" de l'événement "Lube Magazine" Et que je clique sur l'icône de l'événement Alors je devrais voir le texte "Barcelona"
![Page 38: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/38.jpg)
38Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
# Etant donné que je suis dans la page de "/cities/barcelona"Given /^que je suis dans la page de "(.*)"$/ do |url| visits urlend
CENSURE!
![Page 39: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/39.jpg)
39Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
Lorsque je clique sur "VIEW MAP" de l'événement "Lube Magazine"
When /^je clique sur "VIEW MAP" de l'évenement"(.*)"/ do|event_name| event =Event.find_by_name(event_name) clicks "//a[@id=view_map-#{event_id}']" wait_for_ajax end
![Page 40: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/40.jpg)
40
# Et que je clique sur l'icône de l'événementWhen /^que je clique sur l'icône de l'évenement$/ do clicks "mtgt_unnamed_0" # google map iconend
![Page 41: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/41.jpg)
41Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
Selenium IDE à la rescousse
![Page 42: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/42.jpg)
42Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
Ouvre l'éditeur / Debugging
![Page 43: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/43.jpg)
Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
Intégration Continue
http://cruisecontrolrb.thoughtworks.com
cruise add <name> -u <url>cruise start
Hudson http://blog.huikau.com/2008/01/09/jruby-ruby-continuous-integration-with-hudson/
![Page 44: Tests Interfaces Web avec Rails](https://reader033.fdocuments.us/reader033/viewer/2022060117/5584ce49d8b42af8138b4f75/html5/thumbnails/44.jpg)
44Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
Merci de votre attention!
Questions - Réponses