Selenium : Boostez vos tests avec Tellurium

Au commencement, vous écriviez vos tests Selenium en HTML. Mais cela posait des problèmes : aucune factorisation possible, pas de setUp()/tearDown()…

Puis, vous avez commencé à écrire vos tests en Java et la vie fut plus belle. Mais cela devint verbeux et vous développiez de plus en plus de code custom pour améliorer vos tests. Et vous vous demandiez comment faire encore mieux…

Enfin, vous découvrez l’arme ultime, ce projet nommé Tellurium qui ne vous rendra certainement pas plus riche ni plus beau mais qui améliorera vos tests Selenium.

Vous l’avez compris, Tellurium est un projet qui vise à améliorer l’écriture de tests Selenium.

Ils le disent eux-mêmes :

Tellurium is more robust, flexible, modularized, easier to maintain and refactor

Qu’est-ce qu’il y a dans la boite ?

La possibilité de structurer ses tests

Tellurium offre la possibilité de décrire la structure des éléments d’une page. C’est ce qui est appelé OLM pour « Object To Locator Mapping ».

Sans rentrer trop dans les détails, vous décrivez votre page en associant des identifiants et vous les utilisez ensuite dans vos tests. La séparation de la structure d’une page de ses tests permet de mieux faire évoluer ces derniers en cas de changement d’UI. Je pense qu’il est plus aisé de maintenir des tests écrits de cette façon que de la façon classique qui revient à mettre « tout au même endroit. ».

Exemple de description de la page d’accueil de google.fr :

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

Le TestCase associé :

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");
   }
}

Un DSL pour écrire ses tests en Selenium

Tellurium permet d’écrire les cas de tests directement en utilisant la syntaxe de Selenium.

Exemple :

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

Les avantages sont :

  • Une lecture et maintenance plus aisée ;
  • Une écriture facilitée, y compris par une personne qui ne connait pas Java. On pourrait un jour imaginer la MOA nous fournir des cas de tests dans ce format. Mais je rêve, non ?

Support des données de tests

Tellurium propose d’associer des données aux tests. C’est ce que les auteurs nomment « Data Driven Test ». Le moteur se charge de lire les données et les injectent dans les tests. C’est en quelque sorte ce que l’on fait dans les tableaux FitNesse mais directement intégré au TestCase.

Un jeu de données de test ressemble à ça :

# TEST | CATEGORY | SIZE
checkBookList|Fiction|8
checkBookList|SciFi|3

Par où commencer ?

Tellurium posséde un projet de référence pour Eclipse (mais aussi pour IntelliJ Idea et Netbeans) : http://code.google.com/p/aost/wiki/TelluriumReferenceProjectEclipseSetup

Le projet est également mavenisé : http://code.google.com/p/aost/wiki/MavenHowTo

Le plugin Groovy pour Eclipse peut être utile.

Il est trouvable ici : http://dist.codehaus.org/groovy/distributions/update/

Conclusion

Les quelques tests que j’ai effectués ont parfaitement fonctionné. Je suis parti d’un projet Eclipse vide et en 20 minutes, j’ai pu ajouter les dépendances, déclarer ma première structure de page (en groovy, yeah !) et écrire mon premier TestCase. Donc mission accomplie pour moi. Je suis convaincu des avantages de ce projet (DSL, Data Driven, Groovy). Mais il reste un doute sur sa maturité. Donc à tester à petite échelle en premier.

Tags: , , ,

6 Responses to “Selenium : Boostez vos tests avec Tellurium”

  1. B.Redouane Says:

    Hi !

    juste ce que je cherche.

    Merci Beaucoup

  2. dzEo Says:

    Bonjour,

    Intéressant comme article :)

    J’utilise actuellement Selenium pour effectuer mes tests, à la différence que je les exportes tous en php. Ceci reste relativement long et source d’erreurs, malgré le parsing mis en place afin d’automatiser la majeure partie des modifications à faire à la main suite à l’exportation d’un test selenium.
    Pensez vous que l’utilisation de Tellurium serait judicieux dans mon cas, sachant que je suis novice en java, mais que le besoin d’avoir à disposition des scripts de tests à la fois efficaces, maintenables et évolutifs se fait fortement ressentir ?

    Merci, mention spéciale pour votre blog qui contient à première vue des articles intéressants, je ne manquerais pas d’y repasser.

  3. Tom Says:

    Non, je ne pense pas qu’utiliser Tellurium vous fera gagner beaucoup (ou suffisamment par rapport aux coûts/temps/maintenance).

    Une bonne approche me semble être de bien créer, peaufiner sa couche d’abstraction au dessus de ses écrans.
    Par exemple, ce serait la création d’une méthode “creationDossier” encapsulant les appels à Selenium correspondants.
    C’est pour moi la bonne approche car on factorise beaucoup de choses.

    Tom

  4. dzEo Says:

    Merci de votre réponse,

    Les tests que j’effectue actuellement se doivent d’être évolutifs sur les années à venir, c’est donc dans une optique de long terme.
    C’est pour cela que Tellurium m’attire, sont côté structuration, afin que n’importe qui passant derrière puisse s’y retrouver.

    Mais le fait que ce soit en Java me rechigne, je peut me permettre de prendre le temps de maitriser Tellurium, mais l’apprentissage du Java, risque d’être plus long, et remettrais en cause les outils que je me suis construit pour accélérer les exports de tests en php.

    Je vais donc suivre votre conseil, et optimiser au mieux mes tests actuels via la création de méthodes supplémentaires.
    Cependant, savez vous dans quel fichier placer ces méthodes pour les rendres accessibles à chaque tests unitaires ? (je connais assez mal l’organisation de Selenium).

    Merci

  5. Tom Says:

    En java, les tests Selenium hérite la plupart du temps d’une classe donnant accès à l’API Selenium. Il suffit d’avoir une sous-classe utilisée par tous les tests pour partager les méthodes utilitaires. Vous pouvez très bien avoir des helpers plutôt qu’une notion d’héritage.

    Tom

  6. dzEo Says:

    Merci pour vos compléments !

    Je vais peut être tenter l’expérience Tellurium pour certains tests, afin de voir les avantages.
    Je vous ferais part de mes retours éventuels.

Leave a Reply