Les tests d’automatisation et l’intégration continue (CI) font partie intégrante de l’activité de développement et de test. L’automatisation des tests Selenium est l’une de ces approches qui aide à tester de bout en bout le produit Web. La manière peu préférée d’effectuer des tests à l’aide du framework Selenium consiste à installer le navigateur Web requis et ses pilotes de navigateur correspondants. Dans ce blog, nous expliquons en profondeur comment exécuter des tests Selenium dans Docker afin d’accélérer l’activité d’automatisation des tests Selenium.
Présentation de Docker
En ce qui concerne les tests d’automatisation Selenium, il est important qu’un test exécuté dans un environnement d’exécution n’entrave pas l’exécution des tests exécutés dans un ou plusieurs autres environnements de test. Par conséquent, les tests d’automatisation doivent être exécutés de manière isolée et Docker aide à réaliser cette exigence « essentielle ».
L’exécution de tests Selenium dans des conteneurs Docker aide à effectuer des revues de code (à un rythme plus rapide), réalisant ainsi un code de meilleure qualité, atteignant une couverture de test élevée et développant un produit de qualité exceptionnelle. Docker offre la possibilité d’exécuter des tests dans des conteneurs ou d’isoler les tests lors du développement et du déploiement. Il existe de nombreuses raisons d’utiliser Selenium avec Docker pour tester des applications Web.
Qu’est-ce que Docker ?
Docker est une plate-forme de conteneurisation open source qui facilite la création, le déploiement et l’exécution d’applications de manière sécurisée à l’aide de conteneurs. Docker fournit la virtualisation au niveau du système d’exploitation (OS). Toutes les parties logicielles de Docker sont organisées dans des conteneurs.
Par défaut, les Dockers sont dotés des capacités d’isolation les plus puissantes et les applications s’exécutent en toute sécurité dans les conteneurs appropriés. De plus, Docker s’exécute en tant que processus discret sur la machine hôte. Outre la possibilité d’exécuter Docker sur des machines locales exécutant Windows, Mac ou Linux, il peut également être exécuté sur une infrastructure cloud comme AWS, Azure, etc.
Images Docker
Essentiellement, l’image Docker contient tout ce qui est requis pour exécuter l’application en tant que conteneur. L’image Docker comprend les éléments suivants :
- Code
- Bibliothèques
- Variables d’exécution
- Outils système
- Paramètres
- Fichiers de configuration
- Variables d’environnement, et plus
L’image correspondante peut être déployée dans n’importe quel environnement Docker en tant que conteneur Docker et peut encore faciliter l’exécution de tests Selenium dans des conteneurs Docker.
Conteneurs dans Docker
Le conteneur dans Docker est une unité de support logicielle qui regroupe le code et toutes les dépendances requises afin que l’application puisse s’exécuter plus rapidement et de manière plus fiable d’un environnement informatique à un autre.
Comme l’image de conteneur Docker est un package logiciel autonome, léger et exécutable, il est facile d’installer et d’exécuter le logiciel (et les services) pertinents à l’aide de celui-ci. Pour exécuter le conteneur, vous n’avez pas besoin de démarrer le système d’exploitation invité.
Les conteneurs Docker installés peuvent également être partagés avec différents utilisateurs afin qu’ils puissent rapidement commencer le travail réel à l’aide de l’image du conteneur. Les logiciels conteneurisés, disponibles pour les applications Windows et Linux, sont indépendants de l’infrastructure sous-jacente. De nombreux frameworks open source sans serveur tirent également parti des avantages offerts par la technologie de conteneur Docker.
Conteneur vs machines virtuelles
La conteneurisation est souvent comparée aux machines virtuelles, mais il existe une différence flagrante entre les deux.
Docker s’exécute sur le système d’exploitation hôte (par exemple, Windows, Linux, etc.) et les conteneurs Docker contiennent les dépendances telles que les bibliothèques, les fichiers de configuration, etc. Cela inclut également l’application elle-même. Les conteneurs Docker sont légers car ils ne contiennent aucun système d’exploitation invité. Ci-dessous, un conteneur Docker composé des nœuds Selenium Hub et Firefox et Chrome.
D’autre part, les machines virtuelles ont leur propre système d’exploitation invité et exécutent un hyperviseur qui est principalement responsable de l’exécution des machines virtuelles. Docker dispose également d’un backend Hyper-V, mais il est recommandé d’utiliser WSL (Windows Subsystem for Linux) pour de meilleures performances. Étant donné que les machines virtuelles ont leur propre système d’exploitation invité, la taille d’une machine virtuelle est beaucoup plus grande et nécessite plus de ressources pour exécuter la machine virtuelle.
Comment installer et configurer le Docker sous Windows
Avant d’exécuter des tests Selenium dans des conteneurs Docker, nous devons installer et configurer Docker sous Windows. L’étape préalable à l’exécution d’un test Selenium dans un conteneur Docker consiste à installer Docker sur la machine hôte. Dans notre cas, nous installerions Docker sur une machine Windows. Tout d’abord, vous devez télécharger Docker Desktop pour Windows – la version communautaire de Docker pour Microsoft Windows.
Docker Desktop pour Windows 10 est une application Windows native qui fournit un environnement de développement facile à utiliser pour la création, l’exécution et la livraison d’applications dockerisées. Il prend en charge les conteneurs Linux et Windows. Dans notre démo, nous utiliserions les conteneurs basés sur Linux.
Double-cliquer sur ‘Docker for Windows Installer’ lance le programme d’installation. L’installation est assez simple.
Docker pour Windows nécessite la prise en charge de WSL 2 (Windows Subsystem for Linux). Sélectionnez les options nécessaires pour activer les fonctionnalités Windows Hyper-V et installer les composants Windows requis pour WSL 2.
Vous obtenez le message suivant une fois l’installation réussie.
Problèmes courants et solutions lors de l’installation de Docker sur Windows 10
Avant d’exécuter des tests Selenium dans des conteneurs Docker, vous pouvez rencontrer des problèmes liés à l’activation d’Hyper-V et à la protection de l’exécution des données dans le BIOS lors du démarrage de Docker.
- Hyper-V et protection de l’exécution des données
La prise en charge de la virtualisation assistée par matériel doit d’abord être activée dans le BIOS. L’ensemble des étapes varierait d’un fabricant à l’autre, mais entrer dans le BIOS et activer la virtualisation devrait faire l’affaire pour vous. Après avoir redémarré le système, ouvrez l’onglet Performances dans le gestionnaire de tâches et vous verrez que la virtualisation est activée sur la machine.
Selon la configuration de la machine, vous pouvez exécuter l’une des deux commandes sur le terminal (en tant qu’administrateur) pour activer la prise en charge Hyper-V et la protection de l’exécution des données sur la machine hôte :
dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All
bcdedit /set hypervisorlaunchtype auto
Redémarrez le système pour appliquer les modifications. Dans certains cas, vous devrez activer Hyper-V à partir de la « Fonctionnalité Windows ». Pour faire de même, accédez à « Panneau de configuration » -> « Programmes et fonctionnalités » -> « Activer ou désactiver les fonctionnalités Windows » et activez les éléments – Hyper-V et plate-forme d’hyperviseur Windows.
Redémarrez la machine pour que les modifications prennent effet. Maintenant, l’instance Docker doit démarrer avec succès si WSL 2 est installé sur la machine hôte.
Bien que nous ayons activé Hyper-V sur la machine hôte, il est recommandé d’utiliser WSL 2 avec Docker au lieu d’Hyper-V. WSL 2 offre de meilleures performances que le backend Hyper-V. Si vous avez activé la prise en charge de WSL 2 dans les paramètres Docker, mais que WSL 2 n’est pas installé sur la machine, vous constaterez l’erreur « WSL 2 n’est pas installé ».
Activez l’option « Sous-système Windows pour Linux » dans la section des fonctionnalités Windows de Control.
Comme indiqué dans le guide d’installation WSL pour Windows 10, nous devons d’abord activer le sous-système Windows pour Linux. Cela peut être fait en exécutant la commande suivante sur le terminal (en tant qu’administrateur) :
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
Avant d’installer WSL 2, vous aurez peut-être besoin de la fonction de machine virtuelle (qui est une étape facultative).
Before installing WSL 2, you might need the Virtual Machine feature (which is an optional step).
Téléchargez le package de mise à jour du noyau Linux WSL2 pour la machine x64 et installez-le sur la machine hôte. Définissez WSL 2 comme version par défaut à l’aide de la commande :
wsl --set-default-version 2
Redémarrez la machine pour que les modifications prennent effet. Avec cela, vous êtes prêt à utiliser Docker Desktop avec le backend WSL 2. Dans les paramètres de Docker Desktop, activez l’option « Utiliser le moteur basé sur WSL 2 » afin que WSL 2 soit utilisé à la place du backend Hyper-V.
Exécutez la commande docker – version pour vérifier si Docker est installé et si l’instance a commencé à s’exécuter :
Pourquoi utiliser Selenium avec Docker pour les tests d’applications Web
Dans ce didacticiel expliquant comment exécuter des tests Selenium dans Docker, nous verrons certains des principaux avantages qui font de Selenium avec Docker une combinaison idéale pour les tests d’applications Web :
Évolutif et fiable
-
Dans une configuration normale de Selenium Grid, la configuration implique l’hébergement de plusieurs VM (machines virtuelles) en tant que « nœuds » et la connexion des « nœuds » à un seul « hub ». Lors de la configuration de la grille Selenium, vous devez télécharger le fichier jar du serveur Selenium (avec Selenium 3) et l’exécuter sur la machine utilisée pour configurer la grille. En dehors de cela, les navigateurs et leurs pilotes de navigateur respectifs doivent être disponibles sur les VM (ou machines) qui agissent comme des nœuds Selenium.
Cette approche n’est ni évolutive ni fiable, car l’infrastructure nécessiterait une maintenance et une mise à niveau continues pour s’assurer qu’elle est utilisable d’un point de vue test. En outre, l’exécution de Selenium Grid ajoute à la surcharge de calcul inutile.
Les images Docker utilisées pour les tests entre navigateurs avec Selenium contiennent plusieurs nœuds dans une seule image. De plus, les images Docker partagent certaines ressources système, ce qui entraîne une utilisation moindre des ressources par rapport aux machines virtuelles.
Testez les sites hébergés localement.
-
Les conteneurs Docker ont des options pour accéder aux sites de développement locaux. Si vous utilisez Windows ou Linux, l’utilisation de l’option –host lors de l’exécution des conteneurs Docker aide à tester les sites hébergés localement.
Moins de frais généraux d’installations.
-
Lorsque vous utilisez Selenium avec Docker, il n’est pas nécessaire d’installer les navigateurs et pilotes de navigateur nécessaires sur la machine hôte. Dans l’ensemble, il est beaucoup plus rapide de commencer avec les tests d’automatisation Web Selenium à l’aide de conteneurs Docker prédéfinis que d’installer et de configurer la grille Selenium. Vous pouvez l’appeler « installation minimale et avantages maximaux » !
Une gamme d’images Docker (avec Selenium) sur le Docker Hub peut être utilisée en exécutant quelques commandes sur le terminal. Certaines de ces images sur le Docker Hub ont été développées et maintenues par Selenium HQ.
Voici une large catégorie d’images disponibles sur le Docker Hub et utilisées pour les tests d’automatisation Web :
- Autonome : Images autonomes (de Chrome, Firefox, etc.) pouvant être exécutées sur le serveur Selenium. Ces images doivent être exécutées sur différents ports (par exemple, 4444, 4445, etc.), sinon cela entraînerait des conflits de ports.
- Moyeu: Le rôle joué par le Selenium Hub avec Docker est le même que celui de la Selenium Grid normale. En termes de Docker, le Hub est un service basé sur le cloud qui vous permet de créer des images et de les tester.
- Nœud: Semblables aux nœuds dans la terminologie Selenium, les conteneurs de nœuds peuvent être démarrés avec l’image Hub. Par exemple, les conteneurs de nœuds Firefox et Chrome peuvent être démarrés avec l’image Selenium Hub.
-
Surtout, l’image de base est utilisée pour construire vos propres images. Plus loin dans le blog, nous montrerons comment exécuter des tests de sélénium dans Docker à l’aide d’un conteneur autonome et d’une grille de conteneurs.
Sécurité améliorée.
-
Docker est sécurisé et portable, et les conteneurs Dockers s’exécutent dans un environnement isolé. Les tests Selenium peuvent être exécutés de manière beaucoup plus sécurisée avec le conteneur Docker par rapport à la grille Selenium locale.
Pour une meilleure évolutivité, les tests Selenium sur Docker peuvent être dans les sous-sections ci-dessous.
Moins de risques de divergences
-
L’installé…