20130523 04 - Grille d'évaluation - Gestion du patrimoine de test
20080923 04 - Selenium web application testing system
1. Selenium : Web Application
Testing System
23 septembre 2008
- Fabrice BELLINGARD -
2. 2Club Qualimétrie : Selenium 23/09/2008
Plan
• Démonstration
• Présentation de Selenium
– Principe
– Composants
– Exemple de code
• Mise en place au niveau projet
– Selenium :
• pour qui ?
• pour quels types de tests ?
• comment ?
– Utilisation de Maven pour le processus d’intégration continue
– Selenium et la qualimétrie
• Pour aller plus loin
– Quelques conseils et limitations
– Fonctionnalités avancées
4. 4Club Qualimétrie : Selenium 23/09/2008
Principe
3 – Lancer les tests !
– Ils s’exécutent dans le
navigateur choisi
– Grâce à Selenium Core
2 – Démarrer le serveur
Selenium
– Avec Selenium RC
1 – Enregistrer une série de
tests
– Avec Selenium IDE
– … ou alors écrire les
tests à la main !
5. 5Club Qualimétrie : Selenium 23/09/2008
Composant 1 : Selenium IDE
• Plugin Firefox permettant de :
– Enregistrer une séquence d’actions sur une application Web
– Customiser l’enregistrement (XPath, valeurs input,
timeout…)
• Fournit l’auto-complétion pour les commandes
– Le rejouer
– Sauvegarder les scénarios sous différents langages :
• HTML, Java, C#, PHP, Perl, Python, Ruby
• Agnostique par rapport à la technologie serveur
– Ne fait que « naviguer » sur des pages Web
• Evite d’avoir à écrire les tests à la main
7. 7Club Qualimétrie : Selenium 23/09/2008
Composant 2 : Selenium RC
• Constitué de 2 parties :
– lib clientes : transformation des scénarios (sauvegardés
dans un langage particulier) en commandes Selenium
– serveur : programme qui lance le navigateur et lui sert proxy
• 2 modes : normal ou interactif
Test
JUnit
Test
nUnit
Test
PHP
Test
Ruby
Lib Java
Lib .NET
Lib PHP
Lib Ruby
Selenium RC
Server
Navigateur Application
Web
Selenese
8. 8Club Qualimétrie : Selenium 23/09/2008
Composant 2 : Selenium RC
• Démonstration
– Mode interactif :
• Lancer le serveur :
– java -jar selenium-server.jar -interactive
• Ouvrir Opera sur Squale as a Service :
– cmd=getNewBrowserSession&1=*opera&2=http://saas.qualixo.com/
demo-squale/
– cmd=open&1=http://saas.qualixo.com/demo-squale/&sessionId=…
9. 9Club Qualimétrie : Selenium 23/09/2008
Composant 3 : Selenium Core
• Moteur permettant de manipuler les navigateurs pour
exécuter les tests
– Utilise un langage : Selenese
• Locators : id, dom, xpath, …
• Actions : open, select, check, submit, …
• Assertions : verify<xxx>, assert<xxx>, waitFor<xxx>, …
– Utilise JS et iFrame pour s’incorporer dans le navigateur
– Supporte une large gamme de navigateurs
• Firefox 2 & 3, IE 6 & 7, Safari 2 & 3, Opera 8 & 9
• Livré avec Selenium RC
10. 10Club Qualimétrie : Selenium 23/09/2008
Composant 3 : Selenium Core
• Démonstration
– Le code Selenese en HTML
– L’exécution d’un test dans le navigateur
11. 11Club Qualimétrie : Selenium 23/09/2008
Selenium : pour résumer
• Le processus est très simple :
1. Écrire le test
2. Démarrer le serveur Selenium RC
3. Lancer le test
• Technologie :
– Multi OS : Windows, Unix/Linux, Mac
– Multi navigateur : IE, FF, Opera, Safari
– Multi plateforme technologique
• tant qu’il s’agit d’une application Web
– Multi langage d’écriture de tests: Java, C#, PHP, Perl,
Ruby, Python, …
• Simple et très puissant
12. 12Club Qualimétrie : Selenium 23/09/2008
Exemple de code JUnit
import com.thoughtworks.selenium.SeleneseTestCase;
public class SqualeAASTest extends SeleneseTestCase {
public void setUp() throws Exception {
setUp("http://saas.qualixo.com/", "*firefox");
}
public void testPlay() throws Exception {
selenium.open("/demo-squale/");
selenium.waitForPageToLoad("10000");
selenium.type("login", "user");
selenium.type("pass", "user");
selenium.click("td1");
selenium.waitForPageToLoad("30000");
selenium.click("link=squale");
selenium.waitForPageToLoad("30000");
selenium.click("link=squaleCore");
selenium.waitForPageToLoad("30000");
selenium.click("link=Maintenabilité");
selenium.waitForPageToLoad("30000");
String noteComprehension = selenium
.getText("//a[@onclick="javascript:F_MyOngletSelectionner(
'criteriumdetail', 'rule.comprehension')"]/../../td[2]");
assertEquals("2.3", noteComprehension.trim());
}
}
14. 14Club Qualimétrie : Selenium 23/09/2008
Selenium : pour qui ?
• Nécessite des connaissances plus ou moins
approfondies en :
– HTML
– DOM
– XPath
– Langage de développement
• Cible : plutôt technique
– Maîtrise d’œuvre
• Développeur
• Testeur
– Éventuellement assistance à maîtrise d’ouvrage
• Une des cibles initiales de Selenium…
Tests plus poussés
15. 15Club Qualimétrie : Selenium 23/09/2008
Selenium : pour quel type de test ?
• Niveaux de tests (définis selon l’ISTQB)
– Unitaire ? (= un composant fonctionne bien unitairement)
– D’intégration ? (= les composants fonctionnent bien entre eux)
– Système ? (= l’application fonctionne bien sur l’infrastructure cible)
– D’acceptance ? (= l’application répond au besoin)
• Caractéristiques de tests (non exhaustif)
– Performance ? (= vérification des performances annoncées dans les
spécifications)
– Robustesse ? (= vérification de la résistance aux erreurs / problèmes)
– Vulnérabilité ? (= vérification de sécurité)
– Fonctionnels ? (= validation des fonctions « métier »)
• Tests en mode quasi « boîte noire »
16. 16Club Qualimétrie : Selenium 23/09/2008
Selenium : comment ?
• Mise en place simple :
– Pour évaluer et prendre en main la technologie Selenium
– Principe :
• Application déployée sur un serveur d’intégration
• Développer les tests avec Selenium IDE (en HTML par ex.)
• Les rejouer à la main
Développeur
Testeur
Serveur
d’intégration
Définition des
tests
Exécution des
tests
Développement
et
déploiement
IDE
RC
17. 17Club Qualimétrie : Selenium 23/09/2008
Selenium : comment ?
• Mise en place dans un processus d’intégration
continue
– Les tests sont sauvegardés en configuration
– Ils sont rejoués automatiquement par une plate-forme
d’intégration continue
Développeur Testeur
Serveur
d’intégration
Définition des
tests
2- Exécution
des tests
Plate-forme
d’intégration
continue
Référentiel
source IDE
RC
Développement Mise en configuration des tests
1- Génération et
déploiement de
l’application
18. 18Club Qualimétrie : Selenium 23/09/2008
Selenium en mode IC (Intégration Continue)
• Avantages : inhérents à l’intégration continue
– Détection précoce des bugs
– Assure la non-régression
• Points à gérer :
– Plate-forme d’intégration sans couche graphique :
• Lancement d’un navigateur ?
– Initialisation de l’environnement d’exécution :
• Déploiement de l’application ?
– Comment déployer automatiquement et quand ?
• Quel serveur Web ?
– Tests seulement d’intégration ou plus orientés système ?
• Quelle base de données ?
– Base dédiée pour les tests avec Selenium ?
19. 19Club Qualimétrie : Selenium 23/09/2008
Selenium et l’IC : Maven à votre secours !
• Plugin Maven pour Selenium :
– Arrêt / relance de Selenium RC
– Démarrage optionnel d’un serveur X virtuel (Xvfb)
Développeur Testeur
Définition des
tests
Référentiel
source IDE
Serveur
d’intégration
Plate-forme
d’intégration
continue
RC
1- Compilation, exécution des tests
unitaires, packaging de l’application
2- Déploie l’application, démarre Selenium
RC et lance les tests d’intégration
3- Valide le build
20. 20Club Qualimétrie : Selenium 23/09/2008
Selenium et Maven : les phases d’un build
• test :
– exécute les tests unitaires
• Si KO : possibilité de faire échouer le build
• package :
– génère le composant ou l’application
• pre-integration-test :
– [ démarre la BDD et l’initialise ]
– [ démarre le serveur ]
– déploie l’application
– démarre Selenium RC
• integration-test :
– exécute les tests d’intégration
• Si KO : possibilité de faire échouer le build
• pre-integration-test
– arrête Selenium RC
– [ arrête le serveur ]
– [ arrête la BDD ]
21. 21Club Qualimétrie : Selenium 23/09/2008
Selenium et Maven : démonstration
• Au départ de cette présentation, pour exécuter les
tests d’intégration :
1. Démarrer Selenium RC
2. Exécuter les tests
• Maintenant, avec Maven :
– « mvn install »
– … et c’est tout !
• Démonstration :
– Avec un build KO
22. 22Club Qualimétrie : Selenium 23/09/2008
Selenium et la qualimétrie
• Tests ? Couverture de test !
– En Java :
• JUnit + Cobertura / Emma
• Maven sait générer un rapport aux formats HTML et XML !
• Principe : vérifier que le code complexe est bien
couvert par les tests d’intégration
– Mise en relation des métriques :
• De couverture de test
• D’indication de la complexité : v(g), ev(g), CBO, …
• Intégration dans le modèle
qualimétrique
24. 24Club Qualimétrie : Selenium 23/09/2008
Quelques conseils
• Plus le HTML de l’application est bien programmé…
– … plus l’écriture de tests est facilite
– … plus les tests sont résistants aux changements
« cosmétiques » des pages
Ex. : utilisation abondant d’identifiant dans les balises HTML
• Test d’interfaces AJAX :
– Difficultés à cause de l’asynchronisme
• Le résultat d’une action peut arriver n’importe quand !
– Penser à utiliser les « waitFor<xxx> » avant de faire des
tests / assertions
selenium.getText("/html/body/div[3]/div[4]/div/div[2]/table/tbo
dy/tr/td/table[2]/tbody/tr/td[2]");
selenium.getText("//td[@id='totalFacture']");
25. 25Club Qualimétrie : Selenium 23/09/2008
Limitations à connaître
• Selenium ne sait pas interagir avec :
– Certaines technologies Web
• Ex. : applet, Flash, ActiveX
Impossibilité d’enregistrer des actions sur ces éléments
– Certains formats de fichiers
• Ex. : PDF, Excel
Impossibilité de vérifier des résultats dans le contenu de ces
fichiers
• La maintenabilité des tests diminue facilement au fur
et à mesure du temps
– Évolution liée à la qualité du code HTML
– Pas d’outil qui sache répercuter une modification de page
sur les tests qui lui correspondent
Le coût de test Selenium peut augmenter rapidement
26. 26Club Qualimétrie : Selenium 23/09/2008
Fonctionnalités avancées (1/2)
• Selenium Grid
– Permet de lancer des tests Selenium :
• en parallèle,
• sur plusieurs machines,
• en environnement hétérogène
• le tout sur la même application,
• et de manière simple.
– Avantages :
• Performances
• Temps de test réduit
– Utilisation
• Editeurs de solutions
• Cloud Computing
– Ex. : Amazon EC2
Source image : http://selenium-grid.openqa.org/how_it_works.html
27. 27Club Qualimétrie : Selenium 23/09/2008
Fonctionnalités avancées (2/2)
• CubicTest
– Éditeur de tests Selenium sous forme de plugin Eclipse
– Fonctionnalités :
• Couche d’abstraction sous forme de modèle :
– Pages / états
– Actions / transitions
• Visualisation et édition graphique des scénarios de test
• Enregistrement de tests « à la Selenium IDE »
– Remplacement du plugin Firefox
– Avantages :
• Fonctionnalités intégrées ensemble dans Eclipse
– Évolutions potentielles intéressantes
• Lien entre le modèle et le code ?
30. 30Club Qualimétrie : Selenium 23/09/2008
Résumé / conclusion
• Idées forces pour Selenium :
– Automatisation de test d’applications Web
– Agnostique en terme de technologie serveur
– Plutôt orienté tests d’intégration car encore
relativement technique
– Bien intégré dans la stack Java avec JUnit et
Maven
– Utilisable en mode intégration continue