Dataprovider og TestNG XML: Parameterisering i Selenium(Eksempel)

jun 9, 2021
admin

Når vi skaber software, ønsker vi altid, at det skal fungere anderledes med et andet sæt data. Når vi skal teste det samme stykke software, kan vi ikke være uretfærdige, hvis vi tester det med kun ét sæt data. Her skal vi igen verificere, at vores system tager alle sæt kombinationer, som forventes at understøtte. Til det formål er vi nødt til at parametrisere vores test scipts. Her kommer parameterisering ind i billedet.

Parameterisering i Selenium

Parameterisering i Selenium er en proces til at parametrisere testskripterne for at videregive flere data til applikationen på køretid. Det er en eksekveringsstrategi, som automatisk kører testcases flere gange ved hjælp af forskellige værdier. Det koncept, der opnås ved at parametrisere testskripterne, kaldes datadrevet testning.

I denne tutorial lærer du-

  • Type af parametrisering i TestNG-
  • Parameters annotation med Testng.xml
  • Forsøgning af problemer
  • Parametre ved hjælp af Dataprovider
  • Invoke DataProvider fra en anden klasse
  • Typer af parametre i Dataprovider

Type af parameterisering i TestNG-

For at gøre parameterisering mere tydelig, vil vi gennemgå parameteriseringsmulighederne i en af de mest populære rammer for Selenium Webdriver – TestNG.

Der er to måder, hvorpå vi kan opnå parameterisering i TestNG

  1. Med hjælp af Parameters-annotationen og TestNG XML-filen.

  2. Med hjælp af DataProvider-annotationen.

Parametre fra Testng.xml kan være på suite- eller testniveau

Parameter fra DataProvider kan tage Method og ITestContext som parameter.

Lad os studere dem i detaljer –

Parameters Annotation i TestNG

Parameters Annotation i TestNG er en metode, der bruges til at videregive værdier til testmetoderne som argumenter ved hjælp af .xml-fil. Brugerne kan være forpligtet til at videregive værdierne til testmetoderne under kørselstiden. Annotationsmetoden @Parameters kan bruges i enhver metode med annotationen @Test, @Before, @After eller @Factory.

Parameters annotation med Testng.xml

Vælg parameterisering ved hjælp af annotationer, når du ønsker at håndtere kompleksitet & antallet af inputkombinationer er mindre.

Lad os se, hvordan det fungerer

Testscenarie

Stræk 1) Start browser & gå til Google.com

Stræk 2) Indtast et søgeord

Stræk 3) Kontroller, at den indtastede værdi er den samme som den, der er angivet i vores testdata

Stræk 4) Gentag 2 & 3, indtil alle værdier er indtastet

Testforfatter SøgeNøgle
Guru99 Indien
Krishna USA
Bhupesh Kina

Her er et eksempel på, hvordan man gør det UDEN parametre

En undersøgelse, det ovenstående eksempel. Forestil dig, hvor kompleks koden bliver, når vi gør dette for 3 inputkombinationer

Nu skal vi parameterisere dette ved hjælp af TestNG

For at gøre det, skal du

  • Opret en XML-fil, som skal gemme parametrene
  • I testen skal du tilføje annotationen @Parameters

Her er den komplette kode

Testniveauet TestNG.xml

ParameterWithTestNGXML.java File

Instruktioner til at køre scriptet, vælg XML-filen og Kør som Test NG Suite

Højreklik på .xml-fil -> Kør som -> Testng Suite (Bemærk : Suite)

Nu kan parametre defineres på 2 niveauer

  1. Suite-niveau – Parametrene inden for <suite>-tagget i TestNG XML-filen vil være en suite-niveau-parameter.
  2. Testniveau – Parametrene inden for <Test>-tagget i test XML-filen vil være en testniveauparameter.

Her er den samme test med suite-niveauparametre

BEMÆRK: Hvis parameternavnet er det samme i suite-niveau og testniveau, vil testniveauparameteren få fortrinsret frem for suite-niveau. Så i det tilfælde vil alle klasser inden for det pågældende testniveau dele den overskredne parameter, og andre klasser, der er uden for testniveauet, vil dele suite-niveau-parameteren.

Fejlfinding

Problem nr. 1 Parameterværdi i testng.xml kan ikke typecastes til den tilsvarende testmetodeparameter, det vil give en fejl.

Tænk på følgende eksempel

Her er attributten ‘author’ lig med ‘Guru99’, som er en streng, og i den tilsvarende testmetode forventer den en heltalsværdi, så vi vil få en undtagelse her.

Spørgsmål nr. 2 Dine @Parameters har ikke en tilsvarende værdi i testing.xml.

Du kan løse denne situation ved at tilføje @optional-annotationen i den tilsvarende parameter i testmetoden.

Sag nr. 3: Du ønsker at teste flere værdier af den samme parameter ved hjælp af Testng.xml

Det enkle svar er, at dette ikke kan lade sig gøre! Du kan have flere forskellige parametre, men hver parameter kan kun have en enkelt værdi. Dette er med til at forhindre hardcoding af værdier i scriptet. Dette gør kode genanvendelig. Tænk på det som konfigurationsfiler til dit script. Hvis du vil bruge flere værdier for en parameter, skal du bruge DataProviders

Data Provider i TestNG

Data Provider i TestNG er en metode, der bruges, når en bruger skal videregive komplekse parametre. Komplekse parametre skal oprettes fra Java, f.eks. komplekse objekter, objekter fra egenskabsfiler eller fra en database kan videregives af data provider-metoden. Metoden er annoteret med @DataProvider, og den returnerer et array af objekter.

Parametre ved hjælp af Dataprovider

@Parameters-annotationen er let, men for at teste med flere datasæt skal vi bruge Data Provider.

For at udfylde tusindvis af webformularer ved hjælp af vores testramme har vi brug for en anden metode, som kan give os et meget stort datasæt i et enkelt udførelsesflow.

Dette datadrevne koncept opnås ved hjælp af @DataProvider-annotationen i TestNG.

Den har kun én attribut “name”. Hvis du ikke angiver attributten name, vil DataProvider’s navn være det samme som det tilsvarende metode-navn.

DataProvider returnerer et todimensionalt JAVA-objekt til testmetoden, og testmetoden vil blive påberåbt M gange i et objektarray af M*N-typen. Hvis DataProvider f.eks. returnerer et array af 2*3 objekter, vil den tilsvarende testcase blive påberåbt 2 gange med 3 parametre hver gang.

Komplet eksempel

Invoke DataProvider fra en anden klasse

Som standard befinder DataProvider sig i den samme klasse, hvor testmetoden er, eller i dens basisklasse. Hvis vi vil placere den i en anden klasse, skal vi gøre dataProvider-metoden statisk, og i testmetoden skal vi tilføje en attribut dataProviderClass i @Test-annotationen.

Kodeeksempel

TestClass ParameterDataproviderWithClassLevel.java

DataproviderClass.java

Typer af parametre i Dataprovider

Der er to typer af parametre, der understøttes af DataProvider-metoden.

Metode- Hvis den SAMME DataProvider skal opføre sig forskelligt med forskellige testmetoder, skal du bruge parameteren Method.

I følgende eksempel ,

  • Vi kontrollerer, om metode-navnet er testMethodA.
  • Hvis ja returnerer et sæt værdier
  • Else returnerer et andet sæt værdier

Her er outputtet

ITestContext- Det kan bruges til at oprette forskellige parametre for testcases baseret på grupper.

I det virkelige liv kan du bruge ITestContext til at variere parameterværdier baseret på testmetoder, værter, konfigurationer af testen.

I følgende kodeeksempel

  • Vi har 2 grupper A & B
  • Hver testmetode er tildelt en gruppe
  • Hvis værdien af gruppen er A, returneres et bestemt datasæt
  • Hvis værdien af gruppen er B, returneres et andet datasæt

Bemærk: Hvis du kører din testng-klasse direkte, vil den først kalde dataprovider, som ikke kan få oplysninger om grupper, da grupper ikke er tilgængelige. Men hvis du i stedet kalder denne klasse via testng.xml, vil den have gruppeoplysninger tilgængelige med ITestContext. Brug følgende XML til at kalde testen

Summary:

  • Parametrisering er nødvendig for at skabe datadrevet testning.
  • TestNG understøtter to former for parametrisering, ved hjælp af @Parameter+TestNG.xml og ved hjælp af@DataProvider
  • I @Parameter+TestNG.xml kan parametre placeres på suite-niveau og testniveau. Hvis

    Det samme parameternavn er deklareret begge steder, vil testniveauparameter få fortrinsret frem for suitniveauparameter.

  • Med @Parameter+TestNG.xml kan der kun indstilles én værdi ad gangen, men @DataProvider returnerer et 2d array af Object.
  • Hvis DataProvider er til stede i en anden klasse end den klasse, hvor testmetoden befinder sig, skal DataProvider være en statisk metode.
  • Der er to parametre, der understøttes af DataProvider, nemlig Method og ITestContext.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.