Mieux vivre avec ses tests
d'acceptance
par Khanh Tuong Maudoux
@jetoile
1
Mieux vivre avec ses tests d’acceptance
Au programme…
• Les protagonistes
– Cucumber JVM
– Selenium 2
– FluentLenium
• Mise en œuvre
– Les problèmes
– Les solutions
– Le résultat
2
Mieux vivre avec ses tests d’acceptance
Qui je suis…
• Khanh Tuong Maudoux
• Développeur Java indépendant
• blog : http://blog.jetoile.fr
• @jetoile
• khanh.maudoux@jetoile.fr
3
Mieux vivre avec ses tests d’acceptance
Les protagonistes
4
Mieux vivre avec ses tests d’acceptance
Les protagonistes
Cucumber JVM
5
Mieux vivre avec ses tests d’acceptance
Les protagonistes
Cucumber JVM
6
• BDD (Behavior Driven Development)
Mieux vivre avec ses tests d’acceptance
Les protagonistes
Cucumber JVM
7
• Notions :
– Feature
– Scénario
– Step
Mieux vivre avec ses tests d’acceptance
Les protagonistes
Cucumber JVM
8
• Step et Fixture
• 5 types :
– Given
– When
– Then
– And
– But
Mieux vivre avec ses tests d’acceptance
Les protagonistes
Cucumber JVM
9
• Step « simple »
Mieux vivre avec ses tests d’acceptance
Les protagonistes
Cucumber JVM
10
• Step « paramétrée »
Mieux vivre avec ses tests d’acceptance
Les protagonistes
Cucumber JVM
11
• Table
Mieux vivre avec ses tests d’acceptance
Les protagonistes
Cucumber JVM
12
• Scenario Outline
Mieux vivre avec ses tests d’acceptance
Les protagonistes
Cucumber JVM
13
• Utilisation
– Runner JUnit
Mieux vivre avec ses tests d’acceptance
Les protagonistes
Cucumber JVM
14
• Utilisation
– Maven
Mieux vivre avec ses tests d’acceptance
Les protagonistes
Cucumber JVM
15
• Utilisation
– IDE
Mieux vivre avec ses tests d’acceptance
Les protagonistes
Cucumber JVM
16
• Mais…
– Pas d’héritage entre classes de Step
⇒utilisation de l’injection
– Instanciation de toutes les classes de Step
– Step Hell
– Peu de choses
⇒Obligé de réécrire les fixtures
– Pas de partage entre Step
⇒Variable statique ou injection
Mieux vivre avec ses tests d’acceptance
Les protagonistes
Selenium
17
Mieux vivre avec ses tests d’acceptance
Les protagonistes
Selenium
18
• Selenium IDE
• WebDriver
• Selenium Server
Mieux vivre avec ses tests d’acceptance
Les protagonistes
Selenium
19
• Exemple :
Mieux vivre avec ses tests d’acceptance
Les protagonistes
Selenium
20
• Page Object Pattern (1/2) :
Mieux vivre avec ses tests d’acceptance
Les protagonistes
Selenium
21
• Page Object Pattern (2/2) :
Mieux vivre avec ses tests d’acceptance
Les protagonistes
Selenium
22
• Mais…
– Selenium IDE : à oublier!
– Verbeux
⇒Page Object Pattern
– Difficilement maintenable
⇒Obligé de fournir une surcouche
Mieux vivre avec ses tests d’acceptance
Les protagonistes
Selenium
23
• Mais…
– WebDriver Hell
⇒Compatibilité
⇒Options
⇒Bridge (ChromeDriver, …)
– [Selenium Server] Les agents
– Attention à la version (ex : upgrade Firefox)
Mieux vivre avec ses tests d’acceptance
Les protagonistes
FluentLenium
24
Mieux vivre avec ses tests d’acceptance
Les protagonistes
FluentLenium
25
• Surcouche de Selenium
– Fluent API
– Page Object Pattern
Mieux vivre avec ses tests d’acceptance
Les protagonistes
FluentLenium
26
• Page (FluentPage)
Mieux vivre avec ses tests d’acceptance
Les protagonistes
FluentLenium
27
• Test (FluentTest)
Mieux vivre avec ses tests d’acceptance
Les protagonistes
FluentLenium
28
• Test (FluentTest)
Mieux vivre avec ses tests d’acceptance
Les protagonistes
FluentLenium
29
• Fluent API (1/2) :
Mieux vivre avec ses tests d’acceptance
Les protagonistes
FluentLenium
30
• Fluent API (2/2) :
Mieux vivre avec ses tests d’acceptance
Les protagonistes
FluentLenium
31
• Extensible
– FluentAdapter
• initFluent()
• initTest()
• Nouvelles annotations
– @SharedDriver(type=SharedDriver.PER_CLASS)
– @SharedDriver(type=SharedDriver.ONCE)
– @SharedDriver(type=SharedDriver.PER_METHOD)
Mieux vivre avec ses tests d’acceptance
Les protagonistes
FluentLenium
32
• Mais…
– JUnit/TestNG
– Pas multi navigateur
– Pas envisageable pour un « recetteur »
Mieux vivre avec ses tests d’acceptance
Mise en œuvre
33
Mieux vivre avec ses tests d’acceptance
Mise en œuvre
Les problèmes
34
Mieux vivre avec ses tests d’acceptance
Mise en œuvre
Les problèmes
35
• Selenium
– RAS modulo les WebDriver…
Mieux vivre avec ses tests d’acceptance
Mise en œuvre
Les problèmes
36
• FluentLenium
– 1 méthode = 1 test
Mieux vivre avec ses tests d’acceptance
Mise en œuvre
Les problèmes
37
• Cucumber JVM
– 1 méthode par step
– Les steps d’un scénario peuvent être dans différentes
classes
– Pas d’héritage mais de l’injection
– Instanciation des classes au démarrage
Mieux vivre avec ses tests d’acceptance
Mise en œuvre
Les solutions
38
Mieux vivre avec ses tests d’acceptance
Mise en œuvre
Les solutions
39
• Mise en œuvre :
– FluentCucumberTest
– Nouvelles annotations
• @SharedDriver(type = SharedDriver.PER_FEATURE)
• @SharedDriver(type = SharedDriver.PER_SCENARIO)
– Scénario Outline
Mieux vivre avec ses tests d’acceptance
Mise en œuvre
Le résultat
40
Mieux vivre avec ses tests d’acceptance
Mise en œuvre
Le résultat
41
• Test Simple
Mieux vivre avec ses tests d’acceptance
Mise en œuvre
Le résultat
42
• Test Simple
Mieux vivre avec ses tests d’acceptance
Mise en œuvre
Le résultat
43
• Test Simple
Mieux vivre avec ses tests d’acceptance
Mise en œuvre
Le résultat
44
• Test multi navigateur
Mieux vivre avec ses tests d’acceptance
Mise en œuvre
Le résultat
45
• Test multi navigateur
Mieux vivre avec ses tests d’acceptance
Mise en œuvre
Le résultat
46
• Test multi navigateur
Mieux vivre avec ses tests d’acceptance
Conclusion
Cool !
47
Mieux vivre avec ses tests d’acceptance
Conclusion
• Code :
– https://github.com/jetoile/sample-cucumber
• FluentLenium
– http://fluentlenium.org/
– http://fr.slideshare.net/MathildeLemee/fluentlenium
• Cucumber JVM
– https://github.com/cucumber/cucumber-jvm
• Selenium
– http://docs.seleniumhq.org/
48
Mieux vivre avec ses tests d’acceptance
Questions ?
49
Mieux vivre avec ses tests d’acceptance
Merci !
50

Comment mieux vivre avec ses tests d'acceptance

  • 1.
    Mieux vivre avecses tests d'acceptance par Khanh Tuong Maudoux @jetoile 1
  • 2.
    Mieux vivre avecses tests d’acceptance Au programme… • Les protagonistes – Cucumber JVM – Selenium 2 – FluentLenium • Mise en œuvre – Les problèmes – Les solutions – Le résultat 2
  • 3.
    Mieux vivre avecses tests d’acceptance Qui je suis… • Khanh Tuong Maudoux • Développeur Java indépendant • blog : http://blog.jetoile.fr • @jetoile • khanh.maudoux@jetoile.fr 3
  • 4.
    Mieux vivre avecses tests d’acceptance Les protagonistes 4
  • 5.
    Mieux vivre avecses tests d’acceptance Les protagonistes Cucumber JVM 5
  • 6.
    Mieux vivre avecses tests d’acceptance Les protagonistes Cucumber JVM 6 • BDD (Behavior Driven Development)
  • 7.
    Mieux vivre avecses tests d’acceptance Les protagonistes Cucumber JVM 7 • Notions : – Feature – Scénario – Step
  • 8.
    Mieux vivre avecses tests d’acceptance Les protagonistes Cucumber JVM 8 • Step et Fixture • 5 types : – Given – When – Then – And – But
  • 9.
    Mieux vivre avecses tests d’acceptance Les protagonistes Cucumber JVM 9 • Step « simple »
  • 10.
    Mieux vivre avecses tests d’acceptance Les protagonistes Cucumber JVM 10 • Step « paramétrée »
  • 11.
    Mieux vivre avecses tests d’acceptance Les protagonistes Cucumber JVM 11 • Table
  • 12.
    Mieux vivre avecses tests d’acceptance Les protagonistes Cucumber JVM 12 • Scenario Outline
  • 13.
    Mieux vivre avecses tests d’acceptance Les protagonistes Cucumber JVM 13 • Utilisation – Runner JUnit
  • 14.
    Mieux vivre avecses tests d’acceptance Les protagonistes Cucumber JVM 14 • Utilisation – Maven
  • 15.
    Mieux vivre avecses tests d’acceptance Les protagonistes Cucumber JVM 15 • Utilisation – IDE
  • 16.
    Mieux vivre avecses tests d’acceptance Les protagonistes Cucumber JVM 16 • Mais… – Pas d’héritage entre classes de Step ⇒utilisation de l’injection – Instanciation de toutes les classes de Step – Step Hell – Peu de choses ⇒Obligé de réécrire les fixtures – Pas de partage entre Step ⇒Variable statique ou injection
  • 17.
    Mieux vivre avecses tests d’acceptance Les protagonistes Selenium 17
  • 18.
    Mieux vivre avecses tests d’acceptance Les protagonistes Selenium 18 • Selenium IDE • WebDriver • Selenium Server
  • 19.
    Mieux vivre avecses tests d’acceptance Les protagonistes Selenium 19 • Exemple :
  • 20.
    Mieux vivre avecses tests d’acceptance Les protagonistes Selenium 20 • Page Object Pattern (1/2) :
  • 21.
    Mieux vivre avecses tests d’acceptance Les protagonistes Selenium 21 • Page Object Pattern (2/2) :
  • 22.
    Mieux vivre avecses tests d’acceptance Les protagonistes Selenium 22 • Mais… – Selenium IDE : à oublier! – Verbeux ⇒Page Object Pattern – Difficilement maintenable ⇒Obligé de fournir une surcouche
  • 23.
    Mieux vivre avecses tests d’acceptance Les protagonistes Selenium 23 • Mais… – WebDriver Hell ⇒Compatibilité ⇒Options ⇒Bridge (ChromeDriver, …) – [Selenium Server] Les agents – Attention à la version (ex : upgrade Firefox)
  • 24.
    Mieux vivre avecses tests d’acceptance Les protagonistes FluentLenium 24
  • 25.
    Mieux vivre avecses tests d’acceptance Les protagonistes FluentLenium 25 • Surcouche de Selenium – Fluent API – Page Object Pattern
  • 26.
    Mieux vivre avecses tests d’acceptance Les protagonistes FluentLenium 26 • Page (FluentPage)
  • 27.
    Mieux vivre avecses tests d’acceptance Les protagonistes FluentLenium 27 • Test (FluentTest)
  • 28.
    Mieux vivre avecses tests d’acceptance Les protagonistes FluentLenium 28 • Test (FluentTest)
  • 29.
    Mieux vivre avecses tests d’acceptance Les protagonistes FluentLenium 29 • Fluent API (1/2) :
  • 30.
    Mieux vivre avecses tests d’acceptance Les protagonistes FluentLenium 30 • Fluent API (2/2) :
  • 31.
    Mieux vivre avecses tests d’acceptance Les protagonistes FluentLenium 31 • Extensible – FluentAdapter • initFluent() • initTest() • Nouvelles annotations – @SharedDriver(type=SharedDriver.PER_CLASS) – @SharedDriver(type=SharedDriver.ONCE) – @SharedDriver(type=SharedDriver.PER_METHOD)
  • 32.
    Mieux vivre avecses tests d’acceptance Les protagonistes FluentLenium 32 • Mais… – JUnit/TestNG – Pas multi navigateur – Pas envisageable pour un « recetteur »
  • 33.
    Mieux vivre avecses tests d’acceptance Mise en œuvre 33
  • 34.
    Mieux vivre avecses tests d’acceptance Mise en œuvre Les problèmes 34
  • 35.
    Mieux vivre avecses tests d’acceptance Mise en œuvre Les problèmes 35 • Selenium – RAS modulo les WebDriver…
  • 36.
    Mieux vivre avecses tests d’acceptance Mise en œuvre Les problèmes 36 • FluentLenium – 1 méthode = 1 test
  • 37.
    Mieux vivre avecses tests d’acceptance Mise en œuvre Les problèmes 37 • Cucumber JVM – 1 méthode par step – Les steps d’un scénario peuvent être dans différentes classes – Pas d’héritage mais de l’injection – Instanciation des classes au démarrage
  • 38.
    Mieux vivre avecses tests d’acceptance Mise en œuvre Les solutions 38
  • 39.
    Mieux vivre avecses tests d’acceptance Mise en œuvre Les solutions 39 • Mise en œuvre : – FluentCucumberTest – Nouvelles annotations • @SharedDriver(type = SharedDriver.PER_FEATURE) • @SharedDriver(type = SharedDriver.PER_SCENARIO) – Scénario Outline
  • 40.
    Mieux vivre avecses tests d’acceptance Mise en œuvre Le résultat 40
  • 41.
    Mieux vivre avecses tests d’acceptance Mise en œuvre Le résultat 41 • Test Simple
  • 42.
    Mieux vivre avecses tests d’acceptance Mise en œuvre Le résultat 42 • Test Simple
  • 43.
    Mieux vivre avecses tests d’acceptance Mise en œuvre Le résultat 43 • Test Simple
  • 44.
    Mieux vivre avecses tests d’acceptance Mise en œuvre Le résultat 44 • Test multi navigateur
  • 45.
    Mieux vivre avecses tests d’acceptance Mise en œuvre Le résultat 45 • Test multi navigateur
  • 46.
    Mieux vivre avecses tests d’acceptance Mise en œuvre Le résultat 46 • Test multi navigateur
  • 47.
    Mieux vivre avecses tests d’acceptance Conclusion Cool ! 47
  • 48.
    Mieux vivre avecses tests d’acceptance Conclusion • Code : – https://github.com/jetoile/sample-cucumber • FluentLenium – http://fluentlenium.org/ – http://fr.slideshare.net/MathildeLemee/fluentlenium • Cucumber JVM – https://github.com/cucumber/cucumber-jvm • Selenium – http://docs.seleniumhq.org/ 48
  • 49.
    Mieux vivre avecses tests d’acceptance Questions ? 49
  • 50.
    Mieux vivre avecses tests d’acceptance Merci ! 50