Dataprovider & TestNG XML: Paraméterezés a szelénben (példa)

Tartalomjegyzék:

Anonim

A szoftver létrehozása során mindig azt szeretnénk, ha más adathalmazokkal másként működne. Ha ugyanazt a szoftvert teszteljük, nem lehetünk igazságtalanok, ha csak egyetlen adatsorral teszteljük. Itt is meg kell győződnünk arról, hogy rendszerünk minden olyan kombinációt alkalmaz, amely várhatóan támogatni fogja. Ehhez paramétereznünk kell a teszt szkriptjeinket. Itt jön a képen a paraméterezés.

Paraméterezés a szelénben

A szelén paraméterezése a tesztparancsok paraméterezésének folyamata, annak érdekében, hogy futás közben több adatot továbbítson az alkalmazásnak. Ez egy olyan végrehajtási stratégia, amely automatikusan többször futtatja a teszteseteket különböző értékek felhasználásával. A teszt szkriptek paraméterezésével elért koncepciót Data Driven Testingnek hívják .

Ebben az oktatóanyagban megtanulja-

  • Paraméterezés típusa a TestNG-
  • Paraméterek jegyzete a Testng.xml fájlban
  • Hibaelhárítás
  • Paraméterek a Dataprovider segítségével
  • Hívja meg a DataProvider alkalmazást más osztályból
  • Paraméterek típusai a Dataprovider programban

Paraméterezés típusa a TestNG-

Ahhoz, hogy a paraméterezés több tiszta, mi megy át a paraméterezés opció az egyik legnépszerűbb keret szelén Webdriver - testng .

Kétféle módon érhetjük el a paraméterezést a TestNG-ben

  1. A Parameters annotáció és a TestNG XML fájl segítségével.

  2. A DataProvider annotáció segítségével .

A Testng.xml fájlból származó paraméterek lehetnek készlet- vagy tesztszintűek

A DataProvider paramétere a Method és az ITestContext paramétert veheti fel.

Tanulmányozzuk őket részletesen -

Paraméterek kommentárja a TestNG-ben

Paraméterek A TestNG kommentárja egy olyan módszer, amelyet az értékek átadására használunk argumentumként .xml fájlt használó argumentumokként. Előfordulhat, hogy a felhasználóknak az értékeket a futási idő alatt át kell adniuk a vizsgálati módszereknek. A @Parameters annotációs módszer bármely olyan módszerben használható, amelynek @Test, @Before, @After vagy @Factory megjegyzései vannak.

Paraméterek jegyzete a Testng.xml fájlban

Válassza ki a paraméterezést a kommentárokkal, ha komplexitással akar foglalkozni, és a bemeneti kombinációk száma kevesebb.

Lássuk, hogyan működik ez

Teszt forgatókönyv

1. lépés: Indítsa el a böngészőt, és lépjen a Google.com oldalra

2. lépés: Írja be a keresési kulcsszót

3. lépés: Ellenőrizze, hogy a beírt érték megegyezik-e a vizsgálati adatainkkal

4. lépés: Ismételje meg a 2. és 3. lépést, amíg az összes értéket be nem írja

Teszt szerző SearchKey
Guru99 India
Krisna USA
Bhupesh Kína

Itt van egy példa arra, hogyan kell megtenni NEM paraméterek nélkül

csomag paraméterek;import org.testng.annotations.Test;import org.testng.AssertJUnit;importálja a java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;nyilvános osztály NoParameterWithTestNGXML {String driverPath = "C: \\ geckodriver.exe";WebDriver illesztőprogram;@Tesztpublic void testNoParameter () dobja az InterruptedException {Karakterlánc = "guru99";String searchKey = "india";System.setProperty ("webdriver.gecko.driver", driverPath);illesztőprogram = new FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");WebElement searchText = driver.findElement (By.name ("q"));// Szöveg keresése a google szövegmezőbensearchText.sendKeys (searchKey);System.out.println ("Üdvözöljük ->" + szerző + "A keresési kulcs ->" + searchKey);System.out.println ("A szál most alszik");Szál.alszik (3000);System.out.println ("Érték a Google keresőmezőben =" + searchText.getAttribute ("érték") + "::: Az input =" + searchKey által megadott érték);// az érték ellenőrzése a google keresőmezőbenAssertJUnit.assertTrue (searchText.getAttribute ("érték"). EqualsIgnoreCase (searchKey));}}

Egy tanulmány, a fenti példa. Képzelje csak el, milyen összetett lesz a kód, amikor ezt 3 bemeneti kombinációnál végezzük

Most paraméterezzük ezt a TestNG segítségével

Ehhez meg kell

  • Hozzon létre egy XML fájlt, amely tárolja a paramétereket
  • A tesztben adja hozzá a @Parameters jelölést

Itt van a teljes kód

Tesztszint TestNG.xml




ParameterWithTestNGXML.java fájl

csomag paraméterek;import org.testng.AssertJUnit;importálja a java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Opcionális;import org.testng.annotations.Paraméterek;import org.testng.annotations.Test;public class ParameterWithTestNGXML {String driverPath = "C: \\ geckodriver.exe";WebDriver illesztőprogram;@Teszt@Parameters ({"szerző", "keresőkulcs"})public void testParameterWithXML (@Optional ("Abc") Karaktersorozat, String searchKey) dobja az InterruptedException {System.setProperty ("webdriver.gecko.driver", driverPath);illesztőprogram = new FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");WebElement searchText = driver.findElement (By.name ("q"));// Szöveg keresése a google szövegmezőbensearchText.sendKeys (searchKey);System.out.println ("Üdvözöljük ->" + szerző + "A keresési kulcs ->" + searchKey);System.out.println ("A szál most alszik");Szál.alszik (3000);System.out.println ("Érték a Google keresőmezőben =" + searchText.getAttribute ("érték") + "::: Az input =" + searchKey által megadott érték);// az érték ellenőrzése a google keresőmezőbenAssertJUnit.assertTrue (searchText.getAttribute ("érték"). EqualsIgnoreCase (searchKey));}}

Utasítások a szkript futtatásához, jelölje ki az XML fájlt, majd futtassa Test NG Suite-ként

Kattintson a jobb gombbal az .xml fájlra -> Futtatás másként -> Testng Suite (Megjegyzés: Suite)

A paraméterek most 2 szinten határozhatók meg

  1. Suite szint - A TestNG XML fájl címkéjén belüli paraméterek suite szintű paraméterek lesznek.
  2. Tesztszint - Az XML-fájl tesztelésének címkéjén belüli paraméterek Tesztszintű paraméterek lesznek.

Itt ugyanaz a teszt a csomagszintű paraméterekkel

MEGJEGYZÉS: Abban az esetben, ha a paraméter neve megegyezik a csomag szintjén és a teszt szinten, akkor a teszt szintű paraméter előnyben részesül a csomag szintjével szemben. Tehát ebben az esetben az adott tesztszinten belüli összes osztály meg fogja osztani az felülbírált paramétert, és a tesztszinten kívüli többi osztály megoszthatja a készletszintű paramétereket.

Hibaelhárítás

1. probléma: A testng.xml fájlban található paraméterértéket nem lehet megadni a megfelelő vizsgálati módszer paraméteréhez, ez hibát fog okozni.

Tekintsük a következő példát

Itt a „author” attribútum megegyezik a „Guru99” karakterlánccal, amely egy karakterlánc, és a megfelelő vizsgálati módszerben egész számra számít, ezért kivételt fogunk kapni.

2. kérdés: A @Parameters-nek nincs megfelelő értéke a testing.xml fájlban.

Megoldhatja ezt a helyzetet úgy, hogy @ opcionális kommentárral egészíti ki a vizsgálati módszer megfelelő paraméterét.

3. probléma: Ugyanazon paraméter több értékét is tesztelni szeretné a Testng.xml fájl használatával

Az egyszerű válasz: ezt nem lehet megtenni! Több különböző paramétere lehet, de mindegyik paraméternek csak egyetlen értéke lehet. Ez segít megakadályozni a hardverkódolás értékeit a szkriptben. Ez újrafelhasználhatóvá teszi a kódot. Gondoljon arra, mint a szkript konfigurációs fájljaira. Ha egy paraméterhez több értéket szeretne használni, használja a DataProviders alkalmazást

Adatszolgáltató a TestNG-ben

A TestNG adatszolgáltatója egy olyan módszer, amelyet akkor használnak, amikor a felhasználónak összetett paramétereket kell átadnia . Komplex paramétereket kell létrehozni a Java-ból, például összetett objektumok, tulajdonságfájlokból vagy adatbázisból származó objektumok átadhatók az adatszolgáltató módszerével. A metódust a @DataProvider kommentálja, és objektumtömböt ad vissza.

Paraméterek a Dataprovider segítségével

A @Parameters kommentár egyszerű, de több adatsorral történő teszteléshez az adatszolgáltatót kell használnunk.

Több ezer webes űrlap kitöltéséhez tesztelési keretrendszerünkre más módszertanra van szükségünk, amely nagyon nagy adatkészletet adhat nekünk egyetlen végrehajtási folyamatban.

Ezt az adatvezérelt koncepciót a TestNG @DataProvider annotációjával érjük el .

Csak egy „name” attribútummal rendelkezik . Ha nem adja meg a name attribútumot, akkor a DataProvider neve megegyezik a megfelelő metódus nevével.

Az adatszolgáltató kétdimenziós JAVA-objektumot ad vissza a vizsgálati módszerhez és a vizsgálati módszerhez, és M-idõt hív meg egy M * N típusú objektumtömbben. Például, ha a DataProvider egy 2 * 3 objektumból álló tömböt ad vissza, akkor a megfelelő tesztház 2-szer meghívásra kerül, minden alkalommal 3 paraméterrel.

Teljes példa

csomag paraméterek;importálja a java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations.BeforeTest;import org.testng.annotations.DataProvider;import org.testng.annotations.Test;public class ParameterByDataprovider {WebDriver illesztőprogram;String driverPath = "C: \\ geckodriver.exe";@BeforeTestpublic void setup () {// Firefox meghajtó objektum létrehozásaSystem.setProperty ("webdriver.gecko.driver", driverPath);illesztőprogram = new FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");}/ ** Teszteset a Google keresőmezőjének ellenőrzéséhez* @param szerző* @param searchKey* @throws InterruptedException* /@Test (dataProvider = "SearchProvider")public void testMethod (karakterlánc-készítő, String searchKey) dobja az InterruptedException {{WebElement searchText = driver.findElement (By.name ("q"));// keresési érték a google keresőmezőbensearchText.sendKeys (searchKey);System.out.println ("Üdvözöljük ->" + szerző + "A keresési kulcs ->" + searchKey);Szál.alszik (3000);String testValue = searchText.getAttribute ("érték");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// Ellenőrizze, hogy a google keresőmezőben megadott érték helyes-eAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}/ *** @return Object [] [] ahol az első oszlopban szerepel a „szerző”* és a második oszlop tartalmazza a 'searchKey' szót* /@DataProvider (név = "SearchProvider")public Object [] [] getDataFromDataprovider () {új objektum visszaküldése [] []{{"Guru99", "India"},{"Krishna", "UK"},{"Bhupesh", "USA"}};}}

Hívja meg a DataProvider alkalmazást más osztályból

Alapértelmezés szerint a DataProvider ugyanabban az osztályban tartózkodik, ahol a vizsgálati módszer, vagy annak alaposztálya. Ahhoz, hogy valamilyen más osztályba soroljuk , statikusként kell elkészítenünk az adatszolgáltató módszert, a teszt módszerben pedig hozzá kell adnunk a dataToviderClass attribútumot a @Test kommentárhoz.

Kódpélda

TestClass ParameterDataproviderWithClassLevel.java

csomag paraméterek;importálja a java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations.BeforeTest;import org.testng.annotations.Test;public class ParameterDataproviderWithClassLevel {WebDriver illesztőprogram;String driverPath = "C: \\ geckodriver.exe";@BeforeTestpublic void setup () {System.setProperty ("webdriver.gecko.driver", driverPath);illesztőprogram = new FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");}@Test (dataProvider = "SearchProvider", dataProviderClass = DataproviderClass.class)public void testMethod (karakterlánc-készítő, String searchKey) dobja az InterruptedException {WebElement searchText = driver.findElement (By.name ("q"));// Szöveg keresése a google szövegmezőbensearchText.sendKeys (searchKey);System.out.println ("Üdvözöljük ->" + szerző + "A keresési kulcs ->" + searchKey);Szál.alszik (3000);// szöveg beolvasása a keresőmezőbőlString testValue = searchText.getAttribute ("érték");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// ellenőrizze, hogy a keresőmezőnek van-e helyes értékeAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}

DataproviderClass.java

csomag paraméterek;import org.testng.annotations.DataProvider;public class DataproviderClass {@DataProvider (név = "SearchProvider")public static Object [] [] getDataFromDataprovider () {return new Object [] [] {{"Guru99", "India"},{"Krishna", "UK"},{"Bhupesh", "USA"}};}}

Paraméterek típusai a Dataprovider programban

A DataProvider módszer kétféle paramétert támogat.

Módszer - Ha a SAME DataProvider-nek másként kell viselkednie a különböző vizsgálati módszerekkel, használja a Method paramétert.

A következő példában

  • Ellenőrizzük, hogy a módszer neve testMethodA.
  • Ha igen, adjon vissza egy értékkészletet
  • Egyébként adjon vissza egy másik értékkészletet
csomag paraméterek;import java.lang.reflect.Method;importálja a java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;import org.testng.annotations.BeforeTest;import org.testng.annotations.DataProvider;import org.testng.annotations.Test;public class ParameterByMethodInDataprovider {WebDriver illesztőprogram;String driverPath = "C: \\ geckodriver.exe";@BeforeTestpublic void setup () {System.setProperty ("webdriver.gecko.driver", driverPath);illesztőprogram = new FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");}@Test (dataProvider = "SearchProvider")public void testMethodA (karakterlánc-író, String searchKey) dobja az InterruptedException {WebElement searchText = driver.findElement (By.name ("q"));// Szöveg keresése a keresőmezőbensearchText.sendKeys (searchKey);// Szerző és keresési karakterlánc nyomtatásaSystem.out.println ("Üdvözöljük ->" + szerző + "A keresési kulcs ->" + searchKey);Szál.alszik (3000);String testValue = searchText.getAttribute ("érték");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// Ellenőrizze, hogy a google szövegmező helyes értéket mutat-eAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}@Test (dataProvider = "SearchProvider")public void testMethodB (String searchKey) dobja az InterruptedException {{WebElement searchText = driver.findElement (By.name ("q"));// Szöveg keresése a keresőmezőbensearchText.sendKeys (searchKey);// Csak a keresési karakterlánc nyomtatásaSystem.out.println ("Üdvözöljük -> Ismeretlen felhasználó A keresési kulcs ->" + searchKey);Szál.alszik (3000);String testValue = searchText.getAttribute ("érték");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// Ellenőrizze, hogy a google szövegmező helyes értéket mutat-eAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}/ *** Itt a DataProvider visszatérő értéke a vizsgálati módszer neve alapján* @param m* @Visszatérés** /@DataProvider (név = "SearchProvider")public Object [] [] getDataFromDataprovider (m módszer) {if (m.getName (). equalsIgnoreCase ("testMethodA")) {return new Object [] [] {{"Guru99", "India"},{"Krishna", "UK"},{"Bhupesh", "USA"}};}más{return new Object [] [] {{"Kanada"},{ "Oroszország" },{"Japán"}};}}}

Itt van a kimenet

ITestContext - Segítségével különböző paraméterek hozhatók létre a tesztesetekhez csoportok alapján.

A való életben az ITestContext segítségével megváltoztathatja a paraméterértékeket a tesztmódszerek, a gazdagépek és a teszt konfigurációi alapján.

Az alábbi kód példában

  • 2 A és B csoportunk van
  • Minden vizsgálati módszer egy csoporthoz van rendelve
  • Ha a csoport értéke A, akkor egy adott adathalmaz kerül visszaadásra
  • Ha a csoport értéke B, akkor egy másik adathalmaz kerül visszaadásra
csomag paraméterek;importálja a java.util.concurrent.TimeUnit;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import 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;public class ParameterByITestContextInDataprovider {WebDriver illesztőprogram;String driverPath = "C: \\ geckodriver.exe";@BeforeTest (csoportok = {"A", "B"})public void setup () {System.setProperty ("webdriver.gecko.driver", driverPath);illesztőprogram = new FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");}@Test (dataProvider = "SearchProvider", csoportok = "A")public void testMethodA (karakterlánc-író, String searchKey) dobja az InterruptedException {{// keresés a google szövegmezőbenWebElement searchText = driver.findElement (By.name ("q"));// keres egy értéket rajtasearchText.sendKeys (searchKey);System.out.println ("Üdvözöljük ->" + szerző + "A keresési kulcs ->" + searchKey);Szál.alszik (3000);String testValue = searchText.getAttribute ("érték");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// ellenőrizze a helyes értéket a keresőmezőbenAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}@Test (dataProvider = "SearchProvider", csoportok = "B")public void testMethodB (String searchKey) dobja az InterruptedException {{// google keresőmező kereséseWebElement searchText = driver.findElement (By.name ("q"));// keres egy értéket rajtasearchText.sendKeys (searchKey);System.out.println ("Üdvözöljük -> Ismeretlen felhasználó A keresési kulcs ->" + searchKey);Szál.alszik (3000);String testValue = searchText.getAttribute ("érték");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// ellenőrizze a helyes értéket a keresőmezőbenAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}/ *** Itt a DAtaProvider biztosítja az Object tömböt az ITestContext alapján* @param c* @Visszatérés* /@DataProvider (név = "SearchProvider")public Object [] [] getDataFromDataprovider (ITestContext c) {Objektum [] [] groupArray = null;for (String group: c.getIncludedGroups ()) {if (group.equalsIgnoreCase ("A")) {groupArray = új objektum [] [] {{"Guru99", "India"},{"Krishna", "UK"},{"Bhupesh", "USA"}};szünet;}else if (group.equalsIgnoreCase ("B")){groupArray = új objektum [] [] {{"Kanada"},{ "Oroszország" },{"Japán"}};}szünet;}return groupArray;}}

Megjegyzés: Ha közvetlenül futtatja a testng osztályt, akkor először felhívja az dataprovider szolgáltatót, amely nem tud információkat szerezni a csoportokról, mivel a csoportok nem állnak rendelkezésre. De ehelyett, ha ezt az osztályt a testng.xml fájlon keresztül hívja, akkor az ITestContext alkalmazással elérhető csoportinformációk állnak rendelkezésre. A teszt meghívásához használja a következő XML-t

Összegzés :

  • Paraméterekre van szükség az adatközpontú tesztelés létrehozásához .
  • A TestNG kétféle paraméterezést támogat, a @ Parameter + TestNG.xml és a @DataProvider használatával
  • A @ Parameter + TestNG.xml fájlban a paraméterek a készlet és a teszt szintjén helyezhetők el. Ha

    Ugyanaz a paraméter neve van deklarálva mindkét helyen; a tesztszint paraméter előnyben részesíti az öltönyszintű paramétert.

  • A @ Parameter + TestNG.xml használatával egyszerre csak egy érték állítható be, de a @DataProvider visszaadja az objektum 2d tömbjét .
  • Ha dataProvider jelen van a különböző típusú, akkor az osztály, ahol a vizsgálati módszer lakik, dataProvider legyen statikus módszer .
  • A DataProvider két paramétert támogat: a Method és az ITestContext.