Ponudnik podatkov & TestNG XML: Parametriranje v selenu (primer)

Kazalo:

Anonim

Ko ustvarjamo programsko opremo, si vedno želimo, da bi z drugačnim naborom podatkov delovala drugače. Ko gre za testiranje istega dela programske opreme, ne moremo biti krivično, če ga preizkusimo z enim samim nizom podatkov. Tudi tu moramo preveriti, ali naš sistem uporablja vse kombinacije, ki naj bi jih podpiral. Za to moramo parametrirati naše testne znake. Tu prihaja Parametrizacija na sliki.

Parametriranje v selenu

Parametriranje v seleniju je postopek za parameterizacijo testnih skriptov, da se aplikaciji med izvajanjem posredujejo več podatkov. To je strategija izvajanja, ki samodejno večkrat zažene testne primere z uporabo različnih vrednosti. Koncept, dosežen s parametriranjem testnih skriptov, se imenuje testiranje na osnovi podatkov .

V tej vadnici boste izvedeli-

  • Vrsta parametrizacije v TestNG-
  • Opomba parametrov s testng.xml
  • Odpravljanje težav
  • Parametri z uporabo Dataproviderja
  • Prikličite DataProvider iz drugega razreda
  • Vrste parametrov v ponudniku podatkov

Vrsta parametrizacije v TestNG-

Da bo parametrizacija bolj jasna, bomo pregledali možnosti parametrizacije v enem najbolj priljubljenih okvirov za Selenium Webdriver - TestNG .

Na dva načina lahko dosežemo parametrizacijo v TestNG

  1. S pomočjo pripisa parametrov in datoteke XML TestNG .

  2. S pomočjo pripisa DataProvider .

Parametri iz Testng.xml so lahko paket ali preskusna raven

Parameter iz DataProvider lahko za parameter vzame Method in ITestContext.

Podrobno jih preučimo -

Opomba parametrov v TestNG

Opomba parametrov v TestNG je metoda, ki se uporablja za posredovanje vrednosti testnim metodam kot argumentov z uporabo datoteke .xml. Uporabniki bodo morda morali med izvajanjem vrednosti posredovati vrednosti testnim metodam. Metoda označevanja @Parameters se lahko uporablja v kateri koli metodi, ki ima oznake @Test, @Before, @After ali @Factory.

Opomba parametrov s testng.xml

Izberite parametrizacijo z uporabo pripisov, če se želite spoprijeti s kompleksnostjo in je število vnosnih kombinacij manjše.

Poglejmo, kako to deluje

Preskusni scenarij

Korak 1) Zaženite brskalnik in pojdite na Google.com

Korak 2) Vnesite ključno besedo za iskanje

Korak 3) Preverite, ali je vnesena vrednost enaka vrednosti, ki jo zagotavljajo naši testni podatki

Korak 4) Ponavljajte 2 in 3, dokler ne vnesete vseh vrednosti

Avtor preizkusa SearchKey
Guru99 Indija
Krišna ZDA
Bupeš Kitajska

Tu je primer, kako to narediti BREZ parametrov

parametri paketa;import org.testng.annotations.Test;import org.testng.AssertJUnit;uvoz java.util.concurrent.TimeUnit;uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.WebElement;uvoz org.openqa.selenium.firefox.FirefoxDriver;javni razred NoParameterWithTestNGXML {String driverPath = "C: \\ geckodriver.exe";Gonilnik WebDriver;@Testpublic void testNoParameter () vrže InterruptedException {Avtor niza = "guru99";String searchKey = "indija";System.setProperty ("webdriver.gecko.driver", driverPath);voznik = novi FirefoxDriver ();driver.manage (). timeouts (). implicitnoWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");WebElement searchText = driver.findElement (By.name ("q"));// Iskanje besedila v google besedilnem poljusearchText.sendKeys (searchKey);System.out.println ("Dobrodošli ->" + avtor + "Vaša iskalna tipka je ->" + searchKey);System.out.println ("Nit bo zdaj spal");Navoj.spanje (3000);System.out.println ("Vrednost v iskalnem polju Google =" + searchText.getAttribute ("vrednost") + "::: Vrednost podana z input =" + searchKey);// preverjanje vrednosti v iskalnem polju GoogleAssertJUnit.assertTrue (searchText.getAttribute ("vrednost"). EqualsIgnoreCase (searchKey));}}

Študija, zgornji primer. Samo predstavljajte si, kako zapletena bo koda postala, ko bomo to storili za 3 kombinacije vnosa

Zdaj pa to parametrirajmo s testNG

Če želite to narediti, boste morali

  • Ustvarite datoteko XML, v kateri bodo shranjeni parametri
  • V preskusu dodajte pripis @Parameters

Tu je celotna koda

Test Level TestNG.xml


Datoteka ParameterWithTestNGXML.java

parametri paketa;import org.testng.AssertJUnit;uvoz java.util.concurrent.TimeUnit;uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.WebElement;uvoz org.openqa.selenium.firefox.FirefoxDriver;uvoz org.testng.annotations.Obvezno;import org.testng.annotations.Parameters;import org.testng.annotations.Test;javni razred ParameterWithTestNGXML {String driverPath = "C: \\ geckodriver.exe";Gonilnik WebDriver;@Test@Parameters ({"author", "searchKey"})public void testParameterWithXML (@Optional ("Abc") Avtor niza, String searchKey) vrže InterruptedException {System.setProperty ("webdriver.gecko.driver", driverPath);voznik = novi FirefoxDriver ();driver.manage (). timeouts (). implicitnoWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");WebElement searchText = driver.findElement (By.name ("q"));// Iskanje besedila v google besedilnem poljusearchText.sendKeys (searchKey);System.out.println ("Dobrodošli ->" + avtor + "Vaša iskalna tipka je ->" + searchKey);System.out.println ("Nit bo zdaj spal");Navoj.spanje (3000);System.out.println ("Vrednost v iskalnem polju Google =" + searchText.getAttribute ("vrednost") + "::: Vrednost podana z input =" + searchKey);// preverjanje vrednosti v iskalnem polju GoogleAssertJUnit.assertTrue (searchText.getAttribute ("vrednost"). EqualsIgnoreCase (searchKey));}}

Navodila za zagon skripta, izberite datoteko XML in zaženi kot Test NG Suite

Z desno miškino tipko kliknite datoteko .xml -> Zaženi kot -> Testng Suite (Opomba: Suite)

Zdaj lahko parametre določimo na dveh ravneh

  1. Raven zbirke - parametri v oznaki datoteke TestNG XML bodo parameter ravni suite.
  2. Test Level - Parametri znotraj oznake preskusne datoteke XML bodo parameter Test level.

Tu je isti test s parametri na ravni suite

OPOMBA: V primeru, da je ime parametra na ravni suite in preizkusni ravni enako, bo parameter preizkusne ravni imel prednost pred ravnijo suite. Torej bodo v tem primeru vsi razredi znotraj te preizkusne ravni delili nadomeščeni parameter, drugi razredi, ki so izven preizkusne ravni, pa bodo imeli skupni parameter.

Odpravljanje težav

Vprašanje št. 1 Vrednosti parametra v testng.xml ni mogoče pretvoriti v tip ustreznega parametra preskusne metode, kar bo povzročilo napako.

Razmislite o naslednjem primeru

Tu je atribut 'author' enak 'Guru99', ki je niz in v ustrezni preskusni metodi pričakuje celoštevilčno vrednost, zato bomo tu dobili izjemo.

2. številka Vaši @Parametri nimajo ustrezne vrednosti v test.xml.

To situacijo lahko rešite tako, da v ustrezni parameter v testni metodi dodate oznako @optional .

3. vprašanje: Želite preizkusiti več vrednosti istega parametra z uporabo Testng.xml

Preprost odgovor je, da tega ni mogoče storiti! Lahko imate več različnih parametrov, vendar ima lahko vsak parameter samo eno vrednost. To pomaga preprečiti trdo kodiranje vrednosti v skriptu. Zaradi tega je koda večkrat uporabna. Mislite na to kot na konfiguracijske datoteke za vaš skript. Če želite za parameter uporabiti več vrednosti, uporabite DataProviders

Ponudnik podatkov v TestNG

Ponudnik podatkov v TestNG je metoda, ki se uporablja, ko mora uporabnik prenesti kompleksne parametre. Zapletene parametre je treba ustvariti iz Jave, na primer zapletene predmete, predmete iz datotek lastnosti ali iz baze podatkov, ki jih lahko posreduje metoda ponudnika podatkov. Metoda je označena z @DataProvider in vrne vrsto predmetov.

Parametri z uporabo Dataproviderja

Opomba @Parameters je enostavna, a za preskušanje z več nabori podatkov moramo uporabiti ponudnika podatkov.

Za izpolnjevanje tisočih spletnih obrazcev z uporabo našega testnega okvira potrebujemo drugačno metodologijo, ki nam lahko da zelo velik nabor podatkov v enem samem izvedbenem toku.

Ta koncept, ki temelji na podatkih, je dosežen s pripisom @DataProvider v TestNG.

Ima samo en atribut 'ime' . Če ne navedete atributa imena, bo ime DataProviderja enako imenu ustrezne metode.

Ponudnik podatkov preskusni metodi vrne dvodimenzionalni objekt JAVA in preskusna metoda bo M-N priklicala v vrsti predmetne matrike M * N. Če na primer DataProvider vrne matriko objektov 2 * 3, bo ustrezni testni primer vsakič poklican dvakrat s 3 parametri.

Popoln primer

parametri paketa;uvoz java.util.concurrent.TimeUnit;uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.WebElement;uvoz org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations.BeforeTest;import org.testng.annotations.DataProvider;import org.testng.annotations.Test;javni razred ParameterByDataprovider {Gonilnik WebDriver;String driverPath = "C: \\ geckodriver.exe";@BeforeTestnastavitev javne praznine () {// Ustvari objekt gonilnika firefoxSystem.setProperty ("webdriver.gecko.driver", driverPath);voznik = novi FirefoxDriver ();driver.manage (). timeouts (). implicitnoWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");}/ ** Preskusni primer za preverjanje Googlovega iskalnega polja* @param avtor* @param searchKey* @throws InterruptedException* /@Test (dataProvider = "SearchProvider")public void testMethod (avtor niza, String searchKey) vrže InterruptedException {{WebElement searchText = driver.findElement (By.name ("q"));// vrednost iskanja v iskalnem polju GooglesearchText.sendKeys (searchKey);System.out.println ("Dobrodošli ->" + avtor + "Vaša iskalna tipka je ->" + searchKey);Navoj.spanje (3000);Niz testValue = searchText.getAttribute ("vrednost");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// Preverite, ali je vrednost v iskalnem polju Google pravilnaAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}/ *** @return Object [] [], kjer prvi stolpec vsebuje 'avtorja'* in drugi stolpec vsebuje "searchKey"* /@DataProvider (name = "SearchProvider")javni objekt [] [] getDataFromDataprovider () {vrni nov objekt [] []{{"Guru99", "India"},{"Krishna", "UK"},{"Bhupesh", "ZDA"}};}}

Prikličite DataProvider iz drugega razreda

DataProvider je privzeto v istem razredu, kjer je preskusna metoda ali njen osnovni razred. Če ga želimo uvrstiti v drug razred, moramo metodo ponudnika podatkov narediti kot statično, v testni pa dodati atribut dataProviderClass v opombo @Test .

Primer kode

TestClass ParameterDataproviderWithClassLevel.java

parametri paketa;uvoz java.util.concurrent.TimeUnit;uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.WebElement;uvoz org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations.BeforeTest;import org.testng.annotations.Test;javni razred ParameterDataproviderWithClassLevel {Gonilnik WebDriver;String driverPath = "C: \\ geckodriver.exe";@BeforeTestnastavitev javne praznine () {System.setProperty ("webdriver.gecko.driver", driverPath);voznik = novi FirefoxDriver ();driver.manage (). timeouts (). implicitnoWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");}@Test (dataProvider = "SearchProvider", dataProviderClass = DataproviderClass.class)public void testMethod (avtor niza, String searchKey) vrže InterruptedException {WebElement searchText = driver.findElement (By.name ("q"));// Iskanje besedila v google besedilnem poljusearchText.sendKeys (searchKey);System.out.println ("Dobrodošli ->" + avtor + "Vaša iskalna tipka je ->" + searchKey);Navoj.spanje (3000);// dobimo besedilo iz iskalnega poljaNiz testValue = searchText.getAttribute ("vrednost");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// preverimo, ali ima iskalno polje pravilno vrednostAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}

DataproviderClass.java

parametri paketa;import org.testng.annotations.DataProvider;javni razred DataproviderClass {@DataProvider (name = "SearchProvider")javni statični objekt [] [] getDataFromDataprovider () {vrni nov objekt [] [] {{"Guru99", "India"},{"Krishna", "UK"},{"Bhupesh", "ZDA"}};}}

Vrste parametrov v ponudniku podatkov

Metoda DataProvider podpira dve vrsti parametrov.

Metoda - Če se SAME DataProvider obnaša drugače pri drugačni preskusni metodi, uporabite parameter Method.

V naslednjem primeru

  • Preverimo, ali je ime metode testMethodA.
  • Če je odgovor da, vrnite en niz vrednosti
  • V nasprotnem primeru vrne še en niz vrednosti
parametri paketa;uvoz java.lang.reflect.Method;uvoz java.util.concurrent.TimeUnit;uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.WebElement;uvoz org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations.BeforeTest;import org.testng.annotations.DataProvider;import org.testng.annotations.Test;javni razred ParameterByMethodInDataprovider {Gonilnik WebDriver;String driverPath = "C: \\ geckodriver.exe";@BeforeTestnastavitev javne praznine () {System.setProperty ("webdriver.gecko.driver", driverPath);voznik = novi FirefoxDriver ();driver.manage (). timeouts (). implicitnoWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");}@Test (dataProvider = "SearchProvider")public void testMethodA (Avtor niza, String searchKey) vrže InterruptedException {WebElement searchText = driver.findElement (By.name ("q"));// Iskanje besedila v iskalnem poljusearchText.sendKeys (searchKey);// Natisni avtorja in iskalni nizSystem.out.println ("Dobrodošli ->" + avtor + "Vaša iskalna tipka je ->" + searchKey);Navoj.spanje (3000);Niz testValue = searchText.getAttribute ("vrednost");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// Preverite, ali Googlovo besedilno polje prikazuje pravilno vrednostAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}@Test (dataProvider = "SearchProvider")public void testMethodB (String searchKey) vrže InterruptedException {{WebElement searchText = driver.findElement (By.name ("q"));// Iskanje besedila v iskalnem poljusearchText.sendKeys (searchKey);// Natisni samo iskalni nizSystem.out.println ("Dobrodošli -> Neznan uporabnik Vaša iskalna tipka je ->" + searchKey);Navoj.spanje (3000);Niz testValue = searchText.getAttribute ("vrednost");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// Preverite, ali Googlovo besedilno polje prikazuje pravilno vrednostAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}/ *** Tu DataProvider vrne vrednost na podlagi imena preskusne metode* @param m* @ vrni se** /@DataProvider (name = "SearchProvider")javni objekt [] [] getDataFromDataprovider (metoda m) {if (m.getName (). equalsIgnoreCase ("testMethodA")) {vrni nov objekt [] [] {{"Guru99", "India"},{"Krishna", "UK"},{"Bhupesh", "ZDA"}};}sicer {vrni nov objekt [] [] {{"Kanada"},{"Rusija"},{"Japonska"}};}}}

Tukaj je rezultat

ITestContext - Z njim lahko ustvarite različne parametre za testne primere na podlagi skupin.

V resnici lahko s pomočjo ITestContext spreminjate vrednosti parametrov glede na testne metode, gostitelje in konfiguracije testa.

V naslednjem primeru kode

  • Imamo dve skupini A & B
  • Vsaka preskusna metoda je dodeljena skupini
  • Če je vrednost skupine A, se vrne določen nabor podatkov
  • Če je vrednost skupine B, se vrne drug nabor podatkov
parametri paketa;uvoz java.util.concurrent.TimeUnit;uvoz org.openqa.selenium.By;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.WebElement;uvoz org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.ITestContext;import org.testng.annotations.BeforeTest;import org.testng.annotations.DataProvider;import org.testng.annotations.Test;javni razred ParameterByITestContextInDataprovider {Gonilnik WebDriver;String driverPath = "C: \\ geckodriver.exe";@BeforeTest (skupine = {"A", "B"})nastavitev javne praznine () {System.setProperty ("webdriver.gecko.driver", driverPath);voznik = novi FirefoxDriver ();driver.manage (). timeouts (). implicitnoWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");}@Test (dataProvider = "SearchProvider", groups = "A")public void testMethodA (Avtor niza, String searchKey) vrže InterruptedException {{// išči google besediloWebElement searchText = driver.findElement (By.name ("q"));// poiščemo vrednost na njemsearchText.sendKeys (searchKey);System.out.println ("Dobrodošli ->" + avtor + "Vaša iskalna tipka je ->" + searchKey);Navoj.spanje (3000);Niz testValue = searchText.getAttribute ("vrednost");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// preverimo pravilno vrednost v iskalnem poljuAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}@Test (dataProvider = "SearchProvider", groups = "B")public void testMethodB (String searchKey) vrže InterruptedException {{// poiščemo iskalno polje GoogleWebElement searchText = driver.findElement (By.name ("q"));// poiščemo vrednost na njemsearchText.sendKeys (searchKey);System.out.println ("Dobrodošli -> Neznan uporabnik Vaša iskalna tipka je ->" + searchKey);Navoj.spanje (3000);Niz testValue = searchText.getAttribute ("vrednost");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// preverimo pravilno vrednost v iskalnem poljuAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}/ *** Tu bo DAtaProvider zagotovil polje Object na osnovi ITestContext* @param c* @ vrni se* /@DataProvider (name = "SearchProvider")javni objekt [] [] getDataFromDataprovider (ITestContext c) {Objekt [] [] groupArray = null;za (Skupina nizov: c.getIncludedGroups ()) {if (group.equalsIgnoreCase ("A")) {groupArray = nov objekt [] [] {{"Guru99", "India"},{"Krishna", "UK"},{"Bhupesh", "ZDA"}};odmor;}sicer če (group.equalsIgnoreCase ("B")){groupArray = nov objekt [] [] {{"Kanada"},{"Rusija"},{"Japonska"}};}odmor;}vrni groupArray;}}

Opomba: Če neposredno zaženete razred testng, bo najprej poklical ponudnika podatkov, ki ne more dobiti informacij o skupinah, saj skupine niso na voljo. Če pa ta razred pokličete prek testng.xml, bo imel informacije o skupinah na voljo z ITestContext. Za klic testa uporabite naslednji XML

Povzetek :

  • Parametriranje je potrebno za ustvarjanje podatkovnega preskušanja .
  • TestNG podpira dve vrsti parametrizacije, z @ Parameter + TestNG.xml in z @DataProvider
  • V @ Parameter + TestNG.xml lahko parametre postavite na nivo suite in preizkus. Če

    Na obeh mestih je navedeno isto ime parametra; parameter testne ravni bo imel prednost pred parametrom ravni obleke.

  • z @ Parameter + TestNG.xml lahko nastavite samo eno vrednost naenkrat, vendar @DataProvider vrne 2d matriko Object .
  • Če je dataProvider prisotna v drugem razredu pa razred, kjer se preizkusna metoda prebiva, dataProvider mora biti statična metoda .
  • DataProvider podpira dva parametra : Method in ITestContext.