Dataprovider & TestNG XML: parameetrite määramine seleenis (näide)

Lang L: none (table-of-contents):

Anonim

Tarkvara luues soovime alati, et see töötaks erineva andmekogumiga erinevalt. Sama tarkvara katsetamise osas ei saa me olla ebaõiglased, kui testime seda vaid ühe andmekogumiga. Siinkohal peame jällegi kontrollima, kas meie süsteem kasutab kõiki eeldatavalt toetatavaid kombinatsioone. Selleks peame oma testiskriptid parameetrid määrama. Siit tuleb pildil parameetrid.

Parameetrite määramine seleenis

Parameetrite määramine seleenis on testskriptide parameetrite määramise protsess, et rakendusele käitusajal mitu teavet edastada. See on täitmisstrateegia, mis käivitab testjuhtumeid automaatselt mitu korda, kasutades erinevaid väärtusi. Testskriptide parameetrite abil saavutatud kontseptsiooni nimetatakse andmepõhiseks testimiseks .

Selles õpetuses saate teada

  • Parameetrite tüüp testNG-
  • Parameetrite annotatsioon failiga Testng.xml
  • Tõrkeotsing
  • Parameetrid Dataprovideri abil
  • Kutsuge DataProvider erinevat klassi
  • Parameetrite tüübid Dataprovideris

Parameetrite tüüp testNG-

Parameetrite selgemaks muutmiseks vaatame parameetrite valikud läbi Seleeni veebidraiveri kõige populaarsema raamistiku - TestNG .

On kaks võimalust , mille abil saame saavutada parameterization sisse TestNG

  1. Tänu parameetrid annotatsioon ja TestNG XML -faili.

  2. Tänu DataProvider märkuse.

Parameetrid saidilt Testng.xml võivad olla komplekti või testi tasemed

DataProvideri parameeter võib parameetriks võtta meetodi ja ITestContext.

Uurime neid üksikasjalikult -

Parameetrite märkus TestNG-s

Parameetrid Annotation in TestNG on meetod, mida kasutatakse väärtuste edastamiseks testimeetoditena argumentidena .xml-faili abil. Kasutajatelt võidakse nõuda väärtuste edastamist katsemeetoditele töötamise ajal. Annotatsioonimeetodit @Parameters saab kasutada mis tahes meetodis, millel on märkused @Test, @Before, @After või @Factory.

Parameetrite annotatsioon failiga Testng.xml

Valige parameetrid märkuste abil, kui soovite siiski keerukusega tegeleda ja sisendkombinatsioonide arv on väiksem.

Vaatame, kuidas see töötab

Testi stsenaarium

1. samm. Käivitage brauser ja minge saidile Google.com

2. samm. Sisestage otsingu märksõna

3. samm. Veenduge, et sisestatud väärtus oleks sama, mis meie testandmetel

Samm 4) Korrake punkte 2 ja 3, kuni kõik väärtused on sisestatud

Katse autor Otsinguklahv
Guru99 India
Krishna USA
Bhupesh Hiina

Siin on näide, kuidas seda teha ilma parameetriteta

paketi parameetrid;import org.testng.annotations.Test;import org.testng.AssertJUnit;import 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;avalik klass NoParameterWithTestNGXML {String driverPath = "C: \\ geckodriver.exe";WebDriveri draiver;@Testpublic void testNoParameter () viskab InterruptedException {Stringi autor = "guru99";String searchKey = "india";System.setProperty ("webdriver.gecko.driver", driverPath);draiver = uus FirefoxDriver ();driver.manage (). timeout (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");WebElement searchText = driver.findElement (By.name ("q"));// Google'i tekstikastist teksti otsiminesearchText.sendKeys (searchKey);System.out.println ("Welcome ->" + autor + "Teie otsinguklahv on ->" + searchKey);System.out.println ("Niit magab nüüd");Niit.unne (3000);System.out.println ("Väärtus Google'i otsingukastis =" + searchText.getAttribute ("value") + "::: input =" + searchKey antud väärtus);// väärtuse kontrollimine Google'i otsingukastisAssertJUnit.assertTrue (searchText.getAttribute ("väärtus"). EqualsIgnoreCase (searchKey));}}

Uuring, ülaltoodud näide. Kujutage vaid ette, kui keeruliseks muutub kood, kui teeme seda kolme sisendkombinatsiooni jaoks

Parameetriseerime seda nüüd TestNG abil

Selleks peate seda tegema

  • Looge XML-fail, mis salvestab parameetrid
  • Lisage testis märkused @Parameters

Siin on täielik kood

Testi tase TestNG.xml




ParameterWithTestNGXML.java fail

paketi parameetrid;import org.testng.AssertJUnit;import 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.nototations.Valikuline;import org.testng.annotations.Parameetrid;import org.testng.annotations.Test;avaliku klassi ParameterWithTestNGXML {String driverPath = "C: \\ geckodriver.exe";WebDriveri draiver;@Test@Parameters ({"autor", "otsinguklahv"})public void testParameterWithXML (@Optional ("Abc") Stringi autor, String searchKey) viskab InterruptedException {System.setProperty ("webdriver.gecko.driver", driverPath);draiver = uus FirefoxDriver ();driver.manage (). timeout (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");WebElement searchText = driver.findElement (By.name ("q"));// Google'i tekstikastist teksti otsiminesearchText.sendKeys (searchKey);System.out.println ("Welcome ->" + autor + "Teie otsinguklahv on ->" + searchKey);System.out.println ("Niit magab nüüd");Niit.unne (3000);System.out.println ("Väärtus Google'i otsingukastis =" + searchText.getAttribute ("value") + "::: input =" + searchKey antud väärtus);// väärtuse kontrollimine Google'i otsingukastisAssertJUnit.assertTrue (searchText.getAttribute ("väärtus"). EqualsIgnoreCase (searchKey));}}

Juhised skripti käitamiseks, valige XML-fail ja käsk Run as Test NG Suite

Paremklõpsake failil .xml -> Run as -> Testng Suite (märkus: Suite)

Nüüd saab parameetreid määratleda kahel tasandil

  1. Paketi tase - TestNG XML-faili sildi sees olevad parameetrid on komplekti taseme parameetrid.
  2. Test Level - XML-faili testimise sildi sees olevad parameetrid on Test leveli parameetrid.

Siin on sama test komplektitaseme parameetritega

MÄRKUS . Juhul kui parameetri nimi on komplektitasemel ja testtasemel sama, saab testitaseme parameeter paketi taseme asemel eelise. Niisiis jagavad sel juhul kõik sellel testitasemel olevad klassid alistatud parameetrit ja teised klassid, mis jäävad väljapoole testitaset, komplektitaseme parameetrit.

Tõrkeotsing

Väljaanne # 1 Parameetri väärtust failis testng.xml ei saa sisestada vastava katsemeetodi parameetrile, see põhjustab vea.

Vaatleme järgmist näidet

Siin on atribuut „author” võrdne stringiga „Guru99” ja vastavas testimeetodis täisarvu ootusega, seega saame siin erandi.

Väljaanne # 2 Teie @Parameters'il pole testides.xml vastavat väärtust.

Selle olukorra saate lahendada, lisades testimeetodi vastavasse parameetrisse @ valikulise märkuse .

Probleem nr 3: soovite testida sama parameetri mitut väärtust, kasutades testng.xml

Lihtne vastus on see, et seda ei saa teha! Teil võib olla mitu erinevat parameetrit, kuid igal parameetril võib olla ainult üks väärtus. See aitab vältida skripti kõvakodeerimise väärtusi. See muudab koodi korduvkasutatavaks. Mõelge sellele kui oma skripti konfiguratsioonifailidele. Kui soovite parameetri jaoks kasutada mitut väärtust, kasutage rakendust DataProviders

Andmepakkuja testNG-s

Andmepakkuja on TestNG-s meetod, mida kasutatakse juhul, kui kasutaja peab edastama keerukad parameetrid. Keerulised parameetrid tuleb luua Java-st, näiteks keerulised objektid, atribuudid failidest või andmebaasist saab edastada andmekandja meetodil. Meetodi kommenteerib @DataProvider ja see tagastab objektide massiivi.

Parameetrid Dataprovideri abil

@Parameters märkimine on lihtne, kuid mitme andmekogumiga testimiseks peame andmesidepakkujat kasutama.

Tuhandete veebivormide täitmiseks meie testimisraamistiku abil vajame teistsugust metoodikat, mis annab meile ühe täitmisvooga väga suure andmekogumi.

See andmepõhine kontseptsioon saavutatakse testNG-i märkuse @DataProvider abil.

Sellel on ainult üks atribuut 'nimi' . Kui te ei määra atribuuti nimi, on DataProvideri nimi sama mis vastava meetodi nimi.

Andmepakkuja tagastab katsemeetodile ja testimeetodile kahemõõtmelise JAVA-objekti , kutsub M-tüüpi objektimassiivi korral M korda. Näiteks kui DataProvider tagastab 2 * 3 objekti massiivi, kutsutakse vastavat testkasti 2 korda 3 parameetriga iga kord.

Täielik näide

paketi parameetrid;import 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;avaliku klassi ParameterByDataprovider {WebDriveri draiver;String driverPath = "C: \\ geckodriver.exe";@BeforeTestpublic void setup () {// Looge Firefoxi draiveri objektSystem.setProperty ("webdriver.gecko.driver", driverPath);draiver = uus FirefoxDriver ();driver.manage (). timeout (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");}/ ** Google'i otsingukasti kinnitamiseks testjuhtum* @param autor* @param searchKey* @throws InterruptedException* /@Test (dataProvider = "SearchProvider")public void testMethod (stringi autor, String searchKey) viskab InterruptedException {{WebElement searchText = driver.findElement (By.name ("q"));// otsingu väärtus Google'i otsingukastissearchText.sendKeys (searchKey);System.out.println ("Welcome ->" + autor + "Teie otsinguklahv on ->" + searchKey);Niit.unne (3000);String testValue = searchText.getAttribute ("väärtus");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// Kontrollige, kas google'i otsingukasti väärtus on õigeAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}/ *** @return Object [] [] kus esimene veerg sisaldab „autor”* ja teises veerus on 'searchKey'* /@DataProvider (nimi = "SearchProvider")avalik objekt [] [] getDataFromDataprovider () {tagastage uus objekt [] []{{"Guru99", "India"},{"Krishna", "UK"},{"Bhupesh", "USA"}};}}

Kutsuge DataProvider erinevat klassi

Vaikimisi elab DataProvider samas klassis, kus testimismeetod on, või selle baasklassi. Panna see muul klassi peame andmed pakkuja Meetod staatiline ja uurimismeetodi peame lisada atribuut dataProviderClass sisse @Test märkuse.

Koodinäide

TestClass ParameterDataproviderWithClassLevel.java

paketi parameetrid;import 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;avaliku klassi ParameterDataproviderWithClassLevel {WebDriveri draiver;String driverPath = "C: \\ geckodriver.exe";@BeforeTestpublic void setup () {System.setProperty ("webdriver.gecko.driver", driverPath);draiver = uus FirefoxDriver ();driver.manage (). timeout (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");}@Test (dataProvider = "SearchProvider", dataProviderClass = DataproviderClass.class)public void testMethod (stringi autor, String searchKey) viskab InterruptedException {WebElement searchText = driver.findElement (By.name ("q"));// Otsige teksti Google'i tekstikastistsearchText.sendKeys (searchKey);System.out.println ("Welcome ->" + autor + "Teie otsinguklahv on ->" + searchKey);Niit.unne (3000);// saada tekst otsingukastistString testValue = searchText.getAttribute ("väärtus");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// kontrollige, kas otsingukastil on õige väärtusAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}

DataproviderClass.java

paketi parameetrid;import org.testng.annotations.DataProvider;avalik klass DataproviderClass {@DataProvider (nimi = "SearchProvider")avalik staatiline objekt [] [] getDataFromDataprovider () {tagastage uus objekt [] [] {{"Guru99", "India"},{"Krishna", "UK"},{"Bhupesh", "USA"}};}}

Parameetrite tüübid Dataprovideris

DataProvideri meetod toetab kahte tüüpi parameetreid.

Meetod - kui SAME DataProvider peaks erinevate katsemeetoditega käituma erinevalt, kasutage parameetrit Method.

Järgmises näites

  • Kontrollime, kas meetodi nimi on testMethodA.
  • Kui jah, tagastage üks väärtus
  • Muul juhul tagastatakse veel üks väärtus
paketi parameetrid;import java.lang.reflect.Method;import 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;avaliku klassi ParameterByMethodInDataprovider {WebDriveri draiver;String driverPath = "C: \\ geckodriver.exe";@BeforeTestpublic void setup () {System.setProperty ("webdriver.gecko.driver", driverPath);draiver = uus FirefoxDriver ();driver.manage (). timeout (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");}@Test (dataProvider = "SearchProvider")public void testMethodA (stringi autor, String searchKey) viskab InterruptedException {WebElement searchText = driver.findElement (By.name ("q"));// Otsige teksti otsingukastistsearchText.sendKeys (searchKey);// Autori ja otsingu stringi printimineSystem.out.println ("Welcome ->" + autor + "Teie otsinguklahv on ->" + searchKey);Niit.unne (3000);String testValue = searchText.getAttribute ("väärtus");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// Kontrollige, kas google'i tekstiväljal on õige väärtusAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}@Test (dataProvider = "SearchProvider")public void testMethodB (String searchKey) viskab InterruptedException {{WebElement searchText = driver.findElement (By.name ("q"));// Otsige teksti otsingukastistsearchText.sendKeys (searchKey);// Prindi ainult otsing stringSystem.out.println ("Tere tulemast -> Tundmatu kasutaja Teie otsinguklahv on ->" + searchKey);Niit.unne (3000);String testValue = searchText.getAttribute ("väärtus");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// Kontrollige, kas google'i tekstiväljal on õige väärtusAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}/ *** Siin DataProvideri tagastatav väärtus katsemeetodi nime alusel* @param m* @return** /@DataProvider (nimi = "SearchProvider")avalik objekt [] [] getDataFromDataprovider (meetod m) {kui (m.getName (). equalsIgnoreCase ("testMethodA")) {tagastage uus objekt [] [] {{"Guru99", "India"},{"Krishna", "UK"},{"Bhupesh", "USA"}};}veel {tagastage uus objekt [] [] {{"Kanada"},{"Venemaa"},{"Jaapan"}};}}}

Siin on väljund

ITestContext - seda saab kasutada rühmade põhjal testparameetrite jaoks erinevate parameetrite loomiseks.

Reaalses elus saate ITestContextiga muuta parameetriväärtusi, lähtudes testimeetoditest, hostidest ja testi konfiguratsioonidest.

Järgmises koodinäites

  • Meil on 2 rühma A ja B
  • Iga katsemeetod määratakse rühmale
  • Kui rühma väärtus on A, tagastatakse kindel andmekogum
  • Kui rühma väärtus on B, tagastatakse teine ​​andmekogum
paketi parameetrid;import 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 {WebDriveri draiver;String driverPath = "C: \\ geckodriver.exe";@BeforeTest (rühmad = {"A", "B"})public void setup () {System.setProperty ("webdriver.gecko.driver", driverPath);draiver = uus FirefoxDriver ();driver.manage (). timeout (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");}@Test (dataProvider = "SearchProvider", rühmad = "A")public void testMethodA (stringi autor, String searchKey) viskab InterruptedException {{// otsige Google'i tekstikastistWebElement searchText = driver.findElement (By.name ("q"));// otsi sellel väärtustsearchText.sendKeys (searchKey);System.out.println ("Welcome ->" + autor + "Teie otsinguklahv on ->" + searchKey);Niit.unne (3000);String testValue = searchText.getAttribute ("väärtus");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// kontrollige otsingukastis õiget väärtustAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}@Test (dataProvider = "SearchProvider", rühmad = "B")public void testMethodB (String searchKey) viskab InterruptedException {{// google otsingukasti leidmineWebElement searchText = driver.findElement (By.name ("q"));// otsi sellel väärtustsearchText.sendKeys (searchKey);System.out.println ("Tere tulemast -> Tundmatu kasutaja Teie otsinguklahv on ->" + searchKey);Niit.unne (3000);String testValue = searchText.getAttribute ("väärtus");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// kontrollige otsingukastis õiget väärtustAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}/ *** Siin pakub DAtaProvider objekti massiivi ITestContext'i põhjal* @param c* @return* /@DataProvider (nimi = "SearchProvider")avalik objekt [] [] getDataFromDataprovider (ITestContext c) {Objekt [] [] groupArray = null;for (Stringirühm: c.getIncludedGroups ()) {if (group.equalsIgnoreCase ("A")) {groupArray = uus objekt [] [] {{"Guru99", "India"},{"Krishna", "UK"},{"Bhupesh", "USA"}};murda;}else if (group.equalsIgnoreCase ("B")){groupArray = uus objekt [] [] {{"Kanada"},{"Venemaa"},{"Jaapan"}};}murda;}tagastamisgruppArray;}}

Märkus. Kui käivitate otse testng-klassi, helistab see kõigepealt dataproviderile, kes ei saa grupiteavet, kuna rühmad pole saadaval. Selle asemel, kui helistate sellele klassile testng.xml kaudu, on sellel rühmade teave, mis on saadaval ITestContextiga. Testi kutsumiseks kasutage järgmist XML-i

Kokkuvõte :

  • Andmepõhise testimise loomiseks on vaja parameetreid .
  • TestNG toetab kahte tüüpi parameetreid, kasutades @ Parameter + TestNG.xml ja @DataProvider
  • Punktis @ Parameter + TestNG.xml saab parameetrid asetada komplekti ja testide tasemele. Kui

    Mõlemas kohas deklareeritakse sama parameetri nimi; testtaseme parameeter saab eelistuse ülikondtaseme parameetri asemel.

  • Kasutades funktsiooni @ Parameter + TestNG.xml saab korraga määrata ainult ühe väärtuse, kuid @DataProvider tagastab objekti 2d massiivi .
  • Kui DataProvider on olemas erinevas klassis, siis klassis, kus testimismeetod asub, peaks DataProvider olema staatiline meetod .
  • On kaks parameetrit toetab DataProvider on meetod ja ITestContext.