Publié par

Il y a 11 ans -

Temps de lecture 4 minutes

Améliorer l’écriture de vos tests Selenium

Selenium est une suite d’outils permettant d’écrire des tests fonctionnels sur une application web. Il permet d’une part de valider les fonctionnalités de l’application web, et d’autre part de tester sa compatibilité avec des environnements clients hétérogènes. Nous avions déjà mentionné Selenium il y a quelques mois dans un article dédié à l’outil Selenium Grid, qui permet de lancer les tests Selenium en parallèle (afin de réduire le temps d’exécution de la batterie de tests).

Au début, vous écriviez vos tests en HTML avec l’outil Selenium IDE. Avec le temps, le nombre de tests ne cessent d’augmenter ainsi que la charge de travail nécessaire pour les maintenir et les mettre à jour.

L’écriture des scénarios de tests demandent beaucoup de temps. Les intégrateurs HTML ont tendance à changer de façon fréquente la structure des pages HTML, les identifiants des éléments UI, les noms des classes CSS etc.

L’écriture des tests Selenium a plusieurs limitations :

  • Jouer plusieurs fois un scénario de test avec des données différentes nécessite l’écriture de plusieurs tests.
  • Les tests Selenium sont très dépendants de la structure des pages. Une petite modification dans les pages entraîne une mise à jour de plusieurs tests.
  • La démarche d’écriture des tests et la génération des tests unitaires en java est manuelle. Pour automatiser vous devez coder vos propres outils.
  • Les composants UI d’un test Selenium ne sont pas réutilisés dans plusieurs tests.

Un projet sous le nom de Tellurium permet d’améliorer la démarche d’écriture des tests Selenium.

Structurer vos tests

Les tests Tellurium sont indépendants des éléments des pages que vous voulez tester. Tellurium permet de décrire la structure des éléments d’une page en modules UI que vous pouvez utiliser dans vos tests par la suite. La séparation de la structure des pages et des tests permet de mieux évoluer ces derniers en cas de changement des éléments de la page. Vous pouvez ainsi réutiliser vos modules UI dans plusieurs tests.

En réalité il existe trois possibilités pour écrire des tests Tellurium :

Une première possibilité consiste à écrire les modules UI en Groovy et ensuite les tests unitaires en java (JUnit ou TestNG).

class NewGoogleStartPage extends DslContext {
    public void defineUi() {
	ui.Container(uid: "google_start_page") {
	    InputBox(uid: "searchbox", locator: "//input[@title='Google Search']")
	    Button(uid: "googlesearch", locator: "//input[@name='btnG' and @type='submit']")
	}
    }

    def doGoogleSearch(String input) {
        type "searchbox", input
        pause 500
        click "googlesearch"
        waitForPageToLoad 30000
    }
}
public class GoogleStartPageJavaTestCase extends TelluriumJavaTestCase {
      protected static NewGoogleStartPage ngsp;
      @BeforeClass
      public static void initUi() {
          ngsp = new NewGoogleStartPage();
          ngsp.defineUi();
      }
      @Test
      public void testGoogleSearch() {
          connectUrl("http://www.google.com");
          ngsp.doGoogleSearch("tellurium selenium Groovy Test");
      }
}

Une deuxième possibilité consiste à écrire les modules UI et les tests unitaires en Groovy.

class GoogleStartPageGroovyTestCase extends TelluriumGroovyTestCase {
    protected static NewGoogleStartPage ngsp;

    public void initUi() {
       ngsp = new NewGoogleStartPage();
       ngsp.defineUi();
    }

    public void setUp(){
        setUpForClass()
    }

    public void tearDown(){
        tearDownForClass()
    }

    void testGoogleSearch(){
        connectUrl("http://www.google.com");
        ngsp.doGoogleSearch("tellurium selenium Groovy Test");
    }
}

Enfin vous pouvez utiliser un DSL fournit par Tellurium pour écrire directement vos tests en utilisant la syntaxe Selenium.

ui.Container(uid: "google_start_page") {
      InputBox(uid: "searchbox", locator: "//input[@title='Google Search']")
      Button(uid: "googlesearch", locator: "//input[@name='btnG' and @type='submit']")
}

openUrl "http://www.google.com"
type "google_start_page.searchbox", "Tellurium Selenium"
pause 500
click "google_start_page.googlesearch"
waitForPageToLoad 30000

Le plugin TrUMP pour créer vos modules UI

Tellurium UI Model Plugin (TrUMP) est un plugin firefox qui permet d’enregistrer les éléments UI de votre page WEB et de créer automatiquement les modules UI à utiliser pour créer vos tests.

Vous pouvez aussi packager vos widgets Tellurium en fichier jar que vous pouvez réutiliser pour tester vos applications web. D’où la flexibilité, la robustesse et la réutilisabilité de vos modules UI.

Un moteur d’injection de données

Tellurium nous propose un moteur pour lire des données sur un fichier et les injecter dans les tests associés. Ainsi on peut facilement créer un scénario de test avec des données différentes.
Un jeu de données de test ressemble à ça :

# TEST | Ville | Pays
rechercheLieu|Paris|France
rechercheLieu|Marseille|France
rechercheLieu|Madrid|Espagne

Conclusion

En peu de temps j’ai pu créer ajouter quelques tests dans le projet de référence fourni par Tellurium. Ayant déjà écrit beaucoup de tests Selenium, je me rends compte de leurs fragilité et leurs faible maintenabilité. Je suis convaincu par les avantages de Tellurium pour écrire des tests stables, modulaires et paramétrables. Mais pour le moment je préfère le tester à petite échelle.

Publié par

Commentaire

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Nous recrutons

Être un Xebian, c'est faire partie d'un groupe de passionnés ; C'est l'opportunité de travailler et de partager avec des pairs parmi les plus talentueux.