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
- Tänu parameetrid annotatsioon ja TestNG XML -faili.
- 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
xml version = "1.0" encoding = "UTF-8"?>
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
- Paketi tase - TestNG XML-faili sildi
sees olevad parameetrid on komplekti taseme parameetrid. - 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.