Dataprovider och TestNG XML: Parametrisering i Selenium (exempel)
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
-
Med hjälp av Parameters-annotationen och TestNG XML-filen.
-
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
- Suite-nivå – Parametrarna inuti <suite>-taggen i TestNG XML-filen kommer att vara en parameter på suite-nivå.
- 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.