Dataprovider och TestNG XML: Parametrisering i Selenium (exempel)

jun 9, 2021
admin

När vi skapar mjukvara önskar vi alltid att den ska fungera annorlunda med en annan uppsättning data. När vi ska testa samma mjukvara kan vi inte vara orättvisa om vi testar den med bara en uppsättning data. Även här måste vi kontrollera att vårt system tar alla kombinationer som förväntas stödja. För detta behöver vi parametrisera våra test scipts. Här kommer parametrisering in i bilden.

Parameterisering i Selenium

Parameterisering i Selenium är en process för att parametrisera testskripten för att överföra flera data till applikationen vid körning. Det är en exekveringsstrategi som automatiskt kör testfall flera gånger med olika värden. Konceptet som uppnås genom att parametrisera testskriptet kallas datadriven testning.

I den här handledningen lär du dig-

  • Typ av parametrisering i TestNG-
  • Parameters annotation med Testng.xml
  • Felsökning
  • Parametrar med hjälp av Dataprovider
  • Invoka DataProvider från olika klasser
  • Typer av parametrar i Dataprovider

Typ av parametrering i TestNG-

För att göra parametrering mer tydlig, kommer vi att gå igenom parameteriseringsalternativen i ett av de mest populära ramverken för Selenium Webdriver – TestNG.

Det finns två sätt som vi kan uppnå parametrisering i TestNG

  1. Med hjälp av Parameters-annotationen och TestNG XML-filen.

  2. Med hjälp av DataProvider-annotationen.

Parametrar från Testng.xml kan vara på svit- eller testnivå

Parameter från DataProvider kan ta Method och ITestContext som parameter.

Låt oss studera dem i detalj –

Parameters Annotation in TestNG

Parameters Annotation in TestNG är en metod som används för att skicka värden till testmetoderna som argument med hjälp av .xml-fil. Användarna kan behöva skicka värdena till testmetoderna under körning. Annotationsmetoden @Parameters kan användas i alla metoder som har annotationen @Test, @Before, @After eller @Factory.

Parametrar-annotation med Testng.xml

Välj parameterisering med hjälp av annotationer när du vill hantera komplexitet & antalet inmatningskombinationer är mindre.

Låt oss se hur detta fungerar

Testscenario

Steg 1) Starta webbläsaren & gå till Google.com

Steg 2) Ange ett sökord

Steg 3) Kontrollera att det inmatade värdet är detsamma som i våra testdata

Steg 4) Upprepa 2 & 3 tills alla värden har matats in

Testförfattare Söknyckel
Guru99 Indien
Krishna USA
Bhupesh Kina

Här är ett exempel på hur man gör utan parametrar

En studie, exemplet ovan. Föreställ dig hur komplex koden blir när vi gör detta för 3 inmatningskombinationer

Nu ska vi parametrisera detta med hjälp av TestNG

För att göra detta, måste du

  • Skapa en XML-fil som kommer att lagra parametrarna
  • I testet lägger du till annotationen @Parameters

Här är den fullständiga koden

Testnivå TestNG.xml

ParameterWithTestNGXML.java File

Instruktioner för att köra skriptet, välj XML-filen och kör som Test NG Suite

Högerklicka på .xml-filen -> Kör som -> Testng Suite (Obs : Suite)

Nu kan parametrar definieras på två nivåer

  1. Suite-nivå – Parametrarna inuti <suite>-taggen i TestNG XML-filen kommer att vara en parameter på suite-nivå.
  2. Testnivå – Parametrarna inuti taggen <Test> i XML-filen för testning kommer att vara en testnivåparameter.

Här är samma test med parametrar på svitnivå

OBS: I det fall att parameternamnet är detsamma i svitnivå och testnivå så kommer testnivåparametern att få företräde framför svitnivå. I det fallet kommer alla klasser inom testnivån att dela den överordnade parametern och andra klasser som ligger utanför testnivån kommer att dela parametern på svitnivå.

Felsökning

Problem nr 1 Parametervärdet i testng.xml kan inte skrivas över till motsvarande testmetods parameter, vilket leder till ett fel.

Konsultera följande exempel

Här är attributet ”author” lika med ”Guru99” som är en sträng och i motsvarande testmetod förväntas ett heltalsvärde, så vi får ett undantag här.

Problem nr 2 Dina @Parameters har inget motsvarande värde i testing.xml.

Du kan lösa den här situationen genom att lägga till @optional-annotationen i motsvarande parameter i testmetoden.

Uppgift nr 3: Du vill testa flera värden för samma parameter med hjälp av Testng.xml

Det enkla svaret är att detta inte går att göra! Du kan ha flera olika parametrar, men varje parameter kan bara ha ett enda värde. Detta hjälper till att förhindra hårdkodning av värden i skriptet. Detta gör att koden kan återanvändas. Tänk på det som konfigurationsfiler för ditt skript. Om du vill använda flera värden för en parameter använder du DataProviders

Data Provider i TestNG

Data Provider i TestNG är en metod som används när en användare behöver skicka komplexa parametrar. Komplexa parametrar måste skapas från Java, t.ex. komplexa objekt, objekt från egenskapsfiler eller från en databas kan överföras av data provider-metoden. Metoden är annoterad med @DataProvider och returnerar en array av objekt.

Parametrar med hjälp av Dataprovider

@Parameters-annotationen är enkel men för att testa med flera uppsättningar data måste vi använda Data Provider.

För att fylla tusentals webbformulär med hjälp av vårt testramverk behöver vi en annan metod som kan ge oss en mycket stor datamängd i ett enda exekveringsflöde.

Detta datadrivna koncept uppnås genom @DataProvider-annotationen i TestNG.

Den har endast ett attribut ”name”. Om du inte anger attributet name kommer DataProviders namn att vara detsamma som motsvarande metodnamn.

DataProvider returnerar ett tvådimensionellt JAVA-objekt till testmetoden och testmetoden kommer att åberopa M gånger i en M*N-typ av objektarray. Om DataProvider t.ex. returnerar en array med 2*3 objekt, kommer motsvarande testfall att anropas 2 gånger med 3 parametrar varje gång.

Komplett exempel

Invoka DataProvider från en annan klass

DataProvider finns som standard i samma klass som testmetoden eller dess basklass. För att placera den i en annan klass måste vi göra data provider-metoden statisk och i testmetoden måste vi lägga till ett attribut dataProviderClass i @Test-annotationen.

Kodexempel

TestClass ParameterDataproviderWithClassLevel.java

DataproviderClass.java

Typer av parametrar i Dataprovider

Det finns två typer av parametrar som stöds av DataProvider-metoden.

Metod – Om SAMMA DataProvider ska uppträda på olika sätt med olika testmetoder används parametern Method.

I följande exempel

  • kontrollerar vi om metodnamnet är testMethodA.
  • Om ja returnerar vi en uppsättning värden
  • I annat fall returnerar vi en annan uppsättning värden

Här är resultatet

ITestContext- Det kan användas för att skapa olika parametrar för testfall baserat på grupper.

I verkligheten kan du använda ITestContext för att variera parametervärden baserat på testmetoder, värdar och konfigurationer av testet.

I följande kodexempel

  • Vi har 2 grupper A & B
  • Varje testmetod tilldelas en grupp
  • Om värdet av gruppen är A returneras en viss datamängd
  • Om värdet av gruppen är B returneras en annan datamängd

Note: Om du kör din testng-klass direkt kommer den först att anropa dataprovider som inte kan hämta information om grupper eftersom grupper inte är tillgängliga. Men om du istället anropar den här klassen via testng.xml kommer den att ha gruppinformation tillgänglig med ITestContext. Använd följande XML för att anropa testet

Summary:

  • Parametrisering krävs för att skapa datadriven testning.
  • TestNG stöder två typer av parametrisering, med hjälp av @Parameter+TestNG.xml och med hjälp av@DataProvider
  • I @Parameter+TestNG.xml kan parametrar placeras på svitnivå och testnivå. Om

    Samma parameternamn deklareras på båda ställena får testnivåparametern företräde framför parametern på svitnivå.

  • Med hjälp av @Parameter+TestNG.xml kan endast ett värde sättas åt gången, men @DataProvider returnerar en 2d array av Object.
  • Om DataProvider finns i en annan klass än den klass där testmetoden finns, bör DataProvider vara en statisk metod.
  • Det finns två parametrar som stöds av DataProvider, Method och ITestContext.

Lämna ett svar

Din e-postadress kommer inte publiceras.