Dataprovider & TestNG XML: Parameterization in Selenium(Voorbeeld)

jun 9, 2021
admin

Als we software maken, wensen we altijd dat het anders zou werken met een andere set gegevens. Wanneer het erom gaat hetzelfde stuk software te testen, kunnen we niet oneerlijk zijn als we het met slechts één set gegevens testen. Ook hier moeten wij verifiëren dat ons systeem alle combinaties aan kan die het naar verwachting zal ondersteunen. Daarvoor moeten we onze test scipts parametriseren. Hier komt de parametrisering in beeld.

Parameterization in Selenium

Parameterization in Selenium is een proces om de test scripts te parametriseren om meerdere gegevens door te geven aan de applicatie tijdens runtime. Het is een strategie van uitvoering die automatisch testgevallen meerdere malen met verschillende waarden uitvoert. Het concept bereikt door het parametriseren van de testscripts wordt Data Driven Testing genoemd.

In deze tutorial leert u-

  • Type van Parameterization in TestNG-
  • Parameters annotatie met Testng.xml
  • Troubleshooting
  • Parameters met behulp van Dataprovider
  • Invoke DataProvider from different class
  • Types van Parameters in Dataprovider

Type van Parameterization in TestNG-

Om parameterization duidelijker te maken, zullen we door de parameterisatie opties gaan in een van de meest populaire framework voor Selenium Webdriver – TestNG.

Er zijn twee manieren waarop we parameterisatie in TestNG kunnen bereiken

  1. Met behulp van Parameters annotatie en TestNG XML-bestand.

  2. Met behulp van DataProvider annotatie.

Parameters uit Testng.xml kunnen op suite- of testniveau zijn

Parameter uit DataProvider kan Methode en ITestContext als parameter nemen.

Laten we ze in detail bestuderen –

Parameters Annotatie in TestNG

Parameters Annotatie in TestNG is een methode die wordt gebruikt om waarden door te geven aan de testmethoden als argumenten met behulp van .xml-bestand. Gebruikers kunnen worden verplicht om de waarden door te geven aan de testmethoden tijdens runtime. De @Parameters annotatie methode kan worden gebruikt in elke methode met @Test, @Before, @After of @Factory annotatie.

Parameters annotatie met Testng.xml

Selecteer parametrisatie met behulp van annotaties wanneer u wilt omgaan met complexiteit & het aantal invoercombinaties minder is.

Laten we eens zien hoe dit werkt

Testscenario

Stap 1) Start browser & ga naar Google.com

Stap 2) Voer een zoekwoord in

Stap 3) Controleer of de ingevoerde waarde dezelfde is als die van onze testgegevens

Stap 4) Herhaal 2 & 3 totdat alle waarden zijn ingevoerd

Test Auteur Zoeksleutel
Guru99 India
Krishna VS
Bhupesh China

Hier is een voorbeeld van hoe het moet ZONDER parameters

het bovenstaande voorbeeld. Stel je eens voor hoe complex de code wordt als we dit voor 3 invoercombinaties doen

Nu, laten we dit parametriseren met behulp van TestNG

Om dit te doen, moet u

  • een XML-bestand maken waarin de parameters worden opgeslagen
  • In de test annotatie @Parameters

Hier volgt de volledige code

Test Level TestNG.xml

ParameterWithTestNGXML.java bestand

Instructies om het script uit te voeren, selecteer het XML-bestand en voer het uit als Test NG Suite

Klik met de rechtermuisknop op het .xml bestand -> Uitvoeren als -> Testng Suite (Opmerking : Suite)

Nu kunnen parameters op 2 niveaus worden gedefinieerd

  1. Suite niveau – De parameters binnen de <suite> tag van TestNG XML bestand zullen een suite niveau parameter zijn.
  2. Testniveau — De parameters in de <Test> tag van het XML-bestand TestNG zijn een parameter op testniveau.

Hier is dezelfde test met parameters op suite niveau

NOTE: Als de parameternaam hetzelfde is in suite niveau en testniveau, dan krijgt de parameter op testniveau voorrang op het niveau van de suite. Dus, in dat geval, alle klassen binnen dat test niveau zal delen de overridden parameter, en andere klassen die buiten het test niveau zal delen suite niveau parameter.

Problemen oplossen

Issue # 1 Parameter waarde in testng.xml kan niet worden getypecast naar de parameter van de overeenkomstige test methode het zal een fout werpen.

Zie het volgende voorbeeld

Hier is het attribuut ‘author’ gelijk aan ‘Guru99’, wat een string is en in de corresponderende testmethode wordt een integer waarde verwacht, dus krijgen we hier een exception.

Issue # 2 Uw @Parameters hebben geen overeenkomstige waarde in testing.xml.

U kunt deze situatie oplossen door de @optional annotatie toe te voegen aan de overeenkomstige parameter in de testmethode.

Issue # 3: U wilt meerdere waarden van dezelfde parameter testen met Testng.xml

Het eenvoudige antwoord is dat dit niet kan! U kunt meerdere verschillende parameters hebben, maar elke parameter kan slechts een enkele waarde hebben. Dit helpt hardcoding waarden in het script te voorkomen. Dit maakt code herbruikbaar. Zie het als config bestanden voor je script. Als u meerdere waarden voor een parameter wilt gebruiken, gebruik dan DataProviders

Data Provider in TestNG

Data Provider in TestNG is een methode die wordt gebruikt wanneer een gebruiker complexe parameters moet doorgeven. Complexe Parameters moeten worden gemaakt vanuit Java, zoals complexe objecten, objecten uit property-bestanden of uit een database kunnen worden doorgegeven door de data provider methode. De methode is geannoteerd met @DataProvider en retourneert een array van objecten.

Parameters met behulp van Dataprovider

@Parameters annotatie is eenvoudig, maar om te testen met meerdere sets van gegevens moeten we gebruik maken van Data Provider.

Om duizenden webformulieren te vullen met behulp van ons testframework hebben we een andere methodologie nodig die ons een zeer grote dataset in een enkele uitvoeringsstroom kan geven.

Dit datagedreven concept wordt bereikt door @DataProvider annotatie in TestNG.

Het heeft slechts één attribuut ‘naam’. Als u het naam-attribuut niet opgeeft, is de naam van de DataProvider gelijk aan de naam van de bijbehorende methode.

Data provider retourneert een twee-dimensionaal JAVA object aan de test methode en de test methode, zal M keer aanroepen in een M*N type object array. Als de DataProvider bijvoorbeeld een array van 2*3 objecten retourneert, wordt de overeenkomstige testcase 2 keer aangeroepen met telkens 3 parameters.

Volledig voorbeeld

DataProvider aanroepen vanuit andere klasse

De standaardinstelling is dat DataProvider zich in dezelfde klasse bevindt als waar de testmethode zich bevindt, of in de basisklasse. Om deze in een andere klasse onder te brengen, moet de methode van de gegevensverstrekker statisch worden gemaakt en moet in de testmethode een attribuut dataProviderClass in de @Test-annotatie worden toegevoegd.

Code Voorbeeld

TestClass ParameterDataproviderWithClassLevel.java

DataproviderClass.java

Typen parameters in Dataprovider

Er zijn twee soorten parameters die door de methode DataProvider worden ondersteund.

Methode- Als dezelfde DataProvider zich met verschillende testmethoden anders moet gedragen, gebruikt u de parameter Methode.

In het volgende voorbeeld

  • Wij controleren of de naam van de methode testMethodA is.
  • Indien ja, retourneer een set waarden
  • Else retourneer een andere set waarden

Hier is de uitvoer

ITestContext- Deze kan worden gebruikt om verschillende parameters voor testgevallen te maken op basis van groepen.

In het echte leven kunt u ITestContext gebruiken om parameterwaarden te variëren op basis van testmethoden, hosts, configuraties van de test.

In het volgende codevoorbeeld

  • We hebben 2 groepen A & B
  • Elke testmethode wordt toegewezen aan een groep
  • Als de waarde van groep A is, wordt een bepaalde gegevensset teruggegeven
  • Als de waarde van groep B is, wordt een andere gegevensset teruggegeven

Note: Als u uw testng klasse direct uitvoert, zal het eerst dataprovider aanroepen die geen informatie over groepen kan krijgen omdat groepen niet beschikbaar zijn. Maar als je in plaats daarvan deze klasse oproept via testng.xml, zal het de groepen info beschikbaar hebben met ITestContext. Gebruik de volgende XML om de test op te roepen

Summary:

  • Parameterization is nodig om Data Driven Testing.
  • TestNG ondersteunen twee soorten van parameterization, met behulp van @Parameter+TestNG.xml en met behulp van@DataProvider
  • In @Parameter+TestNG.xml parameters kunnen worden geplaatst in suite-niveau en test-niveau. Als

    dezelfde parameternaam op beide plaatsen wordt gedeclareerd, krijgt de parameter op testniveau voorrang boven de parameter op suiteniveau.

  • met behulp van @Parameter+TestNG.xml kan slechts één waarde tegelijk worden ingesteld, maar @DataProvider retourneert een 2d array van Object.
  • Als DataProvider in een andere klasse aanwezig is dan de klasse waarin de testmethode zich bevindt, moet DataProvider een statische methode zijn.
  • Er zijn twee parameters die door DataProvider worden ondersteund: Methode en ITestContext.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.