Dernière mise à jour le 18 août 2019 — Continuous Testing Expert
Continuous Testing

Selenium est un excellent outil pour automatiser les actions de votre navigateur Web. Cependant, son application ne se limite pas à une utilisation locale. Imaginez que nous devions exécuter nos tests sur plusieurs machines à la fois, ou sur différentes configurations système, dans différents navigateurs, etc. Nous pouvons penser à un moyen d'automatiser le lancement synchrone des instances locales, mais Selenium a une bonne solution prête à l'emploi pour ce cas - Grille de sélénium.

 

Grille de sélénium étape par étape

1) Télécharger Serveur autonome Selenium. Au moment d'écrire ces lignes, la version actuelle est la 3.141, c'est celle que nous utiliserons. Ce fichier peut être utilisé à la fois par le client et le serveur, il doit donc être placé sur chacune des machines que vous prévoyez d'utiliser.

2) Exécutez le hub Selenium à l'aide de la ligne de commande suivante :

java -jar /somePathToJARfile/Selenium-server-standalone-3.141.59.jar -role hub -port 3333

 

Conseils:

a) Ici, la clé "-port" est facultative. Si vous ne l'utilisez pas, le port par défaut 4444 sera utilisé, cependant, s'il est occupé, vous pouvez en utiliser un libre.

b) Lorsqu'il est utilisé sur un projet réel, vous devrez effectuer le lancement plus d'une fois. Cela signifie qu'il est logique de simplifier et d'automatiser immédiatement cette étape. Le plus simple est d'utiliser le fichier bat/sh.

Au démarrage, vous verrez ceci :

cmdline

Après avoir démarré le concentrateur, vous recevez des instructions sur la manière d'enregistrer et de connecter les nœuds (clients-esclaves).

http://localhost:3333 (vous pouvez utiliser votre adresse IP au lieu de "localhost" et le port au lieu de 3333) dans votre navigateur Web pour vérifier l'état de notre système distribué.

console

Comme vous pouvez le voir dans la capture d'écran ci-dessus, la Grid Console fonctionne à l'adresse spécifiée. Il est vide jusqu'à ce que nous n'enregistrions pas d'esclave.

3) Nous devons maintenant démarrer les nœuds Selenium. Supposons que nous prévoyons d'exécuter 2 instances, une sur la machine locale (où se trouve le hub) et une autre sur la machine distante. Pour ce faire, utilisez la commande suivante sur chaque machine :

java -Dwebdriver.chrome.driver=F:chromedriver.exe -jar /somePathToJARfile/Selenium-server-standalone-3.141.59.jar -role node -hub http://172.17.10.182:3333/grid/register -browser browserName ="chrome",version=TOUT,plate-forme=WINDOWS,maxInstances=5

cmdline

Conseils:

a) Ici, le paramètre -Dwebdriver.chrome.driver=F:chromedriver.exe indique que cette instance client utilisera un pilote chrome, et le fichier chromedriver.exe se trouve à la racine du disque F.

b) Le paramètre de nœud -role signifie que nous exécutons l'instance en tant que nœud.

c) -moyeu http://172.17.10.182:3333/gdébarrasser/enregistrer Le paramètre est le chemin où se trouve notre hub (il peut être reconnu depuis la console du hub).

d) -browser browserName=”chrome”,version=ANY,platform=WINDOWS,maxInstances=5 Cette partie définit les options de lancement du navigateur.

e) nous pouvons ajouter la clé -port, mais si vous ne la spécifiez pas, un port libre sera automatiquement sélectionné.

Assurons-nous maintenant que tous les nœuds sont enregistrés avec succès sur notre hub :

nœuds cmdline

4) Nous devons maintenant créer un projet Java avec des tests Selenium que nous allons exécuter. Pour ça:

a) Dans l'IDE, vous utilisez créer un nouveau projet Java Maven avec les paramètres par défaut (j'utilise IntelliJ IDEA)

b) Ajoutez ensuite la classe java ParallelTest.java

essai parallèle

c) Importez les tests Selenium nécessaires et les bibliothèques TestNG :

importer org.openqa.Selenium.Platform ;

importer org.openqa.Selenium.remote.DesiredCapabilities ;

importer org.openqa.Selenium.remote.RemoteWebDriver ;

importer org.testng.annotations.BeforeTest ;

importer org.testng.annotations.Parameters ;

importer org.testng.annotations.Test ;

import java.net.MalformedURLException ;

importer java.net.URL ;

Plus tard, nous discuterons de la raison pour laquelle nous avons besoin d'annotations. Après avoir importé les bibliothèques, vous devez autoriser l'IDE à ajouter toutes les dépendances nécessaires.

cmdline cmdline

d) Ajoutez le code suivant dans notre classe ParallelTest{} :

pilote RemoteWebDriver public ;

@AvantTest

public void avantTest() {}

@Tester

public void test(){}

Ici:

@BeforeTest et @Test sont des annotations TestNG.

beforeTest(), experitest() sont des méthodes.

RemoteWebDriver est une classe importée.

e) Nous devons exécuter le test dans l'état actuel afin de nous assurer que tout fonctionne correctement et afin d'obtenir le fichier de configuration TestNG par défaut :

fichier de configuration

Dans la console IDE, nous verrons les résultats de l'exécution. Cliquez sur la ligne d'information dans cette section pour obtenir plus d'informations.

console

Après cela, le chemin vers le fichier de configuration nouvellement créé apparaîtra en haut de l'écran :

config

Accédez à ce répertoire et transférez ce fichier dans notre dossier de projet pour modification et utilisation ultérieure.

annuaire

f) Nous allons maintenant éditer notre fichier de configuration. Pour ce faire, modifiez d'abord les paramètres de construction :

paramètres

Sur cet écran, nous définissons le paramètre "Type de test" sur "Suite" et attribuons le chemin d'accès au fichier de configuration xml au paramètre "Suite". Le fichier de configuration se trouve dans le dossier du projet.

paramètres

g) Examinons de plus près le fichier de configuration TestNG et modifions-le pour notre cas. Le fichier de configuration par défaut créé par l'IDE est le suivant :

 








 
 

 

[html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show]

 

Ici:

a) – Cette balise définit un ensemble de nos tests.

b) – Cette étiquette définit les paramètres de test.

c) et – Ces balises définissent les classes qui seront utilisées dans ce test.

À l'intérieur de la balise, nous pouvons spécifier les méthodes de cette classe que nous utiliserons. Pour plus de simplicité, nous utiliserons une classe – Experitest :

 

[html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show]

 

Nous pourrions terminer la configuration là-dessus, mais comme nous prévoyons d'exécuter plusieurs instances de notre test, nous avons besoin d'un paramétrage. Ajoutons les balises pertinentes au code :

[html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show]

 

Ici:

a) Les noms des balises « platform » et « browserName » sont des paramètres que nous avons spécifiés lorsque nous avons démarré les instances de nœud de grille Selenium.

b) "L'URL distante" est un paramètre qui détermine quelle instance du client Selenium Grid sera utilisée par une certaine machine. Je vous rappelle que vous pouvez voir ce paramètre dans la console hub :

 

Astuce ici :

Veuillez noter que la balise est spécifiée dans le fichier XML au début de cette description de test, avant de spécifier les classes. Cela est nécessaire pour que le paramétrage soit pertinent pour toutes les classes utilisées dans ce test.

De l'exemple de fichier de configuration ci-dessus, il s'ensuit que nous devons faire autant de copies de la section à l'intérieur de la balise de test dans le fichier de configuration que le nombre d'instances que nous prévoyons d'utiliser. Dans notre cas, il y a 2 instances, alors mettez à jour le fichier de configuration comme indiqué ci-dessous :

 

[html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show]

 

S'il vous plaît noter que:

a) Nous avons également changé le nom des tests – Ils doivent être uniques.

b) Nous ajoutons parallel="tests" dans la balise. – C'est une partie très importante. Ce paramètre contrôle la simultanéité. Dans ce cas, cela indique que les tests de cette suite doivent être effectués en parallèle. Plus d'informations que vous pouvez obtenir auprès de l'officiel Documentation TestNG (page 5.11). C'est la raison de l'utilisation de TestNG dans notre cas car, en réalité, le système distribué assume l'exécution des tests simultanément, c'est-à-dire en parallèle.

h) Maintenant que tout est prêt, nous pouvons passer à la rédaction du test lui-même. Revenons au fichier ParallelTest.java. Pour commencer, nous ajouterons la possibilité d'utiliser des paramètres pour chaque instance de test. Pour ce faire, ajoutez l'annotation @Parameter et mettez à jour la méthode beforeTest comme suit :

 

[html_tags_show]@AvantTest[/html_tags_show] [html_tags_show]@Parameters({"platform", "browserName", "remoteurl"})[/html_tags_show] [html_tags_show]public void beforeTest (String platform, String browserName, String remoteurl) {[/html_tags_show] [html_tags_show]}[/html_tags_show]

 

i) Ajoutez maintenant la capacité à cette méthode - nous indiquons le navigateur utilisé, la plate-forme, la version. Ces paramètres doivent coïncider avec ce que nous avons déterminé pour chaque nœud Selenium spécifique :

 

[html_tags_show]@AvantTest[/html_tags_show] [html_tags_show]@Parameters({"platform", "browserName", "remoteurl"})[/html_tags_show] [html_tags_show]public void beforeTest (String platform, String browserName, String remoteurl) {[/html_tags_show] [html_tags_show]Capacités souhaitées = Capacités souhaitées.chrome();[/html_tags_show] [html_tags_show]capabilities.setBrowserName("chrome"); capacity.setPlatform(Platform.extractFromSysProperty("plateforme"));[/html_tags_show] [html_tags_show]capabilities.setVersion("ANY");[/html_tags_show] [html_tags_show]}[/html_tags_show]

 

j) Créez une nouvelle instance du pilote, en tenant compte de la capacité et de l'URL distante. Faites également attention à la nécessité d'ajouter une exception à cette méthode pour utiliser remoteurl ; si vous utilisez IDEA IDE, vous serez invité à le faire.

 

[html_tags_show]@AvantTest[/html_tags_show] [html_tags_show]@Parameters({"platform", "browserName", "remoteurl"})[/html_tags_show] [html_tags_show]public void beforeTest(String platform, String browserName, String remoteurl) lance MalformedURLException {[/html_tags_show] [html_tags_show]Capacités souhaitées = Capacités souhaitées.chrome();[/html_tags_show] [html_tags_show]capabilities.setBrowserName("chrome");[/html_tags_show] [html_tags_show]capabilities.setPlatform(Platform.extractFromSysProperty("platform"));[/html_tags_show] [html_tags_show]capabilities.setVersion("ANY");[/html_tags_show] [html_tags_show]driver = new RemoteWebDriver(new URL(remoteurl),abilities);[/html_tags_show] [html_tags_show]}[/html_tags_show]

 

Conseil:

Si vous craignez que votre test ne soit lancé simultanément sur toutes les machines, à cause des retards du réseau, alors vous pouvez ajouter Thread.sleep(3000); à la fin de la méthode beforeTest. Cela atténuera un peu les problèmes éventuels.

Passons au test principal :

k) Ajoutez la navigation sur le site Web experitest.com et vérifiez le titre de la page, puis affichez le résultat de notre test sur la console :

 

[html_tags_show]@Tester[/html_tags_show] [html_tags_show]public void expert(){[/html_tags_show] [html_tags_show] String attenduTitre = "experitest.com";[/html_tags_show] [html_tags_show] String actualTitle = "" ;[/html_tags_show] [html_tags_show] driver.get("https://experitest.com/free-trial/");[/html_tags_show] [html_tags_show] actualTitle = pilote.getTitle();[/html_tags_show] [html_tags_show] si (actualTitle.contentEquals(expectedTitle)){[/html_tags_show] [html_tags_show] System.out.println("TEST RÉUSSI !");[/html_tags_show] [html_tags_show] } sinon {[/html_tags_show] [html_tags_show] System.out.println ("TEST ÉCHEC");[/html_tags_show] [html_tags_show] }[/html_tags_show] [html_tags_show] pilote.quit();[/html_tags_show] [html_tags_show]}[/html_tags_show]

 

5) Tout est prêt, nous pouvons maintenant lancer notre test. Pour ce faire, vous devez d'abord créer le projet, puis l'exécuter :

console console

C'est ça! Vous savez maintenant comment exécuter des tests Selenium en mode distribué. Nous avons examiné un exemple simple de deux esclaves et de deux instances, en utilisant n'importe quelle version de la version de Chrome, mais en suivant ces instructions, vous pouvez expérimenter les configurations de vos machines esclaves pour obtenir une meilleure couverture et des résultats de test. Ce projet est téléchargeable sur au lien suivant.

 

Derniers conseils :

a) Si vous utilisez différents navigateurs, systèmes ou avez quelque chose d'autre à prendre en compte, alors dans la méthode beforeTest, vous devez les définir en utilisant un ensemble cohérent d'opérandes "if", comme indiqué ci-dessous :

 

[html_tags_show]if (nom du navigateur.equals("firefox")){[/html_tags_show] [html_tags_show] capacité = new DesiredCapabilities().firefox[/html_tags_show] [html_tags_show] }[/html_tags_show] [html_tags_show]if (nom du navigateur.equals("chrome")){[/html_tags_show] [html_tags_show] capacité = new DesiredCapabilities().firefox[/html_tags_show] [html_tags_show] }[/html_tags_show]

 

b) Pour automatiser le processus, vous pouvez utiliser des scripts sh / bat, ou même un outil CI, par exemple, Jenkins, pour exécuter automatiquement des projets maven.

Et pour plus d'informations sur les tests de sélénium et de sélénium, vous pouvez toujours jeter un œil à Experitest's Intégration du pilote Web Selenium.

Maxime Babilo – Ingénieur Performance Équipe QA ISSArt

[/ Vc_column_text] [/ vc_column] [/ vc_row]

Êtes-vous prêt à faire évoluer votre entreprise ?

Explorer

Quoi de neuf dans le monde de Digital.ai

22 avril 2024

Les biais dans la machine : les biais des données de formation et leur impact sur le code généré par les assistants de code IA

Explorez les biais dans les données de formation en IA ayant un impact sur la génération de code et apprenez des stratégies pour les atténuer pour un développement de l'IA et une innovation logicielle plus équitables.

En savoir plus
22 février 2024

Comment le futurisme façonne les tests cloud : une prévision

Découvrez l'avenir des tests cloud : approches stratégiques pour exploiter efficacement la technologie, améliorer la qualité des logiciels et garantir la réussite de l'entreprise.

En savoir plus
4 décembre 2023

La recherche de la qualité : tests logiciels automatisés en continu pour l'industrie automobile

De la création de tests basés sur l'IA aux systèmes d'auto-réparation, découvrez comment continuous testing et les développements innovants façonnent l’avenir des technologies connectées, safeet des véhicules fiables.

En savoir plus