Upload
jean-michel-garnier
View
1.693
Download
0
Tags:
Embed Size (px)
DESCRIPTION
Presentation made a Paris on Rails 2008 about User Acceptance Testing with cucumber + webrat & selenium
Citation preview
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
2
3
Tests unitairesVues, Helpers, js
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:
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
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
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!"); }); }); ...
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
9
Tests Acceptance Utilisateur avec cucumber
http://github.com/aslakhellesoy/cucumber/wikis/ruby-on-rails
10
Fonctionnalités utilisées
Source:Aslak HellesøyCHAOS report
11
Origine des erreurs
Source:Aslak HellesøyCHAOS report
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
13
Le dernier joujou des alpha geeks?
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
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
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
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
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
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
20Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
Exécution: rake features
21Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
Documentation à jour + exécutable
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 |
23Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
rake features
24
Tests AcceptanceUtilisateur
avec cucumber + webrathttp://github.com/brynary/webrat
25Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
Web Application Ruby Acceptance Testing
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
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 :-(
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 :-(
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
30
Tester Ajaxavec cucumber + webrat +
seleniumhttp://github.com/ph7/selenium-client/
31Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
La newsletter de lecool
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
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:
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
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
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
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"
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!
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
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
41Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
Selenium IDE à la rescousse
42Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
Ouvre l'éditeur / Debugging
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/
44Paris On Rail 2008 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.
Merci de votre attention!
Questions - Réponses