Hoe regressietesten uitvoeren met Selenium WebDriver?

programmering

Bij het testen van een webapplicatie is het altijd essentieel om de juiste tool voor het testen te selecteren. Dit helpt ons om het herwerk te verminderen en ook om de testuitvoering te versnellen. De gekozen tool, samen met het automatiseringsraamwerk, moet altijd behulpzaam zijn bij het effectief uitvoeren van de regressietests.

Regressietesten wordt meestal uitgevoerd op eerder geteste modules als gevolg van wijzigingen of aanpassingen in een bestaande module, verbeteringen in functionaliteiten, wijzigingen in de configuratie of andere kleine of significante upgrades met betrekking tot de functionaliteiten. Het kan ook worden uitgevoerd wanneer er een oplossing is gegeven voor de opgeworpen bugs.

Wanneer hertesten en regressietesten uitvoeren?

Er wordt opnieuw getest om er zeker van te zijn dat de oplossing van de ontwikkelaar voor een bestaand defect werkt zoals verwacht.

Regressietesten worden uitgevoerd op de eerder geteste modules om ervoor te zorgen dat er geen nieuwe defecten optreden als gevolg van een wijziging als gevolg van codeverbetering, defectcorrectie voor bestaande defecten of upgrades in de configuratie.

Is het echt nodig om regressie te doen?

Laten we een voorbeeld bekijken om het bovenstaande punt te rechtvaardigen. Laten we eens kijken naar een scenario waarin een kledingmerk een website voor online winkelen heeft gelanceerd en creditcard als betaalmiddel heeft geïmplementeerd. Deze is met succes ontwikkeld en ingezet om te testen. De testers voeren de functionele en niet-functionele tests uit op deze build en hebben defecten geconstateerd als er afwijkingen in het gedrag zijn. De gebreken zijn verholpen en de build is opnieuw geïmplementeerd en het testen is met succes uitgevoerd en deze functionaliteit is live gegaan. Na een paar weken is er weer een nieuwe functionaliteit ontworpen, waarmee gebruikers met pin kunnen betalen. Deze nieuwe module is ontwikkeld en ingezet om te testen. De nieuwe module is met succes getest. Wat gebeurt er nu als er geen regressie wordt uitgevoerd op de vorige module en de code in productie wordt genomen? Er zijn kansen dat de ontwikkelaar een andere versie van code heeft geïmplementeerd die niet over de defecte oplossingen beschikt of dat de ontwikkelaar een of meerdere defecten heeft verholpen die een andere functionaliteit hebben verbroken, waardoor de bestaande werkfunctionaliteit kapot gaat.

Dit zou een enorm verlies betekenen voor het bedrijf. Daarom wordt het altijd aanbevolen om regressietesten uit te voeren om ervoor te zorgen dat de toevoeging van nieuwe functionaliteit of elke wijziging die is aangebracht voor de defecten de vorige werkende module niet verbreekt.

Regressie speelt dus een cruciale rol bij het testen en wordt uitgevoerd gedurende de hele testlevenscyclus.

Wat zijn de voordelen van regressietesten?

1.Regressietesten zorgen ervoor dat er geen fouten worden geproduceerd als gevolg van wijziging in de code;

2.Het zorgt voor de juistheid van de functionaliteit

3. Het zorgt ervoor dat de vaste defecten niet opnieuw optreden vanwege een codewijziging

4. Het helpt om bugs in een vroeg ontwikkelingsstadium te identificeren

Wat is Selenium?

Selenium wordt veel gebruikt voor het testen van webapplicaties. Omdat het een open-source automatiseringstool is, wordt het in de volksmond gebruikt door de testgemeenschap. Selenium bestaat uit vier hoofdcomponenten die zijn ontworpen voor verschillende doeleinden en de selectie van deze componenten hangt af van de testvereiste. De vier componenten zijn:

  • Selenium IDE
  • Selenium RC
  • Selenium webstuurprogramma
  • Selenium rooster

Selenium WebDriver is een browserspecifieke driver die een interface biedt om de browserautomatiseringsscripts te schrijven en uit te voeren voor het testen van verschillende webapplicaties. Het biedt binding voor alle populaire talen zoals Java, Python, Ruby enz. Het ondersteunt alle belangrijke browsers zoals: Chrome, Firefox, Opera, D.W.Z., rand enz. Het kan worden geïntegreerd met verschillende frameworks, zoals Maven of ANT, voor het compileren van de broncode. Voor het testen en rapporteren van applicaties kan het ook worden geïntegreerd met testframeworks zoals TestNG om automatiseringstests te vergemakkelijken. Het kan worden geïntegreerd met Jenkins voor continue integratie of continue levering geautomatiseerde build en implementatie.

Laten we eens kijken hoe Selenium WebDriver effectief kan worden gebruikt om regressietests uit te voeren.

Hoe regressietesten uitvoeren met Selenium WebDriver?

Een goed automatiseringsraamwerk moet zo worden ontworpen en ontwikkeld dat het veel herbruikbare code of modules bevat die de belangrijkste kenmerken of functionaliteiten van de toepassing dekken. Er is geen dergelijke automatiseringstool die volledig is gewijd aan regressietesten. Het automatiseringsraamwerk moet zo worden geïmplementeerd dat het regressietesten effectief ondersteunt. Selenium is een automatiseringstool die kan worden gebruikt voor het testen van de webapplicaties in verschillende browsers. Bij het ontwerpen van het raamwerk met Selenium moet het meerdere methoden bevatten die kunnen worden hergebruikt en ook moet het toevoegen van nieuwe code in een deel van het raamwerk eenvoudig kunnen worden gedaan.

Hoe ontwerp je een Selenium-raamwerk voor het uitvoeren van regressietests?

Ik heb enkele benaderingen bedacht die echt nuttig zouden zijn bij het uitvoeren van regressietests met Selenium WebDriver.

 

 

1.Parameterisatie

Overweeg een scenario waarin een bedrijf een website lanceert met kernfunctionaliteiten die alleen in de Chrome-browser worden ondersteund. Zodra het is gebouwd, geïmplementeerd en getest, gaat de website live. Na enkele dagen is het bedrijf van plan om de browserondersteuning in Firefox uit te breiden. Zodra de browserondersteuning is uitgebreid, wordt de nieuwe build ingezet om te testen. Als het bestaande raamwerk niet is ontworpen om wijzigingen aan te brengen ter ondersteuning van regressietesten, zou het een tijdrovende taak zijn. Om dit aan te pakken, kunnen we parametrisering gebruiken om verschillende waarden toe te voegen en regressietests uit te voeren met minimale inspanning en minimale codewijziging in het Selenium-framework. Deze parametrering kan op twee eenvoudige manieren worden gedaan.

1. Parameterannotatie gebruiken in TestNG

2.Definiëren van de parameter en lezen uit het Eigenschappenbestand

Laten we de code implementeren met behulp van de bovenstaande twee methoden, wat erg handig zou zijn om regressie uit te voeren

Hoe parameterannotatie te gebruiken voor het uitvoeren van regressietesten?

Deze annotatie wordt gebruikt om de waarden binnen de methoden door te geven door de waarden en de naam van de parameter in het testing.xml-bestand te definiëren.

Vraagt ​​u zich af hoe dit nuttig zal zijn bij het uitvoeren van regressie met Selenium Webdriver?

Laten we de implementatie hieronder bekijken.

Zoals besproken in het inleidingsgedeelte, wanneer het bedrijf zijn browserondersteuning wil uitbreiden naar een andere browser, zou het gemakkelijk zijn om de waarden in het parameterveld in het testing.xml-bestand te definiëren.

pakket com.LoginPage;

java.util.concurrent.TimeUnit importeren;

importeer org.openqa.selenium.By;

importeer org.openqa.selenium.WebDriver;

importeer org.openqa.selenium.chrome.ChromeDriver;

org.openqa.selenium.firefox.FirefoxDriver importeren;

org.openqa.selenium.opera.OperaDriver importeren;

org.testng.annotaties.AfterClass importeren;

org.testng.annotaties.AfterTest importeren;

importeer org.testng.annotations.BeforeTest;

org.testng.annotaties.Parameters importeren;

org.testng.annotaties.Test importeren;

openbare klas LoginTest {

openbare WebDriver-stuurprogramma;

@VoorTest

@Parameters(“browser”)

public void setUp (String browser) {

if(browser.equalsIgnoreCase(“Firefox”)) {

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

stuurprogramma = nieuwe FirefoxDriver();

}

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

System.setProperty(“WebDriver.chrome.driver”, “C:\\Users\\shalini\\Downloads\\chromedriver\\chromedriver.exe”);

stuurprogramma = nieuwe ChromeDriver();

}

}

@Toets

openbare ongeldige aanmelding() {

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

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

String pageTitle = driver.getTitle();

System.out.println(“De titel van deze pagina is ===> ” +pageTitle);

driver.findElement(By.id(“txtGebruikersnaam”)).clear();

driver.findElement(By.id(“txtGebruikersnaam”)).sendKeys(“Beheerder”);

driver.findElement(By.id(“txtPassword”)).clear();

driver.findElement(By.id(“txtPassword”)).sendKeys(“admin123”);

driver.findElement(By.id(“btnLogin”)).klik();

}

@AfterTest

openbare leegte tearDown() {

bestuurder.stop();

}

}

TestNG.xml-bestand

In de bovenstaande code, wanneer de applicatie alleen Firefox- en Chrome-browsers ondersteunt, hebben we de tests met deze twee browsers geparametriseerd met behulp van parameternaam en waarde in het bestand testNG.xml . Nu is de applicatie succesvol getest en wordt de code in productie genomen.

Wat als het bedrijf in de volgende release van plan is om de browserondersteuning in Opera uit te breiden?

Het antwoord is vrij eenvoudig. Voeg gewoon een andere browserwaarde toe in de parametertag in de TestNG.xml zoals hieronder.

Na het wijzigen van het bestand Testng.xml breidt u de functie uit in de hoofdcode zoals hieronder:

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

stuurprogramma = nieuwe OperaDriver();

}

Hierdoor kan de nieuwe build worden getest met kleine wijzigingen in de reeds bestaande implementatie en kunt u ook regressietests uitvoeren voor de vorige release. Ik heb alleen inlogfunctionaliteit in de applicatie gebruikt voor demo-doeleinden. Als we meerdere modules hebben om te testen, is deze aanpak heel eenvoudig om regressietesten uit te voeren. Niet alleen browsertypes, u kunt ook andere parameters definiëren in de parametersectie om de regressie uit te voeren volgens uw vereisten.

Hoe de parameters in het eigenschappenbestand definiëren voor het uitvoeren van regressietesten?

Het eigenschappenbestand is een van de belangrijkste functies in een automatiseringskader dat helpt bij het effectief uitvoeren van regressietests.

We kunnen verschillende sleutels en waarden definiëren in het eigenschappenbestand die vervolgens kunnen worden gebruikt in het hoofdautomatiseringsscript. Alle modules van de webapplicatie kunnen met elkaar worden geïntegreerd en de sleutels en waarden voor verschillende modules kunnen worden gedefinieerd. Wanneer een wijziging wordt aangebracht in een release, kan het eigenschappenbestand worden aangepast om de wijzigingen op te vangen. Deze aanpak is zeer eenvoudig, gemakkelijk te implementeren en te organiseren.

Hieronder staat een eenvoudige code om de eigenschappen in een eigenschappenbestand te definiëren en de vereiste eigenschap in de hoofdcode te lezen.

pakket Pagina's;

importeren java.io.FileInputStream;

importeren java.io.FileNotFoundException;

importeren java.io.IOException;

importeren java.util.Eigenschappen;

importeren org.openqa.selenium.Door;

importeren org.openqa.selenium.WebDriver;

importeren org.openqa.selenium.chrome.ChromeDriver;

importeren org.testng.annotaties.AfterTest;

importeren org.testng.annotaties.BeforeTest;

importeren org.testng.annotaties.Test;

publiek klasse Demo {

WebDriver-stuurprogramma;

@VoorTest

publiek komen te vervallen opstelling() {

Systeem.setEigendom("webdriver.chrome.driver", "C:\\Users\\Shalini\\Downloads\\chrom86_driver\\chromedriver.exe");

bestuurder = nieuwe Chrome-stuurprogramma();

}

@Toets

publiek komen te vervallen Log in() worpen IOUitzondering {

Eigenschappen prop = nieuwe Eigenschappen();

FileInputStream-invoer = nieuwe FileInputStream(“D:\\eclipse-workspace\\SeleniumRegression\\src\\Properties\\webpage.properties”);

prop.load (invoer);

//lees de waarde van de login-URL uit het eigenschappenbestand

String login_url =prop.getProperty(“loginURL”);

stuurprogramma.get(login_url);

// lees de waarde van gebruikersnaam uit het eigenschappenbestand

String gebruikersnaam = prop.getProperty(“gebruikersnaam”);

// lees de waarde van het wachtwoord uit het eigenschappenbestand

String wachtwoord = prop.getProperty(“wachtwoord”);

driver.findElement(Door.id(“txtGebruikersnaam”)).sendKeys(gebruikersnaam);

driver.findElement(Door.id("txtPassword")).sendKeys(wachtwoord);

Systeem.uit.println(stuurprogramma.getTitle());

}

@AfterTest

publiek komen te vervallen scheuren() {

bestuurder.stop();

}

}

Webpagina.eigenschappen

########Deze eigenschap bevat de URL van de webtoepassing##############

loginURL = https://opensource-demo.orangehrmlive.com/

username = beheerder

wachtwoord = admin123

TestNG.xml

<?xml versie="1.0" codering="UTF-8"?>

<suitenaam="Test pak">

<testnaam="Inlogtest">

<klassenaam="Pagina's.Demo">

2. Regressietests uitvoeren met groepen

Het gebruik van groepen om de regressietests uit te voeren is een van de meest gebruikte benaderingen. TestNG biedt een functie genaamd "groepen" waarmee de testers de tests in bepaalde groepen kunnen bundelen met een unieke naam en daarna alleen een specifieke groep of groepen samen kunnen uitvoeren. Met deze functie kan men een groep maken voor de regressietests en deze indien nodig uitvoeren.

Hieronder vindt u een eenvoudige code met verschillende tests voor het testen van een webtoepassing die tests bevat die zijn gegroepeerd onder de groep "RegressionTest" om de tests voor regressietesten specifiek uit te voeren.

pakket Pagina's;

importeren statisch org.testng.Bevestigen.assertIs gelijk aan;

importeren java.util.concurrent.TimeUnit;

importeren org.openqa.selenium.Door;

importeren org.openqa.selenium.WebDriver;

importeren org.openqa.selenium.chrome.ChromeDriver;

importeren org.testng.annotaties.AfterTest;

importeren org.testng.annotaties.BeforeTest;

importeren org.testng.annotaties.Test;

publiek klasse Login pagina {

WebDriver-stuurprogramma;

@VoorTest

publiek komen te vervallen opstelling() {

Systeem.setEigendom("webdriver.chrome.driver", "C:\\Users\\Shalini\\Downloads\\chrom86_driver\\chromedriver.exe");

bestuurder = nieuwe Chrome-stuurprogramma();

}

@Test(groepen =”RegressieTest”)

publiek komen te vervallen Log in() {

String login_url = "https://opensource-demo.orangehrmlive.com/";

stuurprogramma.get(login_url);

bestuurder.manage().window().maximaliseren();

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

driver.findElement(Door.id(“txtGebruikersnaam”)).sendKeys(“Beheerder”);

driver.findElement(Door.id(“txtWachtwoord”)).sendKeys(“admin123”);

Systeem.uit.println(stuurprogramma.getTitle());

}

@Toets

publiek komen te vervallen dashboard() {

driver.findElement(Door.id("menu_dashboard_index")).klik();

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

String textToBePresent = "Dashboard";

assertIs gelijk aan(textPresent, tekstToBePresent);

}

@Toets

publiek komen te vervallen proef3() {

Systeem.uit.println(“Dit is test 3”);

}

@Test(groepen = "RegressieTest")

publiek komen te vervallen proef4() {

Systeem.uit.println(“Dit is test 4”);

}

@Toets

publiek komen te vervallen proef5() {

Systeem.uit.println(“Dit is test 5”);

}

@Test(groepen = "RegressieTest")

publiek komen te vervallen proef6() {

Systeem.uit.println(“Dit is test 6”);

}

@Toets

publiek komen te vervallen proef7() {

Systeem.uit.println(“Dit is test 7”);

}

@AfterTest

publiek komen te vervallen scheuren() {

bestuurder.stop();

}

}

<?xml versie="1.0" codering="UTF-8"?>

<suitenaam="Test pak">

<testnaam="Inlogtest">

<include naam=“RegressieTest”/>

<klassenaam="Pagina's.Inlogpagina">

Door deze aanpak in ons raamwerk te implementeren, kunnen we de tests ook op verschillende manieren groeperen, zoals groep voor het uitvoeren van rooktests, groep voor het uitvoeren van gezondheidstests enz. In het TestNG.xml-bestand moeten we de naam van de groep vermelden (RegressionTest in ons geval ) om de tests uit te voeren die specifiek zijn voor die groep.

3.Gebruik van tags voor het uitvoeren van regressietests

Het Cucumber-raamwerk biedt een speciale functie om tests te groeperen op basis van bepaalde criteria en deze uit te voeren wanneer dat nodig is. Deze unieke functie genaamd "tags" wordt gedefinieerd in het TestRunner-bestand van het Cucumber-framework. Alle tests die met een specifieke tag zijn gedefinieerd, kunnen worden uitgevoerd op een moment dat de gemakkelijkste en meest directe benadering wordt om regressietests uit te voeren voor de testgevallen in de webtoepassing met behulp van Selenium Webdriver.

Feature-bestand

Kenmerken: Om de inlogfunctionaliteit van de webtoepassing te testen

@RegressieTest

Scenario: Controleer of de gebruiker succesvol kan inloggen op zijn account

Gegeven De gebruiker navigeert naar de webpagina

. De gebruiker voert "beheerder” en “admin123”

Dan De gebruiker moet succesvol zijn ingelogd

Scenario: Controleer of de gebruiker producten in de winkelwagen kan toevoegen

Gegeven De gebruiker wordt doorverwezen naar de homepage

. De gebruiker selecteert en voegt product toe

Dan Het geselecteerde product moet in de winkelwagen gevonden worden

@RegressieTest

Scenario: Controleer of de gebruiker zijn gegevens kan bijwerken in Mijn account

Gegeven De gebruiker klikt op de knop Mijn account

. De gebruiker werkt zijn adresgegevens bij

Dan De nieuwe details moeten worden opgeslagen en bijgewerkt op de gebruikersinformatiepagina

TestRunner-bestand

pakket test;

importeren org.junit.runner.RunWith;

importeren komkommer.api.CucumberOptions;

importeren komkommer.api.junit.Komkommer;

@RunWith(Komkommer.klasse)

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

lijm = "Stappen",

plug-in = {“mooi”, “html:doel/komkommer”},

monochroom = waar,

tags = {“RegressieTest”}

)

publiek klasse TestRunner {

}

Volgens de bovenstaande code zouden de testgevallen die zijn gegroepeerd onder "RegressionTest" worden uitgevoerd. Het gebruik van tags om regressietesten uit te voeren is dus een van de efficiënte benaderingen die kunnen worden geïmplementeerd in een Selenium-automatiseringsraamwerk.

Afsluiten…!

Een automatiseringskader moet altijd zo worden ontworpen dat elke wijziging in het kader gemakkelijk kan worden aangebracht. Door regressietesten in gedachten te houden tijdens het ontwerpen van een raamwerk, zal het grootste deel van het herwerk worden weggevaagd. Tot nu toe heb ik u enkele benaderingen laten zien om regressietesten uit te voeren tijdens het testen van de webtoepassing met Selenium webstuurprogramma. Laat ons de andere effectieve benaderingen weten die u hebt gehanteerd tijdens het uitvoeren van regressietests met Selenium Webdriver in het commentaargedeelte hieronder. Deel dit artikel alstublieft met uw collega's en vrienden en deel uw kennis. Veel plezier met testen ...!