Dataprovider & „TestNG XML“: seleno parametrų nustatymas (pavyzdys)

Turinys:

Anonim

Kurdami programinę įrangą, mes visada norime, kad ji veiktų kitaip su skirtingais duomenų rinkiniais. Kai reikia išbandyti tą pačią programinę įrangą, negalime būti nesąžiningi ją išbandydami tik vienu duomenų rinkiniu. Vėlgi turime patikrinti, ar mūsų sistema naudoja visus derinius, kuriuos tikimasi palaikyti. Tam turime nustatyti bandomuosius scenarijus. Čia atsiranda parametrų nustatymas paveikslėlyje.

Parametravimas selene

Parametravimas selene yra bandomųjų scenarijų parametrų nustatymo procesas, siekiant per programą paleisti kelis duomenis į programą. Tai vykdymo strategija, kuri automatiškai kelis kartus paleidžia bandomuosius atvejus naudodama skirtingas reikšmes. Koncepcija, pasiekta parametruojant testavimo scenarijus, vadinama duomenų valdomu testavimu .

Šioje pamokoje sužinosite

  • Parametravimo tipas TestNG-
  • Parametrų anotacija su Testng.xml
  • Problemų sprendimas
  • Parametrai naudojant „Dataprovider“
  • Pakvieskite „DataProvider“ iš kitos klasės
  • Parametrų tipai „Dataprovider“

Parametravimo tipas TestNG-

Kad parametrai būtų aiškesni, mes atliksime parametrų parinktis vienoje populiariausių „Selenium Webdriver“ struktūrų - „ TestNG“ .

Yra du būdai , kuriais galime pasiekti parametrų nustatymą „TestNG“

  1. Su pagalba parametrų anotacija ir TestNG XML failą.

  2. Naudojant „ DataProvider“ anotaciją.

Parametrai iš Testng.xml gali būti rinkinio arba bandymo lygio

„DataProvider“ parametras kaip parametrą gali naudoti „Method“ ir „ITestContext“.

Panagrinėkime juos išsamiai -

Parametrų anotacija TestNG

Parametrai „TestNG“ anotacija yra metodas, naudojamas vertėms perduoti bandymo metodams kaip argumentams naudojant .xml failą. Vartotojams gali reikėti perduoti reikšmes bandymo metodams vykdymo metu. Anotacijos metodas „@Parameters“ gali būti naudojamas bet kuriam metodui, turintiems komentarus @Test, @Before, @After arba @Factory.

Parametrų anotacija su Testng.xml

Pasirinkite parametrus naudodami anotacijas, kai norite išspręsti sudėtingumą ir įvesties derinių yra mažiau.

Pažiūrėkime, kaip tai veikia

Testo scenarijus

1 žingsnis) Paleiskite naršyklę ir eikite į Google.com

2 žingsnis) Įveskite paieškos raktinį žodį

3 žingsnis. Patikrinkite, ar įvesta vertė yra tokia pati kaip ir mūsų bandymo duomenys

4 žingsnis) Pakartokite 2 ir 3, kol bus įvestos visos vertės

Testo autorius „SearchKey“
Guru99 Indija
Krišna JAV
Bhupeshas Kinija

Čia yra pavyzdys, kaip tai padaryti BE parametrų

paketo parametrai;importuoti org.testng.annotations.Test;importuoti org.testng.AssertJUnit;importuoti java.util.concurrent.TimeUnit;importuoti org.openqa.selenium.By;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.WebElement;importuoti org.openqa.selenium.firefox.FirefoxDriver;public class NoParameterWithTestNGXML {String driverPath = "C: \\ geckodriver.exe";„WebDriver“ tvarkyklė;@Testpublic void testNoParameter () meta InterruptedException {Styginių autorius = "guru99";String searchKey = "indija";System.setProperty ("webdriver.gecko.driver", driverPath);tvarkyklė = new FirefoxDriver ();vairuotojas.tvarkyti (). skirtasis laikas (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");„WebElement searchText = driver.findElement (By.name (" q "));// Ieškoma teksto „Google“ teksto laukelyjesearchText.sendKeys (searchKey);System.out.println ("Sveiki atvykę ->" + autorius + "Jūsų paieškos raktas yra ->" + searchKey);System.out.println ("Siūlai dabar miegos");Siūlas.miega (3000);System.out.println ("Reikšmė" Google "paieškos laukelyje =" + searchText.getAttribute ("value") + "::: Reikšmė, kurią suteikia input =" + searchKey);// vertės tikrinimas „Google“ paieškos laukelyje„AssertJUnit.assertTrue“ („searchText.getAttribute“ („reikšmė“). EqualsIgnoreCase („searchKey“));}}

Studija, aukščiau pateiktas pavyzdys. Įsivaizduokite, kaip sudėtingas kodas taps, kai tai padarysime 3 įvesties deriniams

Dabar tai parametruokime naudodami „TestNG“

Norėdami tai padaryti, jums reikės

  • Sukurkite XML failą, kuriame bus išsaugoti parametrai
  • Bandymo metu pridėkite komentarą @Parameters

Čia yra visas kodas

Testo lygis TestNG.xml




ParameterWithTestNGXML.java failas

paketo parametrai;importuoti org.testng.AssertJUnit;importuoti java.util.concurrent.TimeUnit;importuoti org.openqa.selenium.By;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.WebElement;importuoti org.openqa.selenium.firefox.FirefoxDriver;importuoti org.testng.nototations.Privaloma;importuoti org.testng.annotations.Parametrai;importuoti org.testng.annotations.Test;public class ParameterWithTestNGXML {String driverPath = "C: \\ geckodriver.exe";„WebDriver“ tvarkyklė;@Test@Parameters ({"autorius", "searchKey"})public void testParameterWithXML (@Optional ("Abc") eilutės autorius, String searchKey) meta InterruptedException {System.setProperty ("webdriver.gecko.driver", driverPath);tvarkyklė = new FirefoxDriver ();vairuotojas.tvarkyti (). skirtasis laikas (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");„WebElement searchText = driver.findElement (By.name (" q "));// Ieškoma teksto „Google“ teksto laukelyjesearchText.sendKeys (searchKey);System.out.println ("Sveiki atvykę ->" + autorius + "Jūsų paieškos raktas yra ->" + searchKey);System.out.println ("Siūlai dabar miegos");Siūlas.miega (3000);System.out.println ("Reikšmė" Google "paieškos laukelyje =" + searchText.getAttribute ("value") + "::: Reikšmė, kurią suteikia input =" + searchKey);// vertės tikrinimas „Google“ paieškos laukelyje„AssertJUnit.assertTrue“ („searchText.getAttribute“ („reikšmė“). EqualsIgnoreCase („searchKey“));}}

Nurodymai, kaip paleisti scenarijų, pasirinkite XML failą ir Vykdyti kaip „Test NG Suite“

Dešiniuoju pelės mygtuku spustelėkite .xml failą -> Vykdyti kaip -> Testng Suite (Pastaba: Suite)

Dabar parametrus galima apibrėžti dviem lygiais

  1. „Suite“ lygis - „TestNG XML“ failo žymoje esantys parametrai bus rinkinio lygio parametrai.
  2. Testo lygis - XML ​​failo bandymo žymos parametrai bus testo lygio parametrai.

Čia yra tas pats testas su rinkinio lygio parametrais

PASTABA: Jei parametro pavadinimas yra tas pats rinkinio ir bandymo lygiu, tada pirmenybė bus teikiama bandymo lygio parametrui, o ne rinkinio lygiui. Taigi, tokiu atveju visos klasės, esančios tame bandymo lygyje, dalinsis nepaisomu parametru, o kitos klasės, esančios už bandymo lygio, dalinsis „suite“ lygio parametru.

Problemų sprendimas

Nr. 1 Parametro vertės, esančios testng.xml, negalima pateikti pagal atitinkamo bandymo metodo parametrą, tai sukels klaidą.

Apsvarstykite šį pavyzdį

Čia „author“ atributas yra lygus „Guru99“, kuris yra eilutė, ir pagal atitinkamą bandymo metodą tikimasi sveiko skaičiaus vertės, todėl čia gausime išimtį.

Nr. 2 „@Parameters“ neturi atitinkamos vertės testing.xml.

Šią situaciją galite išspręsti pridėdami @optional anotaciją į atitinkamą bandymo metodo parametrą.

3 problema: norite išbandyti kelias to paties parametro reikšmes naudodami „Testng.xml“

Paprastas atsakymas yra tai, kad to negalima padaryti! Galite turėti kelis skirtingus parametrus, tačiau kiekvienas parametras gali turėti tik vieną vertę. Tai padeda užkirsti kelią kodavimo vertybėms į scenarijų. Tai daro kodą daugkartinį. Pagalvokite apie tai kaip apie scenarijaus konfigūracijos failus. Jei parametrui norite naudoti kelias reikšmes, naudokite „DataProviders“

„TestNG“ duomenų teikėjas

„TestNG“ duomenų teikėjas yra metodas, naudojamas, kai vartotojui reikia perduoti sudėtingus parametrus. Sudėtingus parametrus reikia sukurti iš „Java“, pvz., Sudėtingus objektus, objektus iš nuosavybės failų arba iš duomenų bazės galima perduoti duomenų teikėjo metodu. Metodą komentuoja @DataProvider ir jis pateikia objektų masyvą.

Parametrai naudojant „Dataprovider“

„@Parameters“ anotacija yra lengva, tačiau norint išbandyti kelis duomenų rinkinius, turime naudoti duomenų teikėją.

Norint užpildyti tūkstančius žiniatinklio formų naudojant mūsų testavimo sistemą, reikia kitokios metodikos, kuri mums suteiktų labai didelį duomenų rinkinį per vieną vykdymo srautą.

Ši duomenų valdoma koncepcija pasiekiama naudojant „TestNG“ anotaciją @DataProvider .

Jis turi tik vieną atributą „vardas“ . Jei nenurodysite vardo atributo, „DataProvider“ vardas bus toks pat kaip ir atitinkamo metodo pavadinimas.

Duomenų teikėjas grąžina dvimatį JAVA objektą į bandymo metodą ir bandymo metodą, iškvies M kartus objektų masyvo M * N tipo. Pvz., Jei „DataProvider“ pateikia 2 * 3 objektų masyvą, atitinkama testcase bus iškviesta 2 kartus su 3 parametrais kiekvieną kartą.

Pilnas pavyzdys

paketo parametrai;importuoti java.util.concurrent.TimeUnit;importuoti org.openqa.selenium.By;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.WebElement;importuoti org.openqa.selenium.firefox.FirefoxDriver;importuoti org.testng.Assert;importuoti org.testng.annotations.BeforeTest;importuoti org.testng.annotations.DataProvider;importuoti org.testng.annotations.Test;public class ParameterByDataprovider {„WebDriver“ tvarkyklė;String driverPath = "C: \\ geckodriver.exe";@BeforeTestpublic void sąranka () {// Sukurti „Firefox“ tvarkyklės objektąSystem.setProperty ("webdriver.gecko.driver", driverPath);tvarkyklė = new FirefoxDriver ();vairuotojas.tvarkyti (). skirtasis laikas (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");}/ ** Bandomasis atvejis norint patikrinti „Google“ paieškos laukelį* @param autorius* @param searchKey* @ throws InterruptedException* /@Test (dataProvider = "SearchProvider")public void testMethod (eilutės autorius, „String searchKey“) meta InterruptedException {{„WebElement searchText = driver.findElement (By.name (" q "));// paieškos vertė „Google“ paieškos laukelyjesearchText.sendKeys (searchKey);System.out.println ("Sveiki atvykę ->" + autorius + "Jūsų paieškos raktas yra ->" + searchKey);Siūlas.miega (3000);String testValue = searchText.getAttribute ("value");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// Patikrinkite, ar „Google“ paieškos laukelio vertė yra teisinga„Assert.assertTrue“ (testValue.equalsIgnoreCase (searchKey));}}/ *** @return Object [] [], kur pirmame stulpelyje yra „autorius“* ir antrame stulpelyje yra „searchKey“* /@DataProvider (vardas = "SearchProvider")viešasis objektas [] [] getDataFromDataprovider () {grąžinti naują objektą [] []{{„Guru99“, „Indija“},{„Krišna“, „JK“},{"Bhupesh", "JAV"}};}}

Pakvieskite „DataProvider“ iš kitos klasės

Pagal numatytuosius nustatymus „DataProvider“ gyvena toje pačioje klasėje, kur yra bandymo metodas, arba jo pagrindinės klasės. Norėdami įdėti jį į kitą klasę, turime padaryti duomenų teikėjas būdą, kaip statinis ir bandymo metodą mes turime pridėti atributą dataProviderClass į @Test anotacija.

Kodo pavyzdys

„TestClass“ parametrasDataproviderWithClassLevel.java

paketo parametrai;importuoti java.util.concurrent.TimeUnit;importuoti org.openqa.selenium.By;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.WebElement;importuoti org.openqa.selenium.firefox.FirefoxDriver;importuoti org.testng.Assert;importuoti org.testng.annotations.BeforeTest;importuoti org.testng.annotations.Test;public class ParameterDataproviderWithClassLevel {„WebDriver“ tvarkyklė;String driverPath = "C: \\ geckodriver.exe";@BeforeTestpublic void sąranka () {System.setProperty ("webdriver.gecko.driver", driverPath);tvarkyklė = new FirefoxDriver ();vairuotojas.tvarkyti (). skirtasis laikas (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");}@Test (dataProvider = "SearchProvider", dataProviderClass = DataproviderClass.class)public void testMethod (eilutės autorius, „String searchKey“) meta InterruptedException {„WebElement searchText = driver.findElement (By.name (" q "));// Ieškoti teksto „Google“ teksto laukelyjesearchText.sendKeys (searchKey);System.out.println ("Sveiki atvykę ->" + autorius + "Jūsų paieškos raktas yra ->" + searchKey);Siūlas.miega (3000);// gauti tekstą iš paieškos laukelioString testValue = searchText.getAttribute ("value");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// patikrinkite, ar paieškos laukelio vertė teisinga„Assert.assertTrue“ (testValue.equalsIgnoreCase (searchKey));}}

DataproviderClass.java

paketo parametrai;importuoti org.testng.annotations.DataProvider;viešoji klasė „DataproviderClass“@DataProvider (vardas = "SearchProvider")viešasis statinis objektas [] [] getDataFromDataprovider () {grąžinti naują objektą [] [] {{„Guru99“, „Indija“},{„Krišna“, „JK“},{"Bhupesh", "JAV"}};}}

Parametrų tipai „Dataprovider“

Yra dviejų tipų parametrai, kuriuos palaiko „DataProvider“ metodas.

Metodas - jei „ SAME DataProvider“ turėtų elgtis skirtingai, naudodamas skirtingą bandymo metodą, naudokite metodo parametrą.

Šiame pavyzdyje

  • Mes patikriname, ar metodo pavadinimas yra testMethodA.
  • Jei taip, grąžinkite vieną vertės rinkinį
  • Else grąžina kitą vertės rinkinį
paketo parametrai;importuoti java.lang.reflect.Method;importuoti java.util.concurrent.TimeUnit;importuoti org.openqa.selenium.By;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.WebElement;importuoti org.openqa.selenium.firefox.FirefoxDriver;importuoti org.testng.Assert;importuoti org.testng.annotations.BeforeTest;importuoti org.testng.annotations.DataProvider;importuoti org.testng.annotations.Test;public class ParameterByMethodInDataprovider {„WebDriver“ tvarkyklė;String driverPath = "C: \\ geckodriver.exe";@BeforeTestpublic void sąranka () {System.setProperty ("webdriver.gecko.driver", driverPath);tvarkyklė = new FirefoxDriver ();vairuotojas.tvarkyti (). skirtasis laikas (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");}@Test (dataProvider = "SearchProvider")public void testMethodA (eilutės autorius, String searchKey) meta InterruptedException {„WebElement searchText = driver.findElement (By.name (" q "));// Ieškokite teksto paieškos laukelyjesearchText.sendKeys (searchKey);// Spausdinti autorių ir paieškos eilutęSystem.out.println ("Sveiki atvykę ->" + autorius + "Jūsų paieškos raktas yra ->" + searchKey);Siūlas.miega (3000);String testValue = searchText.getAttribute ("value");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// Patikrinkite, ar „Google“ teksto laukelyje rodoma teisinga vertė„Assert.assertTrue“ (testValue.equalsIgnoreCase (searchKey));}@Test (dataProvider = "SearchProvider")public void testMethodB (String searchKey) meta InterruptedException {{„WebElement searchText = driver.findElement (By.name (" q "));// Ieškokite teksto paieškos laukelyjesearchText.sendKeys (searchKey);// Spausdinti tik paieškos eilutęSystem.out.println ("Sveiki atvykę -> Nežinomas vartotojas Jūsų paieškos raktas yra ->" + searchKey);Siūlas.miega (3000);String testValue = searchText.getAttribute ("value");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// Patikrinkite, ar „Google“ teksto laukelyje rodoma teisinga vertė„Assert.assertTrue“ (testValue.equalsIgnoreCase (searchKey));}}/ *** Čia „DataProvider“ grąžinama vertė pagal bandymo metodo pavadinimą* @param m* @grįžti** /@DataProvider (vardas = "SearchProvider")viešasis objektas [] [] getDataFromDataprovider (metodas m) {jei (m.getName (). equalsIgnoreCase ("testMethodA")) {grąžinti naują objektą [] [] {{„Guru99“, „Indija“},{„Krišna“, „JK“},{"Bhupesh", "JAV"}};}Kitas{grąžinti naują objektą [] [] {{ "Kanada" },{ "Rusija" },{„Japonija“}};}}}

Čia yra išvestis

„ITestContext“ - jis gali būti naudojamas kuriant skirtingus parametrus bandymų atvejams, remiantis grupėmis.

Tikrame gyvenime galite naudoti „ITestContext“, kad pakeistumėte parametrų reikšmes, atsižvelgdami į bandymo metodus, pagrindinius kompiuterius, testo konfigūracijas.

Šiame kodo pavyzdyje

  • Mes turime 2 A ir B grupes
  • Kiekvienas bandymo metodas priskiriamas grupei
  • Jei grupės vertė yra A, grąžinamas tam tikras duomenų rinkinys
  • Jei grupės vertė yra B, grąžinamas kitas duomenų rinkinys
paketo parametrai;importuoti java.util.concurrent.TimeUnit;importuoti org.openqa.selenium.By;importuoti org.openqa.selenium.WebDriver;importuoti org.openqa.selenium.WebElement;importuoti org.openqa.selenium.firefox.FirefoxDriver;importuoti org.testng.Assert;importuoti org.testng.ITestContext;importuoti org.testng.annotations.BeforeTest;importuoti org.testng.annotations.DataProvider;importuoti org.testng.annotations.Test;public class ParameterByITestContextInDataprovider {„WebDriver“ tvarkyklė;String driverPath = "C: \\ geckodriver.exe";@BeforeTest (grupės = {"A", "B"})public void sąranka () {System.setProperty ("webdriver.gecko.driver", driverPath);tvarkyklė = new FirefoxDriver ();vairuotojas.tvarkyti (). skirtasis laikas (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");}@Test (dataProvider = "SearchProvider", grupės = "A")public void testMethodA (eilutės autorius, String searchKey) meta InterruptedException {{// ieškoti „Google“ teksto laukelio„WebElement searchText = driver.findElement (By.name (" q "));// ieškokite joje vertėssearchText.sendKeys (searchKey);System.out.println ("Sveiki atvykę ->" + autorius + "Jūsų paieškos raktas yra ->" + searchKey);Siūlas.miega (3000);String testValue = searchText.getAttribute ("value");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// patikrinkite teisingą reikšmę paieškos laukelyje„Assert.assertTrue“ (testValue.equalsIgnoreCase (searchKey));}}@Test (dataProvider = "SearchProvider", grupės = "B")public void testMethodB (String searchKey) meta InterruptedException {{// rasti „Google“ paieškos laukelį„WebElement searchText = driver.findElement (By.name (" q "));// ieškokite joje vertėssearchText.sendKeys (searchKey);System.out.println ("Sveiki atvykę -> Nežinomas vartotojas Jūsų paieškos raktas yra ->" + searchKey);Siūlas.miega (3000);String testValue = searchText.getAttribute ("value");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// patikrinkite teisingą reikšmę paieškos laukelyje„Assert.assertTrue“ (testValue.equalsIgnoreCase (searchKey));}}/ *** Čia „DAtaProvider“ pateiks objektų masyvą remdamasis „ITestContext“* @param c* @grįžti* /@DataProvider (vardas = "SearchProvider")viešasis objektas [] [] getDataFromDataprovider (ITestContext c) {Objektas [] [] groupArray = null;skirta (String group: c.getIncludedGroups ()) {jei (group.equalsIgnoreCase ("A")) {groupArray = naujas objektas [] [] {{„Guru99“, „Indija“},{„Krišna“, „JK“},{"Bhupesh", "JAV"}};pertrauka;}else if (group.equalsIgnoreCase ("B")){groupArray = naujas objektas [] [] {{ "Kanada" },{ "Rusija" },{„Japonija“}};}pertrauka;}grįžti grupėArray;}}

Pastaba: Jei tiesiogiai vykdote savo testng klasę, jis pirmiausia paskambins į duomenų teikėją, kuris negali gauti informacijos apie grupes, nes grupės nėra. Tačiau jei paskambinsite į šią klasę per testng.xml, grupių informacija bus pasiekiama naudojant „ITestContext“. Norėdami iškviesti testą, naudokite šią XML



Santrauka :

  • Norint sukurti duomenimis pagrįstą testavimą, reikia atlikti parametrų nustatymą .
  • „TestNG“ palaiko dviejų rūšių parametrus, naudojant @ Parameter + TestNG.xml ir naudojant @DataProvider
  • Be @ Parametras + TestNG.xml parametrų gali būti dedama į komplektą lygio ir bandymo lygį. Jei

    Tas pats parametro pavadinimas yra deklaruojamas abiejose vietose; bandymo lygio parametrui bus teikiama pirmenybė, palyginti su kostiumo lygio parametru.

  • naudojant @ Parameter + TestNG.xml vienu metu galima nustatyti tik vieną reikšmę, tačiau @DataProvider pateikia 2d objekto masyvą .
  • Jei „DataProvider“ yra skirtingoje klasėje, tada klasėje, kurioje yra bandymo metodas, „ DataProvider“ turėtų būti statinis metodas .
  • Yra du „ DataProvider“ palaikomi parametrai : „ Method“ ir „ ITestContext“.