Formation Selenium : Automatisation des Tests
Formation Selenium : Automatisation des Tests
FORMATION SELENIUM
Présentation de SELENIUM
• Automatiser un site WEB (identifier les balises HTML et les manipuler)
• Le client SELENIUM (Java, Python)
• Le WEBDRIVER (chromedriver, geckodriver)
• Commande utiles sur Java Selenium
• Exemples
Inspecter les élément WEB (locators)
Installation
Pourquoi automatiser ?
PROD
Tester plus tôt
Tests
Fiabiliser le périmètre et les cas réellement testés
DEV
Eviter les erreurs de test
Réduire les efforts et les couts des campagnes manuelles de TNR Temps
Qualité
Projet
Coût Délai
© 2018 Sogeti. All rights reserved. 9
Pourquoi automatiser ?
Résultat de
test
Testeurs
Envoyer le
résultat
Objectifs
Exactitude livraison
des d’une
résultats application
des tests moderne et
12 © 2018 Sogeti. All rights reserved. 12
Pourquoi automatiser ?
Incroyable ! Maintenant,
je n'ai plus besoin de
faire le même processus
avec des jeux de
données différents. Tout
est géré par l'outil lui-
même. Même le temps
d'exécution est trop
rapide
Tests de d’Intégration
Les tests systèmes : tester les fonctionnalités du système
Tests de composants
L’éffort étant réalisé par le bas (plus rapide à exécuter et moins couteux à développer)
Tester séquentiellement les différentes couches de bas en haut.
Lorsque nous automatisons les tests WEB avec SELENIUM, nous testons l’Interface Utilisateur (UI)
Nous automatisons les Tests fonctionnels (Non-Regression)
Bénéfices :
Coûts :
Introduction à l’automatisation Comparaison de différentes solutions © 2018 Sogeti. All rights reserved. 16
Introduction à l’automatisation
Mode Agile
Mode Agile
• Le développement des tests automatisés est obligatoire, il s’intègre dans les sprints
• Le testeur fonctionnel est intégré à l’équipe de développement
• Les tests unitaires sont réalisés pendant le développement de l’application par des méthodes BDD, TDD
• Les tests SELENIUM sont souvent réalisés avec un sprint de retard
• 80% des tests sont développés en test unitaire (vérifier les règles de gestions), les tests SELENIUM se focalisent à tester les grandes
fonctionnalités (parcourts utilisateurs, cas nominaux)
Gestion dans le code Création par l’automate Fichier contenant les données Requêtage en BDD
statique dynamique statique dynamique
Avantages • Facilité de mise en place • Maitrise de la donnée d’entrée • Données facilement modifiables. • Les données sont directement en
• Lisibilité du code rapide • Stabilité du processus, on • Gestion des données centralisée. phase avec l’environnement.
maitrise les conditions initiales • Améliore la variabilisation. • Rapidité de récupération des
• Possibilité de Data Driven : itération données.
des cas.
Inconvénients • La donnée n’est pas • Si la fonctionnalité de création • Avoir un lieu de stockage commun. • Nécessite des droits d’accès à la
variabilisée. n’est pas disponible ou a un • Fichiers pouvant être complexe. base (ouverture de flux,
• Duplication du code. dysfonctionnement, nous ne • Nécessite que les scripts fassent un habilitations).
• Maintenance fastidieuse. pouvons plus vérifier l’objectif contrôle des données pouvant être • Requête pouvant être compliquée.
principal de notre test. saisie par un tiers. • Risque de ne pas trouver le JDD
• Création de code supplémentaire adéquat (avoir une environnement
• Augmentation de la durée de la proche de la production)
campagne de test
Quand • Solution à ne pas trop • Solution fréquemment utilisée. • Solution fréquemment utilisée. Solution à conseiller si possibilité
l’appliquer ? utiliser, sauf si il n’y a pas Privilégier la création par via d’accès.
de contraintes sur la d’autres interface (exemple les
donnée. WS, création plus rapide)
Exemple à chaque exécution de mon test, je souhaite que mon code calcule la date de début de mon contrat à date du jour + 5 jours.
Je peux mettre en statique dans mon JDD dateContrat = ${dateAdd(now+5J)}
Et j’implémente dans le code que toutes les données commençant par un $ auront un traitement particulier qui dans ce cas sera d’utiliser une fonction
dateAdd.
Introduction à l’automatisation Comparaison de différentes solutions © 2018 Sogeti. All rights reserved. 21
Introduction à l’automatisation
4. Cartographie des fonctionnalités (avoir une vue d’ensemble, et un regroupement des tests)
6. Validation manuelle du test (compréhension des étapes, préparation / validation des données)
7. Spécification des étapes réutilisables (créer des keyword sur la base d’étapes réutilisables pour les test)
8. Développement des étapes réutilisables (Keywords Fonctionnels) + Développement de fonctions techniques (Keywords Techniques)
10. Exécution / Validation (tester sur un second environnement, tester sur un navigateur différent)
Constats Solutions
L’environnement n’est pas stable on espère que c’est occasionnel car ce point était demandé en prérequis
Les données d’environnement sont corrompues on espère que c’est occasionnel car ce point était demandé en prérequis
Mes données de test ne fonctionnent plus il y a un problème que je n’avais pas identifié, je revois ma copie
Mon script plante à tord sur la manipulation d’un j’ai un problème d’identification ou de synchro d’objet, je revois ma copie
objet
Mon script plante suite à une évolution je maintiens mon script, j’essaye de voir si je peux anticiper la prochaine fois
Mon script plante car il y a une anomalie c’est l’objectif de mes tests
Il est très important d’avoir un historique de ces différents problèmes afin de s’améliorer en continu
Un outil comme le TestResultAnalyser de Jenkins permet d’afficher simplement l’historique des statuts de chaque test
© 2018 Sogeti. All rights reserved. 26
Quelle stratégie pour mettre en place les tests automatisés ?
Le CRUD (create, read, update, delete) est surtout connu du coté des développeurs. Les tests de CRUD sont souvent
effectués au niveau des tests unitaires Back End
gérer le cycle
Lancement du
de vie des
test
applications
Importer Lancer le
Rédiger le
critère Rédiger Cas test Rapport de
script du
d’acceptatio de test Et résultat test
test
n du test
Définition des
Le Reporting se fait
cas test Rédaction des automatiquement
script sur JAVA grace à l’outil
SELENIUM TESTNG
© 2018 Sogeti. All rights reserved. 30
Présentation de SELENIUM
Le GRID SELENIUM
Fonctionnement
Les drivers chromedriver / geckodriver sont des serveurs d’API REST qui implémentent les ressources suivantes
[Link]
On peut donc envisager d’automatiser des tests WEB via un client d’API REST sans utiliser le client SELENIUM
On peut envisager de développer son propre client.
Client
SELENIUM Serveur
WEBDRIVER
API REST Browser
(Chromedriver
Gechodriver)
Client API
REST
Syntaxe de Findelement :
WebElement elementName = [Link]([Link]("LocatorValue"));
Exemple :
WebElement loginLink = [Link]([Link]("//buton[contains(@id , ‘loginButton’)]"));
Syntaxe de Findelement :
List<WebElement> elementName = [Link]([Link]("LocatorValue"));
Exemple :
List<WebElement> listOfElements = [Link]([Link]("//div"));
Findelement VS Findelements :
Find Element Find Elements
Renvoie le premier élément s'il existe plusieurs Retourne une liste des élements WEB
éléments Web trouvés avec le même localisateur
lance l’exception NoSuchElementException si ca ne Retourne une liste vide si le locator n’existe pas
trouve pas d’elément qui matche à la recherche
demandé
Find element va seulement trouver un element pas plus Ca va trouver une collection d’element qui matche avec
le locator en input
Appium :
L’automatisation des tests dans le domaine des applications mobiles offre des avantages indéniables, le principal étant
un gain de temps et de ressources considérable. Elle convient parfaitement aux tests de type « non régression »
(TNR), ainsi qu’aux tests de performances. Différents outils permettent d’accomplir cette tâche parmi lesquelles on
trouve APPIUM.
Qu’est-ce qu’Appium ?
Appium est un framework open source de test pour applications mobiles.
Il supporte les applications natives, web mobiles et hybrides. Il est également cross-platform (les apis fournies fonctionnent à la fois pour
les plateformes IOS et Android), ce qui permet la réutilisation d’une grande partie des tests.
Avantages :
•Différents langages sont supportés (Java, Objective-C, JavaScript, PHP, Python, Ruby, C#…).
•Cross-platform, il supporte les applications natives, web mobiles et hybrides.
Le XPATH
L’inspecteur Chrome
Les localisateurs dans Selenium vous permettent de localiser un élément Web sur une page Web. Il existe 8 types de
localisateurs dans Selenium.
ID () : C’est la façon la plu courante de localiser des éléments puisque les ID sont uniques pour chaque élément.
Format : [Link] ([Link] ("idLocator"));
css=[Link][attribute=value] css=[Link][tabindex=1]
Sous Chrome :
Pour identifier un élément WEB
click droit / inspecter éléments
XPATH Selector
[Link]
CSS Selector
[Link]
A l’origine est une méthode de requêtage pour le XML, pouvant s’appliquer au HTML car ayant la même structure.
Principe :
Xpath=//tagname[@attribute='value']
Xpath=//baliseHtml[@propriété='valeur']
# cas particulier, en Selenium la propriété text est une fonction (en Appium Natif on utilise bien la propriété @text)
Xpath=//baliseHtml[text()='valeur’]
Contains() : peut s’appliquer sur toutes les propriétés ainsi que sur la méthode text()
Xpath=//baliseHtml[contains(text(), 'valeur')]
# cas particulier : la fonction text() récupère uniquement le texte de la balise courante, utilisez le . Pour récupérer tout le texte
de la balise courante ainsi que le texte des enfants.
Xpath=//baliseHtml[contains(. , 'valeur')]
Xpath=//balise1[@propriété='valeur']/preceding-sibling::balise2
Xpath=//balise1[@propriété='valeur’]/following-sibling::balise3
Xpath=//balise[@propriété='valeur’][2]
EXERCICES
1. Se connecter au site
4. Déclarer une variable contenant le titre attendu et vérifier s’il match bien avec le titre récupérer (bloc if else à utiliser).
5. Afficher les messages suivants : if test OK (test passed) sinon test failed.
7. Entrez un faux email et password puis vérifier le message d’erreur « Please enter a correct username and password. Note
that the password is case-sensitive “
TestNG est un framework de test développé dans les lignes de JUnit et NUnit, mais il introduit de nouvelles fonctionnalités qui
le rendent plus puissant et plus facile à utiliser. TestNG est conçu pour couvrir toutes les catégories de tests : unitaires,
fonctionnels, de bout en bout, d'intégration, etc., et il nécessite JDK 5 ou supérieur.
Générez le rapport dans un format approprié comprenant un certain nombre de cas de test exécutés, le nombre de cas de
test réussis, échoué et ignorés.
Plusieurs cas de test peuvent être regroupés plus facilement en fichier [Link].
Les annotations utilisées dans les tests sont très faciles à comprendre ex : @BeforeMethod, @AfterMethod, @BeforeTest,
@AfterTest
Le même cas de test peut être exécuté plusieurs fois sans boucles en utilisant simplement le mot-clé appelé «invocation
count ».
Annotations Description
@BeforeTest
La méthode annotée sera exécutée
avant que tous les tests de cette suite
ne soient exécutés
@AfterTest La méthode avec l’annotation sera
exécutée après l'exécution de tous les
tests de cette suite.
Maven :
• Créer un projet Maven
• Configurer le fichier [Link] de tel sorte d’ajouter les dépendance (Selenium et TestNG)
• Refaire l’exercice sur le nouveau projet Maven
Le page object model(POM) est un modèle de conception, couramment utilisé dans l'automatisation des tests, qui crée
un référentiel d'objets pour les éléments d'interface utilisateur Web. L'avantage du modèle est qu'il réduit la
duplication de code et améliore la maintenance des tests.
Page Factory dans Selenium est un concept de cadre de modèle d'objet de page intégré pour Selenium
WebDriver, mais il est très optimisé. Il est utilisé pour l'initialisation des objets Page ou pour instancier l'objet
Page lui-même. Il est également utilisé pour initialiser les éléments de classe Page sans utiliser
"FindElement/s".
EXERCICE
• Refaire les même pages et le scénario de test avec le concept Page Factory
N.B faudrait que le projet soit un projet Maven avec l’implémentation des POM et aussi avoir à la fin un rapport Extent
Report