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

Architecture C# Selenium
Par Lina AZOUZI il y a 6 mois 9 minutes

Dans le précédent blog, consacré à la première partie de notre roadmap, nous avons examiné en détail la structure et la mise en œuvre du projet CoreAutomation.

Ce projet propose des classes génériques destinées à être utilisées dans divers projets d'automatisation de tests, notamment dans le contexte d'un projet d'automatisation e-commerce.

Dans cet article, nous explorerons l'intégration du projet Core dans le projet e-commerce, en mettant l'accent sur l'importance des répartitions en couches dans un framework.

Je vous présenterai également comment cette répartition s'est opérée au sein de notre framework, en explorant chaque couche en détail.

Exploration de l'Architecture en Couches

La répartition en couches dans un framework d'automatisation de tests n'est pas simplement une question d'esthétique architecturale, mais une stratégie puissante qui dynamise le développement, la maintenance et l'évolution des tests automatisés.

Rappelons brièvement, à travers cette structure, la schématisation globale de la répartition en couche dans notre framework.

image

Comme le montre bien ce schéma, on a eu recours à l’utilisation de quatre couches qui sont :

  • La couche de base (Core Layer)
  • La couche d'implémentation des tests (Test Implementation Layer)
  • La couche d'exécution des tests (Test Execution Layer)
  • La couche de configuration (Configuration Layer)

Décortiquons à présent les nombreux atouts de cette structuration en couches :

  • Clarté architecturale : La répartition en couches offre une structure claire et organisée, où chaque couche a une responsabilité spécifique. Que ce soit la couche d'implémentation des tests, d'exécution des tests ou de configuration, cette structuration facilite la compréhension et la localisation des composants.

  • Facilité de Maintenance : Lorsque des modifications surviennent, une architecture en couches permet une maintenance ciblée. Plutôt que de réviser l'ensemble du framework, les ajustements peuvent être effectués de manière isolée dans la couche pertinente, préservant ainsi l'intégrité des autres composants.

  • Réutilisation des Composants : Les couches offrent une opportunité exceptionnelle de réutilisation des composants. Les modules spécifiques à une couche peuvent être extraits et intégrés dans d'autres projets, accélérant ainsi le développement.

  • Gestion de Versions Simplifiée : La séparation des couches simplifie considérablement la gestion des versions. Les mises à jour dans une couche n'ont pas nécessairement d'impact sur les autres, permettant un contrôle précis des évolutions du framework.

  • *Adaptabilité et Évolutivité : En adoptant une approche en couches, le framework devient plus adaptable aux changements technologiques. L'ajout de nouvelles fonctionnalités ou l'intégration de nouveaux outils peut être géré avec une fluidité accrue, favorisant ainsi l'évolutivité du framework au fil du temps.

Si vous avez bien repéré, la couche de base (Core Layer) est située dans le projet Core Automation. Cela soulève la question suivante :

Comment pouvons-nous intégrer de manière optimale le projet Core Automation, représenté par la couche que nous avons appelée Core Layer, avec le projet e-commerce ?

Intégration du projet CoreAutomation dans le projet E-Commerce Automation

La solution est simple 😊, Il vous suffit de le transformer en un package NuGet, comme illustré clairement dans cette représentation.

image

L'adoption stratégique des packages NuGet dans les frameworks de tests automatisés va au-delà de la gestion des dépendances.

Elle offre une agilité essentielle en intégrant des fonctionnalités préconfigurées, simplifie la maintenance des versions pour des tests cohérents, et favorise une collaboration efficace au sein des équipes.

En résumé, les NuGet packages sont un élément clé pour des tests automatisés agiles, fiables et évolutifs.

En projetant l'utilité de l'utilisation du package NuGet CoreAutomation dans notre contexte, prenons cet exemple :

Imaginez que la dernière version de Selenium ait subi des modifications, impactant ainsi les méthodes Wrapper développées dans la classe SeleniumBrowserHelper (que j’ai expliqué son implémentation dans mon précédent article)

Mettre à jour cette classe dans tous les projets serait fastidieux !

En utilisant le NuGet CoreAutomation, cela devient un processus simplifié ; il suffit de mettre à jour la version du package Core une seule fois pour effectuer la modification.

Maintenant que l'intégration du projet Core Automation dans le projet E-commerce Automation est éclaircie, concentrons-nous sur les détails de la mise en œuvre de ce projet E-Commerce.

E-commerce Automation : La couche d'implémentation des tests

Je vous dévoile à présent le diagramme de classes de la couche d'implémentation des tests. Pour illustrer, je vais prendre l'exemple du sous-module LoginTests, qui s'inscrit dans le cadre de l'automatisation des scénarios de tests du module UserAccountTests au sein d'une application e-commerce. Le schéma ci-dessous met en évidence que la couche d’implémentation de tests se compose essentiellement de quatre classes distinctes :

  • LoginPage
  • LoginData
  • LoginAction
  • LoginVerification

image

LoginPage

La classe LoginPage au sein de la couche d'implémentation des tests joue un rôle central dans l'automatisation des scénarios de connexion. Elle est spécifiquement conçue pour gérer les interactions liées à la page de connexion de l'application e-commerce.

Cette classe encapsule les fonctionnalités associées à la saisie des identifiants, à la soumission du formulaire de connexion, et à toute autre action nécessaire pour tester avec succès le processus d'authentification de l’application e-commerce sous test.

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

image

LoginData

La classe LoginData dans la couche d'implémentation des tests gère les données nécessaires aux scénarios de connexion. Elle encapsule les informations telles que les identifiants utilisateur, simplifiant ainsi la manipulation cohérente des données requises pour les tests sur la page de connexion de l'application e-commerce.

image

LoginAction :

La classe LoginAction de la couche d'implémentation des tests complète la classe LoginPage en automatisant les actions spécifiques à la page de connexion de l'application e-commerce. Elle utilise les données gérées par la classe LoginData pour effectuer des actions telles que la saisie des identifiants et la soumission du formulaire.

En résumé, la classe LoginAction assure la concrétisation des interactions automatisées définies dans la classe LoginPage en utilisant les données fournies par la classe LoginData.

Voici l’implémentation de cette classe :

image

LoginVerification :

La classe LoginVerification au sein de la couche d'implémentation des tests complète le processus de connexion automatisé.

Elle tire parti des données gérées par la classe LoginData et des méthodes définies dans la classe LoginPage, notamment les méthodes booléennes telles que IsLogInDone, pour évaluer le succès ou l'échec des scénarios de connexion.

En résumé, la classe LoginVerification assure une validation automatisée des résultats attendus en utilisant les informations de la classe LoginData et en exploitant les méthodes spécifiques fournies par la classe LoginPage.

image

Maintenant que la couche d'implémentation des tests est bien définie, explorons les aspects clés de la couche d'exécution des tests.

E-commerce Automation : La couche d'exécution des tests

Pour faciliter le développement et l'exécution de tests automatisés liés à la fonctionnalité de connexion dans le contexte d'une application e-commerce, on a eu recours à l’utilisation de la classe abstraite ECommerceTestBase :

image

La méthode SetUpLogin initialise les objets liés à la connexion en créant des instances des classes LoginData, LoginAction et LoginVerification, avec les paramètres nécessaires tels que browserHelper, reportHelper, loggerHelper, ainsi que les données spécifiques à la connexion.

Terminons avec les classes de la couche d'exécution en présentant la classe LoginTests :

image

Cette dernière utilise le framework de test NUnit pour organiser et exécuter des scénarios automatisés associés à la fonction de connexion, dans le cadre de l'automatisation d'une plateforme e-commerce.

Bien que la couche d'exécution inclue des classes dédiées à la gestion de l'exécution des tests automatisés, elle englobe également les résultats générés par le rapport d'exécution ainsi que les logs.

Dans notre framework, comme évoqué précédemment dans un blog antérieur, nous avons opté pour l'utilisation de la bibliothèque Extent Report pour générer un rapport au format HTML et de la bibliothèque d’enregistrement des logs Serilog sink pour la gestion des logs.

Je vous présente, dans ce contexte, un exemple de rapport d'exécution des scénarios de tests du sous-module LoginTests :

image

Ainsi que le log affiché dans Events - Seq, correspondant au niveau des messages ERROR :

image

Il nous reste à explorer la dernière couche de notre framework, à savoir celle de la configuration, dont les détails seront présentés dans la partie suivante.

E-commerce Automation : La couche de Configuration

La couche de configuration dans notre framework d'automatisation de tests est dédiée à la gestion des paramètres et des réglages essentiels pour l'exécution des tests.

Cette couche permettra de stocker des informations telles que les configurations de navigateur, les URL des applications, les identifiants d'accès, ou d'autres variables spécifiques au contexte des tests.

En résumé, la couche de configuration simplifie la maintenance, la réutilisation, et la gestion des variations d'environnement, rendant le framework plus robuste et adaptable aux différents contextes d'exécution.

Ci-dessous, le fichier appsetting.json utilisé pour gérer les paramètres d’exécution de notre projet E-Commerce Automation :

image

Conclusion

L’exploration de notre framework d'automatisation de tests a révélé une structure multicouche bien pensée.

Chaque couche, de la configuration à l'exécution en passant par l'implémentation des tests, joue un rôle essentiel dans la robustesse, la modularité et la facilité de maintenance de notre solution.

Dans la prochaine étape de notre roadmap, qui sera également la conclusion de notre exploration, nous intégrerons SpecFlow à la couche d'exécution des tests, renforçant ainsi la puissance et l'adaptabilité de notre framework d'automatisation de tests.