Comment faire des tests de régression avec Selenium WebDriver ?

programmation

Lors du test d'une application Web, il est toujours essentiel de sélectionner le bon outil pour le test. Cela nous aide à réduire les retouches et à accélérer l'exécution des tests. L'outil choisi, ainsi que le cadre d'automatisation, doivent toujours être utiles pour effectuer efficacement les tests de régression.

Les tests de régression est généralement effectuée sur des modules précédemment testés en raison de changements ou de modifications dans un module existant, d'améliorations de fonctionnalités, de changements de configuration ou de toute autre mise à niveau mineure ou significative liée aux fonctionnalités. Il peut également être effectué chaque fois qu'un correctif a été apporté aux bogues signalés.

Quand effectuer des retests et des tests de régression ?

Un nouveau test est effectué pour s'assurer que le correctif du développeur pour un défaut existant a fonctionné comme prévu.

Des tests de régression sont effectués sur les modules précédemment testés pour garantir que de nouveaux défauts ne sont pas générés à la suite d'une modification due à l'amélioration du code, à la correction de défauts existants ou à toute mise à niveau de la configuration.

Est-il vraiment nécessaire de faire une régression ?

Voyons un exemple pour justifier le point ci-dessus. Considérons un scénario dans lequel une marque de vêtements a lancé un site Web pour les achats en ligne et a mis en place une carte de crédit comme mode de paiement. Cela a été développé et déployé avec succès pour les tests. Les testeurs effectuent les tests fonctionnels et non fonctionnels sur cette version et ont signalé des défauts s'il y a des écarts dans le comportement. Les défauts ont été corrigés et la version est redéployée et les tests ont été effectués avec succès et cette fonctionnalité a été mise en ligne. Après quelques semaines, une autre nouvelle fonctionnalité a été conçue, qui permet aux utilisateurs de payer par carte de débit. Ce nouveau module a été développé et déployé à des fins de test. Le nouveau module a été testé avec succès. Maintenant, que se passe-t-il si la régression n'est pas effectuée sur le module précédent et que le code est déployé en production ? Il y a des chances que le développeur ait déployé une autre version de code qui n'a pas les correctifs de défauts ou que le développeur ait corrigé un ou plusieurs défauts qui ont ainsi cassé une autre fonctionnalité, provoquant ainsi la panne de la fonctionnalité de travail existante.

Cela entraînerait une perte énorme pour l'entreprise. Par conséquent, il est toujours recommandé d'effectuer des tests de régression pour s'assurer que l'ajout de toute nouvelle fonctionnalité ou toute modification apportée aux défauts ne casse pas le module de travail précédent.

Ainsi, la régression occupe un rôle crucial dans les tests et elle est effectuée tout au long du cycle de vie des tests.

Quels sont les avantages des tests de régression ?

1. Les tests de régression garantissent qu'il n'y a pas d'erreurs produites en raison de la modification du code

2.Il garantit l'exactitude de la fonctionnalité

3.Il garantit que les défauts corrigés ne se reproduisent plus en raison d'un changement de code

4.Il aide à identifier les bogues au début du développement

Quel est le sélénium?

Le sélénium a été largement utilisé pour tester des applications Web. Comme il s'agit d'un outil d'automatisation open source, il a été couramment utilisé par la communauté des tests. Le sélénium comprend quatre composants principaux conçus à des fins différentes et la sélection de ces composants dépend des exigences de test. Les quatre composants sont :

  • Sélénium IDE
  • Sélénium RC
  • Pilote Web Selenium
  • Grille de sélénium

Selenium WebDriver est un pilote spécifique au navigateur qui fournit une interface pour écrire et exécuter les scripts d'automatisation du navigateur pour tester différentes applications Web. Il fournit une liaison pour tous les langages populaires tels que Java, Python, Ruby, etc. Il prend en charge tous les principaux navigateurs tels que Chrome, Firefox, Opera, C'EST À DIRE, Edge etc. Il peut être intégré à divers frameworks, comme Maven ou ANT, pour compiler le code source. Pour les tests et les rapports d'applications, il peut également être intégré à des cadres de test tels que TestNG pour faciliter les tests d'automatisation. Il peut être intégré à Jenkins pour la création et le déploiement automatisés d'intégration continue ou de livraison continue.

Voyons comment Selenium WebDriver peut être utilisé efficacement pour effectuer des tests de régression.

Comment faire des tests de régression avec Selenium WebDriver ?

Un bon framework d'automatisation doit être conçu et développé de manière à contenir beaucoup de code ou de modules réutilisables couvrant les principales caractéristiques ou fonctionnalités de l'application. Il n'existe pas d'outil d'automatisation de ce type entièrement dédié aux tests de régression. Le cadre d'automatisation doit être mis en œuvre de manière à prendre en charge efficacement les tests de régression. Selenium est un outil d'automatisation qui peut être utilisé pour tester les applications Web dans différents navigateurs. Lors de la conception du framework avec Selenium, il doit contenir plusieurs méthodes qui peuvent être réutilisées et l'ajout de tout nouveau code dans n'importe quelle partie du framework doit se faire facilement.

Comment concevoir un framework Selenium pour effectuer des tests de régression ?

J'ai proposé quelques approches qui seraient vraiment utiles pour exécuter des tests de régression à l'aide de Selenium WebDriver.

 

 

1.Paramétrage

Considérez un scénario dans lequel une entreprise lance un site Web doté de fonctionnalités de base prises en charge uniquement dans le navigateur Chrome. Une fois qu'il est construit, déployé et testé, le site Web est mis en ligne. Après quelques jours, la société prévoit d'étendre la prise en charge du navigateur dans Firefox. Une fois la prise en charge du navigateur étendue, la nouvelle version est déployée pour être testée. Si le cadre existant n'a pas été conçu pour apporter des modifications afin de prendre en charge les tests de régression, ce serait une tâche fastidieuse. Pour gérer cela, nous pouvons utiliser le paramétrage pour ajouter différentes valeurs et exécuter des tests de régression avec un effort minimal ainsi qu'un changement de code minimal dans le framework Selenium. Ce paramétrage peut se faire de deux manières simples.

1.Utilisation de l'annotation de paramètres dans TestNG

2.Définition du paramètre et lecture à partir du fichier Propriétés

Implémentons le code en utilisant les deux méthodes ci-dessus qui seraient très utiles pour effectuer une régression

Comment utiliser l'annotation de paramètre pour effectuer des tests de régression ?

Cette annotation est utilisée pour passer les valeurs à l'intérieur des méthodes en définissant ses valeurs et le nom du paramètre dans le fichier testing.xml.

Vous vous demandez en quoi cela sera utile pour effectuer une régression à l'aide de Selenium Webdriver ?

Voyons la mise en œuvre ci-dessous.

Comme indiqué dans la partie introduction, lorsque l'entreprise souhaite étendre la prise en charge de son navigateur à un autre navigateur, il serait facile de définir les valeurs dans le champ de paramètre du fichier testing.xml.

package com.Page de connexion ;

importer java.util.concurrent.TimeUnit ;

importer org.openqa.selenium.By;

importer org.openqa.selenium.WebDriver ;

importer org.openqa.selenium.chrome.ChromeDriver ;

importer org.openqa.selenium.firefox.FirefoxDriver ;

importer org.openqa.selenium.opera.OperaDriver ;

importer org.testng.annotations.AfterClass ;

importer org.testng.annotations.AfterTest ;

importer org.testng.annotations.BeforeTest ;

importer org.testng.annotations.Parameters ;

importer org.testng.annotations.Test ;

classe publique LoginTest {

pilote WebDriver public ;

@AvantTest

@Parameters ("navigateur")

public void setUp (navigateur de chaînes) {

if(navigateur.equalsIgnoreCase ("Firefox")) {

System.setProperty ("WebDriver.gecko.driver", "C:\\Users\\shalini\\Downloads\\geckodriver-v0.26.0-win64\\geckodriver.exe");

pilote = nouveau FirefoxDriver();

}

else if (browser.equalsIgnoreCase ("GoogleChrome")) {

System.setProperty(“WebDriver.chrome.driver”, “C:\\Users\\shalini\\Téléchargements\\chromedriver\\chromedriver.exe”);

pilote = nouveau ChromeDriver();

}

}

@Tester

annulation publique de connexion () {

driver.get ("https://opensource-demo.orangehrmlive.com/");

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

Chaîne pageTitle = driver.getTitle();

System.out.println("Le titre de cette page est ===> " +pageTitle);

driver.findElement(By.id("txtUsername")).clear();

driver.findElement(By.id("txtUsername")).sendKeys("Admin");

driver.findElement(By.id("txtPassword")).clear();

driver.findElement(By.id("txtPassword")).sendKeys("admin123");

driver.findElement(By.id("btnLogin")).click();

}

@AprèsTest

démolition du vide public () {

pilote.quit();

}

}

Fichier TestNG.xml

Dans le code ci-dessus, lorsque l'application ne prend en charge que les navigateurs Firefox et Chrome, nous avons paramétré les tests avec ces deux navigateurs en utilisant le nom et la valeur du paramètre dans le fichier testNG.xml. Maintenant, l'application a été testée avec succès et le code est déployé en production.

Et si dans la prochaine version, la société prévoyait d'étendre la prise en charge du navigateur dans Opera ?

La réponse est plutôt simple. Ajoutez simplement une autre valeur de navigateur dans la balise de paramètre dans le TestNG.xml comme ci-dessous.

Après avoir modifié le fichier Testng.xml, étendez la fonction dans le code principal comme ci-dessous

if(browser.equalsIgnoreCase("Opera")) { System.setProperty("WebDriver.opera.driver","C:\\Users\\shalini\\Downloads\\operadriver\\operadriver_win64\\operadriver.exe");

pilote = nouveau OperaDriver();

}

Ce faisant, la nouvelle version peut être testée avec des modifications mineures dans l'implémentation qui existe déjà et vous pouvez également effectuer des tests de régression pour la version précédente. J'ai utilisé uniquement la fonctionnalité de connexion dans l'application à des fins de démonstration. Lorsque nous avons plusieurs modules pour tester cette approche, il sera très facile de réaliser des tests de régression. Non seulement les types de navigateurs, vous pouvez également définir d'autres paramètres dans la section des paramètres pour effectuer la régression selon vos besoins.

Comment définir les paramètres dans le fichier de propriétés pour effectuer des tests de régression ?

Le fichier de propriétés est l'une des principales fonctionnalités d'un cadre d'automatisation qui permet d'effectuer efficacement des tests de régression.

Nous pouvons définir différentes clés et valeurs dans le fichier de propriétés qui peuvent ensuite être utilisées dans le script d'automatisation principal. Tous les modules de l'application Web peuvent être intégrés ensemble et les clés et valeurs des différents modules peuvent être définies. Lorsqu'un changement est apporté dans une version, le fichier de propriétés peut être modifié pour s'adapter aux changements. Cette approche est très simple, facile à mettre en œuvre et à organiser.

Vous trouverez ci-dessous un code simple pour définir les propriétés dans un fichier de propriétés et lire la propriété requise dans le code principal.

paquet pages ;

importer java.io.FileInputStream ;

importer java.io.FileNotFoundException;

importer java.io.IOException ;

importer java.util.Properties ;

importer org.openqa.selenium.By ;

importer org.openqa.selenium.WebDriver ;

importer org.openqa.selenium.chrome.ChromeDriver ;

importer org.testng.annotations.AfterTest ;

importer org.testng.annotations.BeforeTest ;

importer org.testng.annotations.Test ;

public classe Démo {

Pilote WebDriver ;

@AvantTest

public annuler mettre en place() {

Système.setProperty("webdriver.chrome.driver", "C:\\Users\\Shalini\\Downloads\\chrom86_driver\\chromedriver.exe");

chauffeur = neufs ChromeDriver();

}

@Tester

public annuler connexion() jette IOException {

Propriétés prop = neufs Propriétés();

Entrée FileInputStream = neufs FileInputStream ("D:\\eclipse-workspace\\SeleniumRegression\\src\\Properties\\webpage.properties");

prop.load(entrée);

//lire la valeur de l'URL de connexion à partir du fichier de propriétés

String login_url =prop.getProperty("loginURL");

driver.get(login_url);

//lire la valeur du nom d'utilisateur dans le fichier de propriétés

String nom d'utilisateur = prop.getProperty ("nom d'utilisateur");

//lire la valeur du mot de passe dans le fichier de propriétés

String password = prop.getProperty("mot de passe");

driver.findElement(Par.id("txtUsername")).sendKeys(nom d'utilisateur);

driver.findElement(Par.id("txtPassword")).sendKeys(mot de passe);

Système.ande.println(driver.getTitle());

}

@AprèsTest

public annuler démolir() {

pilote.quit();

}

}

Page Web.properties

########Cette propriété contient l'URL de l'application web##############

URL de connexion = https://opensource-demo.orangehrmlive.com/

username = Administrateur

mot de passe = admin123

TestNG.xml

<?xml version="1.0" encodage="UTF-8"?>

<nom de la suite="Suite de tests">

<nom du test=« Test de connexion »>

<nom de la classe="Pages.Démo">

2.Exécuter des tests de régression à l'aide de groupes

L'utilisation de groupes pour exécuter les tests de régression est l'une des approches les plus couramment utilisées. TestNG fournit une fonctionnalité appelée « groupes » qui permet aux testeurs de regrouper les tests dans certains groupes avec un nom unique et d'exécuter ensuite uniquement un ou plusieurs groupes spécifiques. Par cette fonctionnalité, on peut créer un groupe pour les tests de régression et les exécuter si nécessaire.

Vous trouverez ci-dessous un code simple contenant divers tests pour tester une application Web, qui comprend des tests regroupés sous le groupe « RegressionTest » pour exécuter les tests pour les tests de régression spécifiquement.

paquet pages ;

importer statique org.testng.Assert.affirmerÉgal;

importer java.util.concurrent.TimeUnit ;

importer org.openqa.selenium.By ;

importer org.openqa.selenium.WebDriver ;

importer org.openqa.selenium.chrome.ChromeDriver ;

importer org.testng.annotations.AfterTest ;

importer org.testng.annotations.BeforeTest ;

importer org.testng.annotations.Test ;

public classe Page de connexion {

Pilote WebDriver ;

@AvantTest

public annuler mettre en place() {

Système.setProperty("webdriver.chrome.driver", "C:\\Users\\Shalini\\Downloads\\chrom86_driver\\chromedriver.exe");

chauffeur = neufs ChromeDriver();

}

@Test (groupes = "Test de régression")

public annuler connexion() {

Chaîne login_url = "https://opensource-demo.orangehrmlive.com/" ;

driver.get(login_url);

driver.manage (). window (). maximiser ();

driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);

driver.findElement(Par.id("txtUsername")).sendKeys ("Admin");

driver.findElement(Par.id("txtPassword")).sendKeys ("admin123");

Système.ande.println(driver.getTitle());

}

@Tester

public annuler tableau de bord() {

driver.findElement(Par.id("menu_dashboard_index")).click();

String textPresent = driver.findElement(By.xpath("//*[@id=\"content\"]/div/div[1]/h1″)).getText();

String textToBePresent = « DashBoard » ;

affirmerÉgal(textePrésent, texteToBePresent);

}

@Tester

public annuler test3() {

Système.ande.println("C'est le test 3");

}

@Test(groupes = « Test de régression »)

public annuler test4() {

Système.ande.println("C'est le test 4");

}

@Tester

public annuler test5() {

Système.ande.println("C'est le test 5");

}

@Test(groupes = « Test de régression »)

public annuler test6() {

Système.ande.println("C'est le test 6");

}

@Tester

public annuler test7() {

Système.ande.println("C'est le test 7");

}

@AprèsTest

public annuler démolir() {

pilote.quit();

}

}

<?xml version="1.0" encodage="UTF-8"?>

<nom de la suite="Suite de tests">

<nom du test=« Test de connexion »>

<inclure nom="Test de régression"/>

<nom de la classe="Pages.Page de connexion">

En implémentant cette approche dans notre cadre, nous pouvons également regrouper les tests de différentes manières, comme un groupe pour exécuter des tests de fumée, un groupe pour exécuter des tests de santé mentale, etc. Dans le fichier TestNG.xml, nous devons mentionner le nom du groupe (RegressionTest dans notre cas ) pour exécuter les tests spécifiques à ce groupe.

3.Utiliser des balises pour effectuer des tests de régression

Le framework Cucumber fournit une fonction spéciale pour regrouper les tests en fonction de certains critères et les exécute chaque fois que nécessaire. Cette fonction unique appelée « tags » est définie dans le fichier TestRunner du framework Cucumber. Tous les tests définis avec une balise spécifique peuvent être exécutés à un moment qui devient l'approche la plus simple et la plus directe pour effectuer des tests de régression pour les cas de test dans l'application Web à l'aide de Selenium Webdriver.

Fichier de caractéristiques

Fonctionnalité: Pour tester la fonctionnalité de connexion de l'application Web

@Test de régression

Scénario: Vérifiez si l'utilisateur peut se connecter à son compte avec succès

Donné L'utilisateur accède à la page Web

Quand L'utilisateur entre "Administrateur" et " admin123 "

Ensuite L'utilisateur doit être connecté avec succès

Scénario: Vérifiez si l'utilisateur est en mesure d'ajouter des produits dans le panier

Donné L'utilisateur est dirigé vers la page d'accueil

Quand L'utilisateur sélectionne et ajoute un produit

Ensuite Le produit sélectionné doit être trouvé dans le panier

@Test de régression

Scénario: Vérifiez si l'utilisateur est en mesure de mettre à jour ses coordonnées dans Mon compte

Donné L'utilisateur clique sur le bouton Mon compte

Quand L'utilisateur met à jour ses coordonnées

Ensuite Les nouveaux détails doivent être enregistrés et mis à jour dans la page d'informations de l'utilisateur

Fichier TestRunner

paquet tester;

importer org.junit.runner.RunWith;

importer concombre.api.CucumberOptions;

importer concombre.api.junit.concombre;

@RunWith(Concombre.classe)

@CucumberOptions(features = "D:\\eclipse-workspace\\CucumberDemo\\src\\main\\resources\\Features\\Login.Feature",

colle = "Étapes",

plugin = {"joli", "html:cible/concombre"},

monochrome = oui,

tags = {« Test de régression »}

)

public classe Exécuteur de test {

}

Conformément au code ci-dessus, les cas de test regroupés sous « RegressionTest » seraient exécutés. Ainsi, l'utilisation de balises pour effectuer des tests de régression est l'une des approches efficaces pouvant être implémentées dans un cadre d'automatisation Selenium.

Emballer…!

Un cadre d'automatisation doit toujours être conçu de manière à ce que tout changement puisse être facilement apporté au cadre. Garder à l'esprit les tests de régression lors de la conception d'un cadre éliminera la plupart des remaniements impliqués. Jusqu'à présent, je vous ai montré quelques approches pour effectuer des tests de régression tout en testant l'application Web avec Pilote Web Selenium. Faites-nous savoir les autres approches efficaces que vous avez utilisées lors de l'exécution de tests de régression à l'aide de Selenium Webdriver dans la section commentaires ci-dessous. S'il vous plaît, partagez cet article avec vos collègues et amis et partagez vos connaissances. Bon test…!