Dataprovider & TestNG XML: Parametrointi seleenissä (esimerkki)

Sisällysluettelo:

Anonim

Kun luot ohjelmistoa, toivomme aina, että sen pitäisi toimia eri tavalla eri tietojoukkojen kanssa. Saman ohjelmiston testaamisen osalta emme voi olla epäoikeudenmukaisia ​​testata sitä vain yhdellä tietojoukolla. Tässä on jälleen varmistettava, että järjestelmämme käyttää kaikkia yhdistelmiä, joiden odotetaan tukevan. Tätä varten meidän on parametroitava testiskriptejämme. Tässä tulee kuvan parametrointi.

Parametrointi seleenissä

Parametrointi seleenissä on prosessi testiskriptien parametroimiseksi, jotta useita tietoja voidaan siirtää sovellukselle ajon aikana. Se on suoritusstrategia, joka suorittaa testitapaukset automaattisesti useita kertoja käyttäen eri arvoja. Testikoodien parametroinnilla saavutettua konseptia kutsutaan tietopohjaiseksi testaukseksi .

Tässä opetusohjelmassa opit-

  • Parametroinnin tyyppi TestNG-
  • Parametrien merkintä Testng.xml-tiedostolla
  • Ongelmien karttoittaminen
  • Parametrit Dataproviderin avulla
  • Kutsu DataProvider eri luokalta
  • Parametrien tyypit Dataproviderissa

Parametroinnin tyyppi TestNG-

Parametroinnin selkeyttämiseksi käymme läpi parametrointivaihtoehdot yhdessä Selenium Webdriverin suosituimmasta kehyksestä - TestNG .

On kaksi tapaa , joilla voimme saavuttaa parametroinnin testng

  1. Avulla parametrit huomautusta ja testng XML -tiedosto.

  2. Avulla DataProvider huomautusta.

Testng.xml-tiedoston parametrit voivat olla sarja- tai testitasoja

DataProviderin parametri voi ottaa parametriksi Method ja ITestContext.

Tutkitaan niitä yksityiskohtaisesti -

Parametrien merkintä TestNG: ssä

Parametrit Annotation in TestNG on menetelmä, jonka avulla arvot välitetään testimenetelmille argumentteina .xml-tiedostoa käyttäen. Käyttäjiä voidaan vaatia välittämään arvot testimenetelmille ajon aikana. @Parameters-merkintämenetelmää voidaan käyttää missä tahansa menetelmässä, jossa on @Test, @Before, @After tai @Factory-merkintä.

Parametrien merkintä Testng.xml-tiedostolla

Valitse parametrointi merkinnöillä, kun haluat käsitellä monimutkaisuutta ja syöttöyhdistelmien määrää on vähemmän.

Katsotaanpa kuinka tämä toimii

Testiskenaario

Vaihe 1) Käynnistä selain ja siirry osoitteeseen Google.com

Vaihe 2) Kirjoita hakusana

Vaihe 3) Varmista, että syötetty arvo on sama kuin testidatamme

Vaihe 4) Toista 2 ja 3, kunnes kaikki arvot syötetään

Testin kirjoittaja SearchKey
Guru99 Intia
Krishna USA
Bhupesh Kiina

Tässä on esimerkki siitä, miten se tehdään ILMAN parametreja

paketin parametrit;tuo org.testng.annotations.Test;tuo org.testng.AssertJUnit;tuo java.util.concurrent.TimeUnit;tuo org.openqa.selenium.By;tuo org.openqa.selenium.WebDriver;tuonti org.openqa.selenium.WebElement;tuo org.openqa.selenium.firefox.FirefoxDriver;julkinen luokka NoParameterWithTestNGXML {Merkkijono driverPath = "C: \\ geckodriver.exe";WebDriver-ohjain;@Testatapublic void testNoParameter () heittää InterruptedException {Merkkijono kirjoittaja = "guru99";Merkkijono searchKey = "intia";System.setProperty ("webdriver.gecko.driver", driverPath);ohjain = uusi FirefoxDriver ();driver.manage (). timeout (). implisiittisesti Odota (10, TimeUnit.SECONDS);driver.get ("https://google.com");WebElement searchText = driver.findElement (By.name ("q"));// Etsitään tekstiä google-tekstikentässäsearchText.sendKeys (searchKey);System.out.println ("Tervetuloa ->" + kirjoittaja + "Hakunäppäimesi on ->" + searchKey);System.out.println ("Lanka nukkuu nyt");Lanka. Unessa (3000);System.out.println ("Arvo Google-hakukentässä =" + searchText.getAttribute ("arvo") + "::: input: n antama arvo =" + searchKey);// arvon tarkistaminen Google-hakukentässäAssertJUnit.assertTrue (searchText.getAttribute ("arvo"). EqualsIgnoreCase (searchKey));}}

Tutkimus, yllä oleva esimerkki. Kuvittele vain kuinka monimutkaisesta koodista tulee, kun teemme tämän kolmelle tuloyhdistelmälle

Parametroidaan nyt tämä käyttämällä TestNG: tä

Voit tehdä niin, sinun on

  • Luo XML-tiedosto, joka tallentaa parametrit
  • Lisää testissä merkintä @Parameters

Tässä on täydellinen koodi

Testitaso TestNG.xml




ParameterWithTestNGXML.java-tiedosto

paketin parametrit;tuo org.testng.AssertJUnit;tuo java.util.concurrent.TimeUnit;tuo org.openqa.selenium.By;tuo org.openqa.selenium.WebDriver;tuonti org.openqa.selenium.WebElement;tuo org.openqa.selenium.firefox.FirefoxDriver;Tuo org.testng.annotations.Valinnainen;tuo org.testng.annotations.Parameters;tuo org.testng.annotations.Test;public class ParameterWithTestNGXML {Merkkijono driverPath = "C: \\ geckodriver.exe";WebDriver-ohjain;@Testata@Parameters ({"kirjailija", "hakuavain"})public void testParameterWithXML (@Optional ("Abc") Merkkijonon kirjoittaja, String searchKey) heittää InterruptedException {System.setProperty ("webdriver.gecko.driver", driverPath);ohjain = uusi FirefoxDriver ();driver.manage (). timeout (). implisiittisesti Odota (10, TimeUnit.SECONDS);driver.get ("https://google.com");WebElement searchText = driver.findElement (By.name ("q"));// Etsitään tekstiä google-tekstikentässäsearchText.sendKeys (searchKey);System.out.println ("Tervetuloa ->" + kirjoittaja + "Hakunäppäimesi on ->" + searchKey);System.out.println ("Lanka nukkuu nyt");Lanka. Unessa (3000);System.out.println ("Arvo Google-hakukentässä =" + searchText.getAttribute ("arvo") + "::: input: n antama arvo =" + searchKey);// arvon tarkistaminen Google-hakukentässäAssertJUnit.assertTrue (searchText.getAttribute ("arvo"). EqualsIgnoreCase (searchKey));}}

Ohjeet komentosarjan suorittamiseen, valitsemalla XML-tiedosto ja Suorita Test NG Suite -ohjelmana

Napsauta hiiren kakkospainikkeella .xml-tiedostoa -> Suorita nimellä -> Testng Suite (Huomaa: Suite)

Nyt parametrit voidaan määrittää kahdella tasolla

  1. Pakettitaso - TestNG XML -tiedoston -tunnisteen sisällä olevat parametrit ovat sarjatason parametreja.
  2. Testitaso - Testattavan XML-tiedoston -tagin sisällä olevat parametrit ovat testitason parametreja.

Tässä on sama testi Suite-tason parametreilla

HUOMAUTUS: Jos parametrin nimi on sama pakettitasolla ja testitasolla, testitasoparametri saa etusijan pakettitasoon nähden. Joten siinä tapauksessa kaikki kyseisen testitason sisäiset luokat jakavat ohitetun parametrin, ja muut testitason ulkopuolella olevat luokat jakavat sarjatason parametrin.

Ongelmien karttoittaminen

Nro # 1 Parametrin arvoa testng.xml-tiedostossa ei voida kirjoittaa tyypin mukaan vastaavan testimenetelmän parametriin, se heittää virheen.

Harkitse seuraavaa esimerkkiä

Tässä "tekijä" -attribuutti on yhtä suuri kuin "Guru99", joka on merkkijono, ja vastaavassa testimenetelmässä se odottaa kokonaislukua, joten saamme poikkeuksen.

Numero # 2 @Parametereillasi ei ole vastaavaa arvoa testauksessa.xml.

Voit ratkaista tilanteen lisäämällä @ valinnainen merkinnän vastaavaan testimenetelmän parametriin.

Ongelma # 3: Haluat testata saman parametrin useita arvoja käyttämällä Testng.xml

Yksinkertainen vastaus on, että tätä ei voida tehdä! Sinulla voi olla useita eri parametreja, mutta jokaisella parametrilla voi olla vain yksi arvo. Tämä auttaa estämään kovakoodauksen arvot komentosarjaan. Tämä tekee koodin uudelleenkäytettäväksi. Ajattele sitä komentosarjan asetustiedostoina. Jos haluat käyttää useita arvoja parametrille, käytä DataProvidersia

Tietojen tarjoaja TestNG: ssä

TestNG: n tietojen tarjoaja on menetelmä, jota käytetään, kun käyttäjän on välitettävä monimutkaiset parametrit. Monimutkaiset parametrit on luotava Java-ohjelmasta, kuten monimutkaiset objektit, kiinteistötiedostoista tai tietokannasta tulevat objektit voidaan välittää tiedon tarjoajan menetelmällä. Menetelmän merkitsee @DataProvider ja se palauttaa joukon objekteja.

Parametrit Dataproviderin avulla

@Parameters-merkintä on helppoa, mutta meidän on käytettävä Data Provideria testataksesi usealla tietojoukolla.

Tuhansien verkkolomakkeiden täyttämiseen testauskehyksellämme tarvitaan erilainen metodologia, joka voi antaa meille erittäin suuren tietojoukon yhdessä suoritusvirrassa.

Tämä dataohjattu konsepti saavutetaan @DataProvider- merkinnällä TestNG: ssä.

Sillä on vain yksi attribuutti 'name' . Jos et määritä name-määritettä, DataProvider-nimi on sama kuin vastaavan menetelmän nimi.

Tietojen tarjoaja palauttaa kaksiulotteisen JAVA-objektin testimenetelmälle ja testimenetelmälle, kutsuu M kertaa objektiryhmän M * N -tyypissä. Esimerkiksi, jos DataProvider palauttaa 2 * 3 objektin matriisin, vastaava testikotelo kutsutaan 2 kertaa 3 parametrilla joka kerta.

Täydellinen esimerkki

paketin parametrit;tuo java.util.concurrent.TimeUnit;tuo org.openqa.selenium.By;tuo org.openqa.selenium.WebDriver;tuonti org.openqa.selenium.WebElement;tuo org.openqa.selenium.firefox.FirefoxDriver;tuo org.testng.Assert;tuo org.testng.annotations.BeforeTest;tuo org.testng.annotations.DataProvider;tuo org.testng.annotations.Test;public class ParameterByDataprovider {WebDriver-ohjain;Merkkijono driverPath = "C: \\ geckodriver.exe";@BeforeTestpublic void setup () {// Luo Firefox-ohjainobjektiSystem.setProperty ("webdriver.gecko.driver", driverPath);ohjain = uusi FirefoxDriver ();driver.manage (). timeout (). implisiittisesti Odota (10, TimeUnit.SECONDS);driver.get ("https://google.com");}/ ** Testitapa google-hakukentän vahvistamiseksi* @param kirjoittaja* @param searchKey* @throws InterruptedException* /@Test (dataProvider = "SearchProvider")public void testMethod (merkkijonon kirjoittaja, String searchKey) heittää InterruptedException {{WebElement searchText = driver.findElement (By.name ("q"));// hakuarvo google-hakukentässäsearchText.sendKeys (searchKey);System.out.println ("Tervetuloa ->" + kirjoittaja + "Hakunäppäimesi on ->" + searchKey);Lanka. Unessa (3000);Merkkijono testValue = searchText.getAttribute ("arvo");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// Tarkista, onko Google-hakukentän arvo oikeaAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}/ *** @return Object [] [], jossa ensimmäisessä sarakkeessa on kirjoittaja* ja toinen sarake sisältää 'searchKey'* /@DataProvider (nimi = "SearchProvider")julkinen objekti [] [] getDataFromDataprovider () {palauta uusi objekti [] []{{"Guru99", "Intia"},{"Krishna", "UK"},{"Bhupesh", "USA"}};}}

Kutsu DataProvider eri luokalta

Oletusarvoisesti DataProvider asuu samassa luokassa, jossa testimenetelmä on, tai sen perusluokka. Laittaa se jollakin muulla luokassa meidän on tehtävä tiedontoimittajan menetelmää staattinen ja testausmenetelmä meidän täytyy lisätä määrite dataProviderClass vuonna @Test huomautusta.

Koodiesimerkki

TestClass-parametriDataproviderWithClassLevel.java

paketin parametrit;tuo java.util.concurrent.TimeUnit;tuo org.openqa.selenium.By;tuo org.openqa.selenium.WebDriver;tuonti org.openqa.selenium.WebElement;tuo org.openqa.selenium.firefox.FirefoxDriver;tuo org.testng.Assert;tuo org.testng.annotations.BeforeTest;tuo org.testng.annotations.Test;public class ParameterDataproviderWithClassLevel {WebDriver-ohjain;Merkkijono driverPath = "C: \\ geckodriver.exe";@BeforeTestpublic void setup () {System.setProperty ("webdriver.gecko.driver", driverPath);ohjain = uusi FirefoxDriver ();driver.manage (). timeout (). implisiittisesti Odota (10, TimeUnit.SECONDS);driver.get ("https://google.com");}@Test (dataProvider = "SearchProvider", dataProviderClass = DataproviderClass.class)public void testMethod (merkkijonon kirjoittaja, String searchKey) heittää InterruptedException {WebElement searchText = driver.findElement (By.name ("q"));// Hae tekstiä google-tekstikentästäsearchText.sendKeys (searchKey);System.out.println ("Tervetuloa ->" + kirjoittaja + "Hakunäppäimesi on ->" + searchKey);Lanka. Unessa (3000);// hae teksti hakukentästäMerkkijono testValue = searchText.getAttribute ("arvo");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// tarkista, onko hakukentällä oikea arvoAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}

DataproviderClass.java

paketin parametrit;tuo org.testng.annotations.DataProvider;julkinen luokka DataproviderClass {@DataProvider (nimi = "SearchProvider")julkinen staattinen objekti [] [] getDataFromDataprovider () {palauta uusi objekti [] [] {{"Guru99", "Intia"},{"Krishna", "UK"},{"Bhupesh", "USA"}};}}

Parametrien tyypit Dataproviderissa

DataProvider-menetelmä tukee kahden tyyppisiä parametreja.

Method - Jos SAME DataProviderin pitäisi toimia eri tavalla eri testimenetelmällä, käytä Method-parametria.

Seuraavassa esimerkissä

  • Tarkistamme, onko menetelmän nimi testMethodA.
  • Jos kyllä, palauta yksi arvojoukko
  • Muut palauttavat toisen arvojoukon
paketin parametrit;tuo java.lang.reflect.Method;tuo java.util.concurrent.TimeUnit;tuo org.openqa.selenium.By;tuo org.openqa.selenium.WebDriver;tuonti org.openqa.selenium.WebElement;tuo org.openqa.selenium.firefox.FirefoxDriver;tuo org.testng.Assert;tuo org.testng.annotations.BeforeTest;tuo org.testng.annotations.DataProvider;tuo org.testng.annotations.Test;public class ParameterByMethodInDataprovider {WebDriver-ohjain;Merkkijono driverPath = "C: \\ geckodriver.exe";@BeforeTestpublic void setup () {System.setProperty ("webdriver.gecko.driver", driverPath);ohjain = uusi FirefoxDriver ();driver.manage (). timeout (). implisiittisesti Odota (10, TimeUnit.SECONDS);driver.get ("https://google.com");}@Test (dataProvider = "SearchProvider")public void testMethodA (merkkijonon kirjoittaja, String searchKey) heittää InterruptedException {WebElement searchText = driver.findElement (By.name ("q"));// Hae tekstiä hakukentästäsearchText.sendKeys (searchKey);// Tulosta kirjoittaja ja hakusarjaSystem.out.println ("Tervetuloa ->" + kirjoittaja + "Hakunäppäimesi on ->" + searchKey);Lanka. Unessa (3000);Merkkijono testValue = searchText.getAttribute ("arvo");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// Tarkista, näytetäänkö Google-tekstiruudussa oikea arvoAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}@Test (dataProvider = "SearchProvider")public void testMethodB (String searchKey) heittää InterruptedException {{WebElement searchText = driver.findElement (By.name ("q"));// Hae tekstiä hakukentästäsearchText.sendKeys (searchKey);// Tulosta vain hakumerkkijonoSystem.out.println ("Tervetuloa -> Tuntematon käyttäjä Hakunäppäimesi on ->" + searchKey);Lanka. Unessa (3000);Merkkijono testValue = searchText.getAttribute ("arvo");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// Tarkista, näytetäänkö Google-tekstiruudussa oikea arvoAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}/ *** Tässä DataProviderin palauttava arvo testimenetelmän nimen perusteella* @param m* @paluu** /@DataProvider (nimi = "SearchProvider")public Object [] [] getDataFromDataprovider (menetelmä m) {if (m.getName (). equalsIgnoreCase ("testMethodA")) {palauta uusi objekti [] [] {{"Guru99", "Intia"},{"Krishna", "UK"},{"Bhupesh", "USA"}};}muu{palauta uusi objekti [] [] {{ "Kanada" },{ "Venäjä" },{"Japani"}};}}}

Tässä on tulos

ITestContext - Sen avulla voidaan luoda erilaisia ​​parametreja testitapauksiin ryhmien perusteella.

Tosielämässä ITestContextin avulla voit muuttaa parametriarvoja testimenetelmien, isäntien ja testin kokoonpanojen perusteella.

Seuraavassa koodiesimerkissä

  • Meillä on 2 ryhmää A ja B
  • Jokainen testimenetelmä on osoitettu ryhmälle
  • Jos ryhmän arvo on A, tietty tietojoukko palautetaan
  • Jos ryhmän arvo on B, palautetaan toinen tietojoukko
paketin parametrit;tuo java.util.concurrent.TimeUnit;tuo org.openqa.selenium.By;tuo org.openqa.selenium.WebDriver;tuonti org.openqa.selenium.WebElement;tuo org.openqa.selenium.firefox.FirefoxDriver;tuo org.testng.Assert;tuo org.testng.ITestContext;tuo org.testng.annotations.BeforeTest;tuo org.testng.annotations.DataProvider;tuo org.testng.annotations.Test;public class ParameterByITestContextInDataprovider {WebDriver-ohjain;Merkkijono driverPath = "C: \\ geckodriver.exe";@BeforeTest (ryhmät = {"A", "B"})public void setup () {System.setProperty ("webdriver.gecko.driver", driverPath);ohjain = uusi FirefoxDriver ();driver.manage (). timeout (). implisiittisesti Odota (10, TimeUnit.SECONDS);driver.get ("https://google.com");}@Test (dataProvider = "SearchProvider", ryhmät = "A")public void testMethodA (merkkijonon kirjoittaja, String searchKey) heittää InterruptedException {{// etsi google-tekstikentästäWebElement searchText = driver.findElement (By.name ("q"));// etsi arvoa siitäsearchText.sendKeys (searchKey);System.out.println ("Tervetuloa ->" + kirjoittaja + "Hakunäppäimesi on ->" + searchKey);Lanka. Unessa (3000);Merkkijono testValue = searchText.getAttribute ("arvo");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// tarkista oikea arvo hakukentässäAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}@Test (dataProvider = "SearchProvider", ryhmät = "B")public void testMethodB (String searchKey) heittää InterruptedException {{// etsi Google-hakukenttäWebElement searchText = driver.findElement (By.name ("q"));// etsi arvoa siitäsearchText.sendKeys (searchKey);System.out.println ("Tervetuloa -> Tuntematon käyttäjä Hakunäppäimesi on ->" + searchKey);Lanka. Unessa (3000);Merkkijono testValue = searchText.getAttribute ("arvo");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// tarkista oikea arvo hakukentässäAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}/ *** Tässä DAtaProvider tarjoaa Object-taulukon ITestContextin perusteella* @param c* @paluu* /@DataProvider (nimi = "SearchProvider")public Object [] [] getDataFromDataprovider (ITestContext c) {Objekti [] [] groupArray = null;kohteelle (Merkkijonoryhmä: c.getIncludedGroups ()) {if (group.equalsIgnoreCase ("A")) {groupArray = uusi objekti [] [] {{"Guru99", "Intia"},{"Krishna", "UK"},{"Bhupesh", "USA"}};tauko;}else if (ryhmä.qualsIgnoreCase ("B")){groupArray = uusi objekti [] [] {{ "Kanada" },{ "Venäjä" },{"Japani"}};}tauko;}paluuryhmä Array;}}

Huomaa: Jos suoritat testng-luokan suoraan, se soittaa ensin dataproviderille, joka ei voi saada ryhmätietoja, koska ryhmiä ei ole käytettävissä. Mutta jos soitat tähän luokkaan testng.xml: n kautta, sillä on ryhmätiedot saatavilla ITestContextin kanssa. Kutsu testi käyttämällä seuraavaa XML: ää

Yhteenveto :

  • Parametrointi vaaditaan dataan perustuvan testauksen luomiseksi .
  • TestNG tukee kahta erilaista parametrisointia, käyttämällä @ Parameter + TestNG.xml ja @DataProvider
  • Kohdassa @ Parameter + TestNG.xml parametrit voidaan sijoittaa sarja- ja testitasolle. Jos

    Sama parametrin nimi ilmoitetaan molemmissa paikoissa; testitason parametri saa etusijan puvutason parametriin nähden.

  • @ Parameter + TestNG.xml -toimintoa käyttämällä voidaan asettaa vain yksi arvo kerrallaan, mutta @DataProvider palauttaa 2d- objektiryhmän .
  • Jos DataProvider on läsnä eri luokassa kuin luokassa, jossa testimenetelmä sijaitsee, DataProviderin tulisi olla staattinen menetelmä .
  • On kaksi parametreja tukemat DataProvider ovat menetelmällä ja ITestContext.