Architecture .NET pour l'automatisation des test en Ecommerce (1/3)

Architecture C# Selenium
Par Lina AZOUZI il y a un mois 13 minutes

C'est maintenant le moment de lever le voile sur les mystères intrigants qui entourent ce Framework !

Si vous avez eu l'occasion de parcourir mon dernier article, dans lequel j'ai présenté un exemple d'intégration de l'outil de self-Healing "Healenium" avec un Framework d'automatisation de tests (Selenium C#), sans entrer dans les détails de sa mise en œuvre, il est fort probable que vous ayez attendu avec grande impatience le présent article.

Comme promis, je détaillerai tout au long de cet article, qui sera divisé en plusieurs parties, les aspects de l'implémentation de ce Framework dans le contexte d'un projet d'automatisation des tests pour une application e-commerce.

Certes, tester les applications de commerce électronique n'est pas une tâche facile.

Par exemple, une plateforme de commerce électronique comporte souvent de multiples fonctionnalités qui doivent être validées et testées, notamment les paniers d'achat, les passerelles de paiement, les catalogues et descriptions de produits et les comptes clients.

Ne pas tester à fond l'un de ces domaines peut entraîner des problèmes tels qu'une faible satisfaction des clients, des pertes de ventes et des failles de sécurité.

L’automatisation de ces tests introduit un niveau supplémentaire de complexité.

C’est dans ce contexte que l’utilisation de frameworks devient non seulement recommandée mais également essentielle.

1. Importance et types des Frameworks d’Automatisation de Tests

La mise en place d'un framework d'automatisation avant la création des scripts pour un site e-commerce est une étape primordiale.

Un framework bien structuré offre une base solide, facilitant la gestion efficace des processus automatisés. Il permet une conception modulaire, une maintenance simplifiée et une extensibilité, garantissant la pérennité et l'efficacité des scripts dans un environnement dynamique tel que celui d'un site e-commerce.

En établissant un framework robuste en amont, on optimise la fiabilité, la réutilisabilité et la scalabilité des scripts automatisés, contribuant ainsi à une gestion plus fluide.

Bien évidemment, un Framework bien conçu est le fondement d’une automatisation des tests réussie.

Il existe divers types de frameworks d'automatisation de tests, et il est crucial de comprendre que le choix de l'un dépendra du contexte spécifique de votre application.

Dans ce graph, je vous propose un aperçu des types de frameworks d'automatisation de tests les plus reconnus.

image

Le framework élaboré, sur lequel je ne m'attarderai pas trop pour entamer son explication (ça sera fait dans la section suivante 😊), est de nature hybride, utilisant Selenium avec C# et NUnit.

L'avantage principal d'un framework hybride est qu'il nous permet de combiner les approches de deux ou trois autres frameworks afin de surmonter les limitations d'un seul. Cela offre une plus grande flexibilité lors de la réalisation de tests d'automatisation.

2. Architecture du framework élaboré

Voici le schéma de l’architecture de notre framework d'automatisation des tests pour une application e-commerce :

image

Notre framework comporte deux parties :

  • Core Automation
  • E-Commerce Automation

2.1 Core Automation

Contient toutes les utilités génériques (Helpers, Interfaces et Base Classes) nécessaires pour écrire et exécuter des tests, indépendamment de l'application sous test.

2.2 E-Commerce Automation

La démarche adoptée dans cette section implique la subdivision des modules et leur organisation dans une structure similaire à celle de l'application sous test.

Parallèlement, les données de test sont stockées de manière distincte du script, simplifiant ainsi la maintenance.

Concernant le "Page Object Repository", le choix du modèle de conception s'est porté sur le Page Object Model (POM).

Le modèle Page Object (POM) est une approche de conception fréquemment employée dans l'automatisation des tests, créant un référentiel d'objets pour les éléments de l'interface utilisateur web.

L'avantage de ce modèle réside dans la réduction de la duplication de code et l'amélioration de la maintenance des tests.

Selon ce modèle, chaque page web de l'application doit être associée à une classe de page correspondante. Cette classe Page identifie les WebElements de la page web et comporte également des méthodes Page qui exécutent des actions sur ces WebElements.

Dans cette première section, je me concentrerai uniquement sur la mise en place de la partie Core Automation. Quant à la seconde partie, Celle du « E-Commerce Automation », elle sera développée dans les sections suivantes.

3. Core Automation : structure et définition

Maintenant que c’est plus clair, en ce qui concerne l'architecture globale du framework en place, plongeons davantage dans le sujet en présentant le diagramme de classe de la couche Core qui se compose de trois sous-parties qui sont, comme le montre bien le diagramme de classes suivant :

  • Core Base classes
  • Core Interfaces
  • Core Helpers

image

3.1 Core Base classes

Ce sont des classes abstraites qui fournissent des méthodes communes, servant de référence pour des classes dérivées plus spécifiques. Elles favorisent la réutilisation du code, la cohérence et la structuration dans le développement logiciel, en encapsulant des aspects génériques.

Dans notre contexte, j’ai utilisé deux classes de bases qui sont « BaseTest » et « BasePage ».

La classe « BaseTest » va nous servir comme un point central en fournissant des méthodes qui facilitent l'écriture de tests. On va trouver principalement des méthodes de Setup et de TearDown qui s'exécutent avant et après chaque test, assurant ainsi un état initial cohérent.

Quant à la classe « BasePage », elle encapsule les éléments et les comportements communs d'une page web, facilitant la création de classes de page spécifiques et la maintenance des objets Page Object Model (POM).

Ces classes sont cruciales pour promouvoir la réutilisation du code, la maintenabilité et la cohérence dans l'automatisation des tests avec Selenium en C#.

3.2 Core Interfaces

Les interfaces en programmation orientée objet définissent un ensemble de méthodes publiques et, éventuellement, de propriétés, constituant une spécification formelle que les classes qui les implémentent doivent respecter. Contrairement aux classes abstraites, les interfaces ne fournissent pas d'implémentation.

3.3 Core Helpers

Les « helpers » sont des composants de code largement utilisés pour améliorer la lisibilité du code, réduire la duplication et faciliter la maintenance dans le développement logiciel.

Dans notre contexte, 6 helpers ont été créés, à savoir :

3.3.1 ExtentReports

C'est une bibliothèque de génération de rapports open-source utilisée pour l'automatisation des tests. Elle peut être intégrée facilement avec des frameworks de test tels que JUnit, NUnit, TestNG, etc.

Ces rapports sont des documents HTML qui présentent les résultats sous forme de Dashboard. Ils offrent également la possibilité de générer des logs personnalisés, des captures d'écran et d'autres détails personnalisés.

image

Afin d'intégrer cette bibliothèque à la classe ExtentReportHelper, j'ai ajouté le package NuGet « ExtentReports » au projet CoreAutomation.

J'ai opté pour la version 5.0.0, la dernière version stable lors du développement du projet Core.

La documentation de cette version est disponible ici : extentreports-core | Extent Framework

Je vous invite également à consulter leur repository GitHub si vous souhaitez obtenir plus de détails : ExtentReports - GitHub

3.3.2 Serilog Seq

Serilog Seq est une combinaison populaire de bibliothèques de logging pour les applications .NET.

Serilog est une bibliothèque de logging flexible et extensible, tandis que Seq est un serveur de logging événementiel qui permet d'analyser, de visualiser et de stocker des logs de manière centralisée.

image

L'intégration de Serilog avec Seq permet aux développeurs de consigner et de gérer les événements de manière plus efficace, avec des fonctionnalités telles que la recherche, la requête et la corrélation des logs, améliorant ainsi le processus de débogage et de surveillance des applications .NET.

Afin d'intégrer cette bibliothèque à la classe SerilogLoggerHelper, j'ai ajouté le package NuGet « Serilog.Sinks.Seq » au projet CoreAutomation.

image

Je vous joins le lien de leur GitHub repository : GitHub - datalust/serilog-sinks-seq: A Serilog sink that writes events to the Seq structured log server

3.3.3 ExcelDataReader

C’est une bibliothèque NuGet qui vous aide à lire des fichiers Excel.

Afin d'intégrer cette bibliothèque à la classe ExcelHelper, j'ai ajouté les deux packages NuGet « ExcelDataReader » et « ExcelDataReader.DataSet » au projet CoreAutomation.

image

Vous pouvez trouver ces bibliothèques Open Source sur lesquelles nous nous appuyons pour la lecture d'Excel par ici : GitHub - ExcelDataReader/ExcelDataReader: Lightweight and fast library written in C# for reading Microsoft Excel files

3.3.4 Newtonsoft.JSON

Newtonsoft.Json, également connu sous le nom de Json.NET, est une bibliothèque open-source populaire pour le traitement des données au format JSON (JavaScript Object Notation) en .NET. Elle offre des fonctionnalités puissantes de sérialisation et de désérialisation, permettant de convertir facilement des objets .NET en format JSON et vice versa.

Newtonsoft.Json est largement utilisé dans le développement d'applications .NET pour gérer les échanges de données structurées au format JSON, couramment utilisé dans les services web, les API, et la communication entre clients et serveurs.

Le GitHub repository de cette bibliothèque est disponible ici : GitHub - JamesNK/Newtonsoft.Json.Schema: Json.NET Schema is a powerful, complete and easy to use JSON Schema framework for .NET

Afin d'intégrer cette bibliothèque à la classe JsonHelper, j'ai ajouté le package NuGet « Newtonsoft.Json» au projet CoreAutomation.

image

3.3.5 Selenium

Selenium WebDriver est une bibliothèque open source qui fournit une interface de programmation pour automatiser les tests d'applications web.

Il permet aux développeurs de créer des scripts en utilisant différents langages de programmation tels que Java, C#, Python, etc., pour interagir avec les éléments d'une page web, simuler des actions utilisateur et effectuer des vérifications automatisées sur des navigateurs web.

WebDriver offre une compatibilité multi-navigateurs, permettant l'exécution de tests sur divers navigateurs tels que Chrome, Firefox, Edge, etc.

L’URL du projet est disponible ici : Selenium

Il suffit d’installer le package NuGet « Selenium.Webdriver » pour pouvoir l’utiliser par la suite dans la classe SeleniumBrowserHelper.

image

3.3.6 Healenium

Je vous invite à défiler un peu dans notre rubrique blog KOUKA, vVous y trouverez mon article sur Healenium.

Cet article, susceptible de captiver votre intérêt, vous guidera à travers une exploration approfondie pour découvrir Healenium.

Je souhaite simplement mentionner un détail important, à savoir l'installation du package NuGet "RemoteWebdriverOptions".

Cette classe générique vise à transmettre des capacités aux web Drivers génériques/à distance.

image

Avec la vision claire de la structure fondamentale de notre projet CoreAutomation, il est temps d'entrer dans le vif du sujet en commençant à coder, n'est-ce pas ?

Préparez-vous pour une plongée passionnante dans l'implémentation qui vous attend dans la section suivante ! 😊

4. Core Automation : implémentation et code

Explorons désormais l'implémentation du code en examinant les méthodes et les propriétés utilisées dans chaque Helper.

Pour entamer cette exploration, concentrons-nous sur le ExtentReportHelper.

ExtentReport (à partir de la Version 5) contient trois classes fréquemment utilisées, à savoir :

  • ExtentReports
  • ExtentSparkReporter
  • ExtentTest

Je vous fournis la syntaxe d'un échantillon de méthodes implémentées dans ExtentReportHelper :

image

Voici également le code à intégrer dans la classe BaseTest en utilisant NUnit :

image

Explorons à présent l'implémentation de la classe SerilogLoggerHelper.

D’abord Il faut exécuter la commande suivante en remplaçant {LogPath} par le path souhaité :

docker run --name seq -d --restart unless-stopped -e ACCEPT_EULA=Y -v {LogPath}:/data -p 8081:80 datalust/seq:latest

On va obtenir ce résultat après que Docker télécharge l’image datalust/seq et termine la configuration :

image

Ensuite il faut configurer le fichier de configuration appsettings.json :

image

Après l’ajout de ces méthodes dans la classe SerilogLoggerHelper :

image

Enfin le code à intégrer dans la classe BaseTest en utilisant NUnit :

image

Concluons notre exploration des helpers en abordant le SeleniumBrowserHelper :

image

Et pour finir notre implémentation, revenons à la classe de base BaseTest afin d’explorer l’implémentation des deux méthodes StartUpTest() et AfterTest() en utilisant NUnit :

image

5. Conclusion

Nous arrivons à la fin de la première étape de notre roadmap pour la création d'un framework d'automatisation destiné à une application e-commerce.

J'ai principalement couvert la partie CoreAutomation, mais ce n'est pas la fin. La deuxième partie sera consacrée à la mise en place du projet d'automatisation e-commerce. Ne la manquez pas !