Peu importe la technologie ciblée lors d’un développement, il convient de réaliser un maximum de tests. Malheureusement on est généralement confronté à un problème simple: quel outil choisir pour la réalisation de ces tests.
Dans un environnement Microsoft, on serait tenter de mettre en avant les outils de tests présents dans Team System. Cependant, parfois il n’est pas nécessaire de mettre un autre produit, gratuit. En l’occurence, ce post a pour but de montrer l’utilisation de Selenium, outil de tests web.
Selenium se décline en divers modules. Sur cette base, des tests ont été effectués avec :
- Selenium IDE (plugin Firefox)
- Selenium RC
Selenium IDE
L’IDE permet d’enregistrement une suite d’actions et de la rejouer rapidement. Pour cela, Selenium ajoute du code lui permettant d’effectuer les dites actions sans intervention humaine.

Durant les tests effectués, il est arrivé que Selenium ne puisse rejouer les tests qu’il a lui-même enregistré, cela a cause des identifiants qui varient d’un chargement à l’autre de la page ou d’autres modifications du genre.
Les points positifs de Selenium IDE :
- Open Source ;
- Fonctionnalités globales permettant de couvrir des scénarios simples et systématiques.
Les points négatifs de Selenium IDE :
- Ne fonctionne que sur Firefox ;
- L’interface manque de convivialité. Certaines actions simples et fréquentes nécessitent des opérations manuelles dans des fichiers ;
- Par défaut, pas d’utilisation possible de boucles ;
- Par défaut, pas d’utilisation possible de conditions ;
- Nécessité de travailler avec des tests à part entière et donc impossibilité de « passer des paramètres » à une activité sans pour autant placer ces conditions ;
- La multiplication des scénarios nécessitent cette même multiplication des tests proprement dits. Toute modification doit se faire sur l’ensemble des tests dupliqués.
Selenium RC
Selenium RC (Remote Control) est un serveur qui fait office de Proxy (l’application envoie une requête à Selenium RC et Selenium la transmet au serveur destinataire). Comme pour l’IDE, il ajoute du code javascript lui permettant d’accéder et manipuler la page.

Les points positifs :
- Open Source ;
- Multi-navigateurs ;
- Apprentissage rapide (pas de nouvel outil car possibilité d’utilisation du langage de prédilection du développeur) ;
- Possibilité de créer une librairie d’objets réutilisables afin d’éviter les erreurs, d’avoir des opérations communes et aussi d’accélérer la réalisation de tests ;
- Meilleure gestion des informations affichées (il n’est pas nécessaire de faire du nettoyage) ;
- Possibilité d’étendre plus facilement les fonctionnalités de Selenium ;
- Facilité de mise en œuvre de tests qui peuvent utiliser comme source des fichiers, une base de données ou tout autre chose qui est géré par la technologie utilisée.
Les points négatifs :
- Nécessité d’installer Java sur la machine qui sert de proxy (il est possible d’utiliser un seul serveur pour différentes personnes).
Pour lancer des tests au travers de Selenium RC, il est nécessaire d’écrire du code chargé de dialoguer avec Selenium RC lui même responsable de charger et d’injecter les informations nécessaires dans les pages.
Exemple simple de code utilisable dans un contexte SharePoint. Le code parle de lui-même :
foreach (string groupName in groupNames)
{
#region Add user to group
if (!SPTests.ExistsGroup(groupName))
Assert.Fail("Group '" + groupName + "' doesn't exist");
SPTests.AddMemberToGroup(TESTUSER1_USERNAME, groupName);
if (isISAServerUsed) SPTests.DisconnectCurrentUser();
SPTests.OpenPage(rootRelativeUrl, possibleTitles);
#endregion
#region Operations
SPTests.Authentication_ISAServer(TESTUSER1_USERNAME, TESTUSER1_PASSWORD);
// Operations with current user
if (isISAServerUsed) SPTests.DisconnectCurrentUser();
SPTests.OpenPage(rootRelativeUrl, possibleTitles);
#endregion
#region Remove user from group
SPTests.Authentication_ISAServer(ADMINUSERS_USERNAME, ADMINUSERS_PASSWORD);
SPTests.RemoveMemberToGroup(TESTUSER1_USERNAME, groupName);
if (isISAServerUsed) SPTests.DisconnectCurrentUser();
SPTests.OpenPage(rootRelativeUrl, possibleTitles);
#endregion
}
______
public void RemoveMemberToGroup(string memberName, string groupName)
{
OpenGroupPage(groupName);
selenium.Check("//input[@account='" + memberName + "']");
try
{
selenium.ChooseOkOnNextConfirmation();
selenium.RunScript("BLOCKED SCRIPTBtnRemoveUsersClick(currentViewId, true);");
}
catch (SeleniumException)
{
// Handle SeleniumException because of Confirmation not allowed. Deletion is ok
}
}
Documentation au sujet de Selenium: http://seleniumhq.org/docs/index.html
Selenium ne permet d’effectuer que des tests simples. Pour réaliser des scénarios ou encore des tests de charge, PushToTest TestMaker est l’outil idéalement. Le prix est relativement peu élévé par rapport aux fonctionnalités proposées. Pour plus d’info: http://www.pushtotest.com/index.php/comparison.