Il y a 14 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.
Commentaire