SlideShare a Scribd company logo
1 of 24
Eclipse Party 2011




             SWTBot




             Mariot Chauvin
             Obeo, France



copyright 2011 Obeo
Unit tests
Functional tests
Functional tests


                    manual
                      vs
                   automatic
Manual functional tests
UI tests
Controls finding
Threads management

 ●   Tests non bloquants
 ●   Exécution dans un thread à part
 ●   Gestion de la synchronisation
Threads management

Standard JUnit test is launched in the UI thread

/**
 * Wait the end of the asynchronous calls waiting in UI thread.
 */
public static void synchronizationWithUIThread() {
    while (PlatformUI.getWorkbench().getDisplay().readAndDispatch()) {
        // Do nothing, just wait
    }
}
SWTBot
SWTBot features


  ●   API de type Fluent
  ●   Integration avec JUnit
  ●   Gestion des threads
  ●   Gestion des évenements SWT
  ●   Support de GEF
  ●   Support de Eclipse forms
SWTBot example

    @Test
public void canCreateANewJavaProject() throws Exception {
    bot.menu("File").menu("New").menu("Project...").click();
    SWTBotShell shell = bot.shell("New Project");
    shell.activate();


    bot.tree().select("Java Project");
    bot.button("Next >").click();
    bot.textWithLabel("Project name:").setText("MyFirstProject");
    bot.button("Finish").click();
}
SWTBot Widgets


  ●   Wrapper : API fluent et gestion des threads
  ●   Exécution synchrone des requêtes
  ●   Exécution asynchrone des commandes
SWTBot Matchers


  ●   Utilisation de Hamcrest
  ●   Création de regles de correspondance
  ●   Bot.widget(
      WidgetMatcherFactory.widgetOfType(StyledText.class),
      composite);
Matchers creation


  ●   Utilisation de WidgetMatcherFactory
  ●   withText(“Finish”)
  ●   withLabel(“Username”)
  ●   withRegex(“Proceed to step (.*)”)
  ●   widgetOfType(Button.class)
  ●   withStyle(SWT.ARROW, “SWT.ARROW”)
  ●   withTooltip(“Enable to drink”)
Matchers combination


  ●   allOf(matchers...)
  ●   anyOf(matchers…)
  ●   not(matcher)
  ●   allOf(anyOf(matchers…), matchers...)
SWTBot conditions


  ●   Ecriture de test robustes et fiables
  ●   Eviter d'utiliser wait(long time)
  ●   Utiliser waitUntil(ICondition condition)
Tips
Logging


  ●   Utilisation de log4j
  ●   Pensez à l'activer
  ●   Voir la FAQ pour l'activation
Screenshots


              ●   Un réalisé par erreur
              ●   Pratique pour debugger
Timeout

 ●   Temps d'attente pour les conditions
 ●   Modifiable globalement ou localement
 ●   SWTBotPreferences.TIMEOUT
Need a tutorial ?
 http://bit.ly/uLsBJ
Thanks



         Questions ??
Copyright SXC - http://www.sxc.hu/txt/license.html

●   Boxing gloves : http://www.sxc.hu/photo/901672

●   Camera : http://www.sxc.hu/photo/733375

●   Watch : http://www.sxc.hu/photo/1154499

●   Bots : http://www.sxc.hu/photo/914512 and http://www.sxc.hu/photo/914514

●   Book : http://www.sxc.hu/photo/634335

More Related Content

What's hot

Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPIndustrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPhalleck45
 
Automatiser les tests d'acceptation : comment s'y prendre ?
Automatiser les tests d'acceptation : comment s'y prendre ?Automatiser les tests d'acceptation : comment s'y prendre ?
Automatiser les tests d'acceptation : comment s'y prendre ?Vincent Tencé
 
Benchmark et comparaison de performance en JavaScript
Benchmark et comparaison de performance en JavaScriptBenchmark et comparaison de performance en JavaScript
Benchmark et comparaison de performance en JavaScriptjwajsberg
 
Evolutions scub foundation 3.0 = 4.0
Evolutions scub foundation 3.0 =  4.0Evolutions scub foundation 3.0 =  4.0
Evolutions scub foundation 3.0 = 4.0adrienhautot
 
Les Aventures d'Alice - la Révolte des Tests
Les Aventures d'Alice - la Révolte des TestsLes Aventures d'Alice - la Révolte des Tests
Les Aventures d'Alice - la Révolte des TestsLy-Jia Goldstein
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Ippon
 
Outils et pratiques : tester une application web moderne
Outils et pratiques : tester une application web moderneOutils et pratiques : tester une application web moderne
Outils et pratiques : tester une application web modernehalleck45
 
Intro sur les tests unitaires
Intro sur les tests unitairesIntro sur les tests unitaires
Intro sur les tests unitairesPHPPRO
 
4 asynch task_services_thread
4 asynch task_services_thread4 asynch task_services_thread
4 asynch task_services_threadSaber LAJILI
 
Comment écrire du code testable ?
Comment écrire du code testable ?Comment écrire du code testable ?
Comment écrire du code testable ?Fou Cha
 
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...Cyrille Grandval
 

What's hot (12)

Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPIndustrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
 
Automatiser les tests d'acceptation : comment s'y prendre ?
Automatiser les tests d'acceptation : comment s'y prendre ?Automatiser les tests d'acceptation : comment s'y prendre ?
Automatiser les tests d'acceptation : comment s'y prendre ?
 
Benchmark et comparaison de performance en JavaScript
Benchmark et comparaison de performance en JavaScriptBenchmark et comparaison de performance en JavaScript
Benchmark et comparaison de performance en JavaScript
 
Evolutions scub foundation 3.0 = 4.0
Evolutions scub foundation 3.0 =  4.0Evolutions scub foundation 3.0 =  4.0
Evolutions scub foundation 3.0 = 4.0
 
Les Aventures d'Alice - la Révolte des Tests
Les Aventures d'Alice - la Révolte des TestsLes Aventures d'Alice - la Révolte des Tests
Les Aventures d'Alice - la Révolte des Tests
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon
 
Outils et pratiques : tester une application web moderne
Outils et pratiques : tester une application web moderneOutils et pratiques : tester une application web moderne
Outils et pratiques : tester une application web moderne
 
Test unitaire
Test unitaireTest unitaire
Test unitaire
 
Intro sur les tests unitaires
Intro sur les tests unitairesIntro sur les tests unitaires
Intro sur les tests unitaires
 
4 asynch task_services_thread
4 asynch task_services_thread4 asynch task_services_thread
4 asynch task_services_thread
 
Comment écrire du code testable ?
Comment écrire du code testable ?Comment écrire du code testable ?
Comment écrire du code testable ?
 
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
PHPTour Lyon 2014 - Conférence - Tests unitaires Je veux mes 80% de couvertur...
 

Similar to SWTBot

Tests Dinterface SWT
Tests Dinterface SWTTests Dinterface SWT
Tests Dinterface SWTEric Le Merdy
 
Gwt fast overview_v1
Gwt fast overview_v1Gwt fast overview_v1
Gwt fast overview_v1David Herviou
 
Chaine de production pipeline
Chaine de production   pipelineChaine de production   pipeline
Chaine de production pipelineNicolas wallerand
 
PyConFR - testons en python
PyConFR - testons en pythonPyConFR - testons en python
PyConFR - testons en pythongburet
 
Spring Batch - Julien Jakubowski - November 2010
Spring Batch - Julien Jakubowski - November 2010Spring Batch - Julien Jakubowski - November 2010
Spring Batch - Julien Jakubowski - November 2010JUG Lausanne
 
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !vincent aniort
 
I le langage java d'una manière avancée introduction
I  le langage java d'una manière avancée introductionI  le langage java d'una manière avancée introduction
I le langage java d'una manière avancée introductionsabrine_hamdi
 
CocoaHeads Rennes #4 : Tests automatisés sur iOS
CocoaHeads Rennes #4 : Tests automatisés sur iOSCocoaHeads Rennes #4 : Tests automatisés sur iOS
CocoaHeads Rennes #4 : Tests automatisés sur iOSCocoaHeadsRNS
 
Play : Premiers pas par l'exemple le 120613
Play : Premiers pas par l'exemple le 120613Play : Premiers pas par l'exemple le 120613
Play : Premiers pas par l'exemple le 120613SOAT
 
Du Docker dans notre workflow de dev
Du Docker dans notre workflow de devDu Docker dans notre workflow de dev
Du Docker dans notre workflow de devKodo Kojo
 
CocoaHeads Rennes #10 : Mock Objects
CocoaHeads Rennes #10 : Mock ObjectsCocoaHeads Rennes #10 : Mock Objects
CocoaHeads Rennes #10 : Mock ObjectsCocoaHeadsRNS
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Ippon
 
Cours du soir_gwt
Cours du soir_gwtCours du soir_gwt
Cours du soir_gwtSaid Talibi
 
Le monitoring de la performance front
Le monitoring de la performance frontLe monitoring de la performance front
Le monitoring de la performance frontJean-Pierre Vincent
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache MavenArnaud Héritier
 

Similar to SWTBot (20)

Gdd07 Gwt Dig
Gdd07 Gwt DigGdd07 Gwt Dig
Gdd07 Gwt Dig
 
Tests Dinterface SWT
Tests Dinterface SWTTests Dinterface SWT
Tests Dinterface SWT
 
TDD avec atoum
TDD avec atoumTDD avec atoum
TDD avec atoum
 
Introduction aux interfaces.
Introduction aux interfaces.Introduction aux interfaces.
Introduction aux interfaces.
 
Gwt fast overview_v1
Gwt fast overview_v1Gwt fast overview_v1
Gwt fast overview_v1
 
Chaine de production pipeline
Chaine de production   pipelineChaine de production   pipeline
Chaine de production pipeline
 
PyConFR - testons en python
PyConFR - testons en pythonPyConFR - testons en python
PyConFR - testons en python
 
Spring Batch - Julien Jakubowski - November 2010
Spring Batch - Julien Jakubowski - November 2010Spring Batch - Julien Jakubowski - November 2010
Spring Batch - Julien Jakubowski - November 2010
 
Valider par des tests - Blend
Valider par des tests - BlendValider par des tests - Blend
Valider par des tests - Blend
 
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
Node, Grunt et leurs copains qui font de l’accessibilité tout seuls !
 
JavaSwing.pdf
JavaSwing.pdfJavaSwing.pdf
JavaSwing.pdf
 
I le langage java d'una manière avancée introduction
I  le langage java d'una manière avancée introductionI  le langage java d'una manière avancée introduction
I le langage java d'una manière avancée introduction
 
CocoaHeads Rennes #4 : Tests automatisés sur iOS
CocoaHeads Rennes #4 : Tests automatisés sur iOSCocoaHeads Rennes #4 : Tests automatisés sur iOS
CocoaHeads Rennes #4 : Tests automatisés sur iOS
 
Play : Premiers pas par l'exemple le 120613
Play : Premiers pas par l'exemple le 120613Play : Premiers pas par l'exemple le 120613
Play : Premiers pas par l'exemple le 120613
 
Du Docker dans notre workflow de dev
Du Docker dans notre workflow de devDu Docker dans notre workflow de dev
Du Docker dans notre workflow de dev
 
CocoaHeads Rennes #10 : Mock Objects
CocoaHeads Rennes #10 : Mock ObjectsCocoaHeads Rennes #10 : Mock Objects
CocoaHeads Rennes #10 : Mock Objects
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0
 
Cours du soir_gwt
Cours du soir_gwtCours du soir_gwt
Cours du soir_gwt
 
Le monitoring de la performance front
Le monitoring de la performance frontLe monitoring de la performance front
Le monitoring de la performance front
 
20081008 - Tours Jug - Apache Maven
20081008  - Tours Jug - Apache Maven20081008  - Tours Jug - Apache Maven
20081008 - Tours Jug - Apache Maven
 

SWTBot

  • 1. Eclipse Party 2011 SWTBot Mariot Chauvin Obeo, France copyright 2011 Obeo
  • 4. Functional tests manual vs automatic
  • 8. Threads management ● Tests non bloquants ● Exécution dans un thread à part ● Gestion de la synchronisation
  • 9. Threads management Standard JUnit test is launched in the UI thread /** * Wait the end of the asynchronous calls waiting in UI thread. */ public static void synchronizationWithUIThread() { while (PlatformUI.getWorkbench().getDisplay().readAndDispatch()) { // Do nothing, just wait } }
  • 11. SWTBot features ● API de type Fluent ● Integration avec JUnit ● Gestion des threads ● Gestion des évenements SWT ● Support de GEF ● Support de Eclipse forms
  • 12. SWTBot example @Test public void canCreateANewJavaProject() throws Exception { bot.menu("File").menu("New").menu("Project...").click(); SWTBotShell shell = bot.shell("New Project"); shell.activate(); bot.tree().select("Java Project"); bot.button("Next >").click(); bot.textWithLabel("Project name:").setText("MyFirstProject"); bot.button("Finish").click(); }
  • 13. SWTBot Widgets ● Wrapper : API fluent et gestion des threads ● Exécution synchrone des requêtes ● Exécution asynchrone des commandes
  • 14. SWTBot Matchers ● Utilisation de Hamcrest ● Création de regles de correspondance ● Bot.widget( WidgetMatcherFactory.widgetOfType(StyledText.class), composite);
  • 15. Matchers creation ● Utilisation de WidgetMatcherFactory ● withText(“Finish”) ● withLabel(“Username”) ● withRegex(“Proceed to step (.*)”) ● widgetOfType(Button.class) ● withStyle(SWT.ARROW, “SWT.ARROW”) ● withTooltip(“Enable to drink”)
  • 16. Matchers combination ● allOf(matchers...) ● anyOf(matchers…) ● not(matcher) ● allOf(anyOf(matchers…), matchers...)
  • 17. SWTBot conditions ● Ecriture de test robustes et fiables ● Eviter d'utiliser wait(long time) ● Utiliser waitUntil(ICondition condition)
  • 18. Tips
  • 19. Logging ● Utilisation de log4j ● Pensez à l'activer ● Voir la FAQ pour l'activation
  • 20. Screenshots ● Un réalisé par erreur ● Pratique pour debugger
  • 21. Timeout ● Temps d'attente pour les conditions ● Modifiable globalement ou localement ● SWTBotPreferences.TIMEOUT
  • 22. Need a tutorial ? http://bit.ly/uLsBJ
  • 23. Thanks Questions ??
  • 24. Copyright SXC - http://www.sxc.hu/txt/license.html ● Boxing gloves : http://www.sxc.hu/photo/901672 ● Camera : http://www.sxc.hu/photo/733375 ● Watch : http://www.sxc.hu/photo/1154499 ● Bots : http://www.sxc.hu/photo/914512 and http://www.sxc.hu/photo/914514 ● Book : http://www.sxc.hu/photo/634335