1. Mieux vivre avec ses tests
d'acceptance
par Khanh Tuong Maudoux
@jetoile
1
2. 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
3. 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
5. Mieux vivre avec ses tests d’acceptance
Les protagonistes
Cucumber JVM
5
6. Mieux vivre avec ses tests d’acceptance
Les protagonistes
Cucumber JVM
6
• BDD (Behavior Driven Development)
7. Mieux vivre avec ses tests d’acceptance
Les protagonistes
Cucumber JVM
7
• Notions :
– Feature
– Scénario
– Step
8. Mieux vivre avec ses tests d’acceptance
Les protagonistes
Cucumber JVM
8
• Step et Fixture
• 5 types :
– Given
– When
– Then
– And
– But
9. Mieux vivre avec ses tests d’acceptance
Les protagonistes
Cucumber JVM
9
• Step « simple »
10. Mieux vivre avec ses tests d’acceptance
Les protagonistes
Cucumber JVM
10
• Step « paramétrée »
11. Mieux vivre avec ses tests d’acceptance
Les protagonistes
Cucumber JVM
11
• Table
12. Mieux vivre avec ses tests d’acceptance
Les protagonistes
Cucumber JVM
12
• Scenario Outline
13. Mieux vivre avec ses tests d’acceptance
Les protagonistes
Cucumber JVM
13
• Utilisation
– Runner JUnit
14. Mieux vivre avec ses tests d’acceptance
Les protagonistes
Cucumber JVM
14
• Utilisation
– Maven
15. Mieux vivre avec ses tests d’acceptance
Les protagonistes
Cucumber JVM
15
• Utilisation
– IDE
16. 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
17. Mieux vivre avec ses tests d’acceptance
Les protagonistes
Selenium
17
18. Mieux vivre avec ses tests d’acceptance
Les protagonistes
Selenium
18
• Selenium IDE
• WebDriver
• Selenium Server
19. Mieux vivre avec ses tests d’acceptance
Les protagonistes
Selenium
19
• Exemple :
20. Mieux vivre avec ses tests d’acceptance
Les protagonistes
Selenium
20
• Page Object Pattern (1/2) :
21. Mieux vivre avec ses tests d’acceptance
Les protagonistes
Selenium
21
• Page Object Pattern (2/2) :
22. 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
23. 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)
24. Mieux vivre avec ses tests d’acceptance
Les protagonistes
FluentLenium
24
25. Mieux vivre avec ses tests d’acceptance
Les protagonistes
FluentLenium
25
• Surcouche de Selenium
– Fluent API
– Page Object Pattern
26. Mieux vivre avec ses tests d’acceptance
Les protagonistes
FluentLenium
26
• Page (FluentPage)
27. Mieux vivre avec ses tests d’acceptance
Les protagonistes
FluentLenium
27
• Test (FluentTest)
28. Mieux vivre avec ses tests d’acceptance
Les protagonistes
FluentLenium
28
• Test (FluentTest)
29. Mieux vivre avec ses tests d’acceptance
Les protagonistes
FluentLenium
29
• Fluent API (1/2) :
30. Mieux vivre avec ses tests d’acceptance
Les protagonistes
FluentLenium
30
• Fluent API (2/2) :
31. 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)
32. Mieux vivre avec ses tests d’acceptance
Les protagonistes
FluentLenium
32
• Mais…
– JUnit/TestNG
– Pas multi navigateur
– Pas envisageable pour un « recetteur »
34. Mieux vivre avec ses tests d’acceptance
Mise en œuvre
Les problèmes
34
35. Mieux vivre avec ses tests d’acceptance
Mise en œuvre
Les problèmes
35
• Selenium
– RAS modulo les WebDriver…
36. Mieux vivre avec ses tests d’acceptance
Mise en œuvre
Les problèmes
36
• FluentLenium
– 1 méthode = 1 test
37. 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
38. Mieux vivre avec ses tests d’acceptance
Mise en œuvre
Les solutions
38
39. 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
40. Mieux vivre avec ses tests d’acceptance
Mise en œuvre
Le résultat
40
41. Mieux vivre avec ses tests d’acceptance
Mise en œuvre
Le résultat
41
• Test Simple
42. Mieux vivre avec ses tests d’acceptance
Mise en œuvre
Le résultat
42
• Test Simple
43. Mieux vivre avec ses tests d’acceptance
Mise en œuvre
Le résultat
43
• Test Simple
44. Mieux vivre avec ses tests d’acceptance
Mise en œuvre
Le résultat
44
• Test multi navigateur
45. Mieux vivre avec ses tests d’acceptance
Mise en œuvre
Le résultat
45
• Test multi navigateur
46. Mieux vivre avec ses tests d’acceptance
Mise en œuvre
Le résultat
46
• Test multi navigateur