Veidojot programmatūru, mēs vienmēr vēlamies, lai tā darbotos savādāk ar citu datu kopu. Runājot par vienas un tās pašas programmatūras testēšanu, mēs nevaram būt negodīgi to pārbaudīt, izmantojot tikai vienu datu kopu. Arī šajā gadījumā mums jāpārbauda, vai mūsu sistēma izmanto visus kombinācijas, kuras, domājams, atbalstīs. Lai to izdarītu, mums ir jāpārparamet testa skripti. Šeit nāk attēlā redzamā parametru noteikšana.
Parametri selēnā
Parametrēšana selēnā ir process, ar kuru tiek parametrizēti testa skripti, lai izpildlaikā lietojumprogrammai nodotu vairākus datus. Tā ir izpildes stratēģija, kas automātiski izpilda testa gadījumus vairākas reizes, izmantojot dažādas vērtības. Koncepciju, kas sasniegta, parametrizējot testa skriptus, sauc par datu vadītu testēšanu .
Šajā apmācībā jūs uzzināsiet
- Parametrizācijas veids TestNG-
- Parametru anotācija ar Testng.xml
- Problēmu novēršana
- Parametri, izmantojot Dataprovider
- Izsaukt DataProvider no citas klases
- Parametru veidi Dataprovider
Parametrizācijas veids TestNG-
Lai padarītu parametrus skaidrākus, mēs veiksim parametrizācijas iespējas vienā populārākajā Selenium Webdriver sistēmā - TestNG .
Ir divi veidi , kā mēs varam sasniegt parametru iestatīšanu TestNG
- Ar parametru anotācijas un TestNG XML faila palīdzību.
- Ar DataProvider anotācijas palīdzību.
Parametri no Testng.xml var būt komplekts vai testa līmenis
DataProvider parametrs var izmantot metodi un ITestContext kā parametru.
Izpētīsim tos detalizēti -
Parametru anotācija TestNG
Parametri TestNG anotācija ir metode, ko izmanto vērtību nodošanai testa metodēm kā argumentiem, izmantojot .xml failu. Lietotājiem var būt nepieciešams nodot vērtības testa metodēm darbības laikā. Anotācijas metodi @Parameters var izmantot jebkurā metodē ar anotāciju @Test, @Before, @After vai @Factory.
Parametru anotācija ar Testng.xml
Atlasiet parametru iestatīšanu, izmantojot piezīmes, kad vēlaties tikt galā ar sarežģītību un ievades kombināciju skaits ir mazāks.
Ļaujiet redzēt, kā tas darbojas
Pārbaudes scenārijs
1. darbība. Palaidiet pārlūku un dodieties uz Google.com
2. solis) Ievadiet meklēšanas atslēgvārdu
3. solis. Pārbaudiet, vai ievadītā vērtība ir tāda pati kā mūsu testa dati
4. solis. Atkārtojiet 2. un 3. punktu, līdz tiek ievadītas visas vērtības
Testa autors | SearchKey |
Guru99 | Indija |
Krišna | ASV |
Bhupesh | Ķīna |
Šeit ir piemērs, kā to izdarīt BEZ parametriem
paketes parametri;importēt org.testng.annotations.Test;importēt org.testng.AssertJUnit;importēt java.util.concurrent.TimeUnit;importēt org.openqa.selenium.By;importēt org.openqa.selenium.WebDriver;importēt org.openqa.selenium.WebElement;importēt org.openqa.selenium.firefox.FirefoxDriver;publiskā klase NoParameterWithTestNGXML {String driverPath = "C: \\ geckodriver.exe";WebDriver draiveris;@Pārbaudepublic void testNoParameter () izmet InterruptedException {Stīgu autors = "guru99";String searchKey = "indija";System.setProperty ("webdriver.gecko.driver", driverPath);draiveris = jauns FirefoxDriver ();draiveris.manage (). taimauts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");WebElement searchText = driver.findElement (By.name ("q"));// Teksta meklēšana google tekstlodziņāsearchText.sendKeys (searchKey);System.out.println ("Welcome ->" + autors + "Jūsu meklēšanas atslēga ir ->" + searchKey);System.out.println ("Vītne tagad gulēs");Vītne.miegs (3000);System.out.println ("Vērtība Google meklēšanas lodziņā =" + searchText.getAttribute ("value") + "::: Vērtība, ko dod input =" + searchKey);// vērtības pārbaude google meklēšanas lodziņāAssertJUnit.assertTrue (searchText.getAttribute ("vērtība"). EqualsIgnoreCase (searchKey));}}
Pētījums, iepriekš minētais piemērs. Iedomājieties, cik sarežģīts kods kļūs, kad mēs to izdarīsim 3 ievades kombinācijām
Tagad to parametrizēsim, izmantojot TestNG
Lai to izdarītu, jums būs nepieciešams
- Izveidojiet XML failu, kurā tiks saglabāti parametri
- Pārbaudē pievienojiet anotāciju @Parameters
Šeit ir pilns kods
Pārbaudes līmenis TestNG.xml
xml version = "1.0" encoding = "UTF-8"?>
ParameterWithTestNGXML.java fails
paketes parametri;importēt org.testng.AssertJUnit;importēt java.util.concurrent.TimeUnit;importēt org.openqa.selenium.By;importēt org.openqa.selenium.WebDriver;importēt org.openqa.selenium.WebElement;importēt org.openqa.selenium.firefox.FirefoxDriver;importēt org.testng.annotations.Papildu;importēt org.testng.annotations.Parametri;importēt org.testng.annotations.Test;public class ParameterWithTestNGXML {String driverPath = "C: \\ geckodriver.exe";WebDriver draiveris;@Pārbaude@Parameters ({"autors", "searchKey"})public void testParameterWithXML (@Optional ("Abc") virknes autors, String searchKey) met InterruptedException {System.setProperty ("webdriver.gecko.driver", driverPath);draiveris = jauns FirefoxDriver ();draiveris.manage (). taimauts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");WebElement searchText = driver.findElement (By.name ("q"));// Teksta meklēšana google tekstlodziņāsearchText.sendKeys (searchKey);System.out.println ("Welcome ->" + autors + "Jūsu meklēšanas atslēga ir ->" + searchKey);System.out.println ("Vītne tagad gulēs");Vītne.miegs (3000);System.out.println ("Vērtība Google meklēšanas lodziņā =" + searchText.getAttribute ("value") + "::: Vērtība, ko dod input =" + searchKey);// vērtības pārbaude google meklēšanas lodziņāAssertJUnit.assertTrue (searchText.getAttribute ("vērtība"). EqualsIgnoreCase (searchKey));}}
Norādījumi, kā palaist skriptu, atlasiet XML failu un Palaist kā Test NG Suite
Ar peles labo pogu noklikšķiniet uz .xml faila -> Palaist kā -> Testng Suite (Piezīme: Suite)
Tagad parametrus var definēt 2 līmeņos
- Suite līmenis - TestNG XML faila tagā
esošie parametri būs komplekta līmeņa parametri. - Testa līmenis - XML faila pārbaudes tagā
esošie parametri būs Testa līmeņa parametrs.
Šeit ir tas pats tests ar komplekta līmeņa parametriem
PIEZĪME: Ja parametru nosaukums ir vienāds komplekta līmenī un testa līmenī, tad testa līmeņa parametram tiks dota priekšroka salīdzinājumā ar komplekta līmeni. Tātad tādā gadījumā visas klases, kas atrodas šī testa līmenī, koplietos ignorēto parametru, un citas klases, kas atrodas ārpus testa līmeņa, koplietos komplekta līmeņa parametru.
Problēmu novēršana
1. izdevums Parametra vērtību testng.xml nevar uzrakstīt ar attiecīgā testa metodes parametru, tas radīs kļūdu.
Apsveriet šādu piemēru
Šeit atribūts “autors” ir vienāds ar “Guru99”, kas ir virkne, un atbilstošajā testa metodē tā gaida veselu skaitli, tāpēc šeit tiks parādīts izņēmums.
2. izdevums Jūsu parametriem @Parameters nav atbilstošas vērtības testa.xml.
Jūs varat atrisināt šo situāciju, testa metodei attiecīgajā parametrā pievienojot @optional anotāciju .
3. jautājums: Jūs vēlaties pārbaudīt vairākas viena un tā paša parametra vērtības, izmantojot Testng.xml
Vienkārša atbilde ir tāda, ka to nevar izdarīt! Jums var būt vairāki dažādi parametri, taču katram parametram var būt tikai viena vērtība. Tas palīdz novērst skripta kodēšanas vērtības. Tas padara kodu atkārtoti lietojamu. Padomājiet par to kā par skripta konfigurācijas failiem. Ja parametram vēlaties izmantot vairākas vērtības, izmantojiet DataProviders
Datu nodrošinātājs vietnē TestNG
Datu nodrošinātājs TestNG ir metode, ko izmanto, ja lietotājam ir jānodod sarežģīti parametri. Kompleksie parametri ir jāizveido no Java, piemēram, sarežģīti objekti, objektus no īpašuma failiem vai no datu bāzes var pārsūtīt ar datu nodrošinātāja metodi. Metodi anotē @DataProvider, un tā atgriež objektu masīvu.
Parametri, izmantojot Dataprovider
@Parameters anotācija ir vienkārša, taču mums ir jāizmanto datu nodrošinātājs, lai pārbaudītu ar vairākiem datu kopumiem.
Lai aizpildītu tūkstošiem tīmekļa veidlapu, izmantojot mūsu testēšanas sistēmu, mums ir nepieciešama atšķirīga metodika, kas var mums dot ļoti lielu datu kopu vienā izpildes plūsmā.
Šī ar datiem pamatotā koncepcija tiek sasniegta ar @DataProvider anotāciju TestNG.
Tam ir tikai viens atribūts “nosaukums” . Ja nenorādīsit nosaukuma atribūtu, DataProvider nosaukums būs tāds pats kā atbilstošā metodes nosaukums.
Datu nodrošinātājs atgriež divdimensiju JAVA objektu testa metodei un testa metodei, izsauks M reizes objektu masīva M * N tipa. Piemēram, ja DataProvider atgriež 2 * 3 objektu masīvu, atbilstošā testcase katru reizi tiks izsaukta 2 reizes ar 3 parametriem.
Pilnīgs piemērs
paketes parametri;importēt java.util.concurrent.TimeUnit;importēt org.openqa.selenium.By;importēt org.openqa.selenium.WebDriver;importēt org.openqa.selenium.WebElement;importēt org.openqa.selenium.firefox.FirefoxDriver;importēt org.testng.Assert;importēt org.testng.annotations.BeforeTest;importēt org.testng.annotations.DataProvider;importēt org.testng.annotations.Test;public class ParameterByDataprovider {WebDriver draiveris;String driverPath = "C: \\ geckodriver.exe";@BeforeTestpublic void iestatīšana () {// Izveidot Firefox draivera objektuSystem.setProperty ("webdriver.gecko.driver", driverPath);draiveris = jauns FirefoxDriver ();draiveris.manage (). taimauts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");}/ ** Pārbaudes gadījums, lai pārbaudītu Google meklēšanas lodziņu* @param autors* @param searchKey* @throws InterruptedException* /@Test (dataProvider = "SearchProvider")public void testMethod (virknes autors, String searchKey) met InterruptedException {{WebElement searchText = driver.findElement (By.name ("q"));// meklēšanas vērtība google meklēšanas lodziņāsearchText.sendKeys (searchKey);System.out.println ("Welcome ->" + autors + "Jūsu meklēšanas atslēga ir ->" + searchKey);Vītne.miegs (3000);String testValue = searchText.getAttribute ("vērtība");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// Pārbaudiet, vai Google meklēšanas lodziņa vērtība ir pareizaAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}/ *** @return Object [] [] kur pirmajā kolonnā ir “autors”* un otrajā kolonnā ir 'searchKey'* /@DataProvider (name = "SearchProvider")publiskais objekts [] [] getDataFromDataprovider () {atgriezt jaunu objektu [] []{{"Guru99", "Indija"},{"Krišna", "UK"},{"Bhupesh", "ASV"}};}}
Izsaukt DataProvider no citas klases
Pēc noklusējuma DataProvider dzīvo tajā pašā klasē, kur ir testa metode, vai tās bāzes klasē. Lai to kādā citā klasē mums ir nepieciešams, lai padarītu datu sniedzēju metodi, kā statisku un testēšanas metodes, mums ir nepieciešams, lai pievienotu atribūtu dataProviderClass in @Test anotācijā.
Kodu piemērs
TestClass ParameterDataproviderWithClassLevel.java
paketes parametri;importēt java.util.concurrent.TimeUnit;importēt org.openqa.selenium.By;importēt org.openqa.selenium.WebDriver;importēt org.openqa.selenium.WebElement;importēt org.openqa.selenium.firefox.FirefoxDriver;importēt org.testng.Assert;importēt org.testng.annotations.BeforeTest;importēt org.testng.annotations.Test;public class ParameterDataproviderWithClassLevel {WebDriver draiveris;String driverPath = "C: \\ geckodriver.exe";@BeforeTestpublic void iestatīšana () {System.setProperty ("webdriver.gecko.driver", driverPath);draiveris = jauns FirefoxDriver ();draiveris.manage (). taimauts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");}@Test (dataProvider = "SearchProvider", dataProviderClass = DataproviderClass.class)public void testMethod (virknes autors, String searchKey) met InterruptedException {WebElement searchText = driver.findElement (By.name ("q"));// Meklēt tekstu google tekstlodziņāsearchText.sendKeys (searchKey);System.out.println ("Welcome ->" + autors + "Jūsu meklēšanas atslēga ir ->" + searchKey);Vītne.miegs (3000);// iegūt tekstu no meklēšanas lodziņaString testValue = searchText.getAttribute ("vērtība");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// pārbaudiet, vai meklēšanas lodziņam ir pareiza vērtībaAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}
DataproviderClass.java
paketes parametri;importēt org.testng.annotations.DataProvider;publiskā klase DataproviderClass {@DataProvider (name = "SearchProvider")publiskais statiskais objekts [] [] getDataFromDataprovider () {atgriezt jaunu objektu [] [] {{"Guru99", "Indija"},{"Krišna", "UK"},{"Bhupesh", "ASV"}};}}
Parametru veidi Dataprovider
DataProvider metode atbalsta divu veidu parametrus.
Metode - ja SAME DataProvider vajadzētu rīkoties citādi, izmantojot citu testa metodi, izmantojiet metodi parametrs.
Šajā piemērā
- Mēs pārbaudām, vai metodes nosaukums ir testMethodA.
- Ja jā, atgrieziet vienu vērtību kopu
- Citādi atgriež citu vērtību kopu
paketes parametri;importēt java.lang.reflect.Method;importēt java.util.concurrent.TimeUnit;importēt org.openqa.selenium.By;importēt org.openqa.selenium.WebDriver;importēt org.openqa.selenium.WebElement;importēt org.openqa.selenium.firefox.FirefoxDriver;importēt org.testng.Assert;importēt org.testng.annotations.BeforeTest;importēt org.testng.annotations.DataProvider;importēt org.testng.annotations.Test;public class ParameterByMethodInDataprovider {WebDriver draiveris;String driverPath = "C: \\ geckodriver.exe";@BeforeTestpublic void iestatīšana () {System.setProperty ("webdriver.gecko.driver", driverPath);draiveris = jauns FirefoxDriver ();draiveris.manage (). taimauts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");}@Test (dataProvider = "SearchProvider")public void testMethodA (virknes autors, String searchKey) meta InterruptedException {WebElement searchText = driver.findElement (By.name ("q"));// Meklēt tekstu meklēšanas lodziņāsearchText.sendKeys (searchKey);// Drukāt autoru un meklēšanas virkniSystem.out.println ("Welcome ->" + autors + "Jūsu meklēšanas atslēga ir ->" + searchKey);Vītne.miegs (3000);String testValue = searchText.getAttribute ("vērtība");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// Pārbaudiet, vai google tekstlodziņā tiek rādīta pareiza vērtībaAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}@Test (dataProvider = "SearchProvider")public void testMethodB (String searchKey) met InterruptedException {{WebElement searchText = driver.findElement (By.name ("q"));// Meklēt tekstu meklēšanas lodziņāsearchText.sendKeys (searchKey);// Drukāt tikai meklēšanas virkniSystem.out.println ("Welcome -> Nezināms lietotājs Jūsu meklēšanas atslēga ir ->" + searchKey);Vītne.miegs (3000);String testValue = searchText.getAttribute ("vērtība");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// Pārbaudiet, vai google tekstlodziņā tiek rādīta pareiza vērtībaAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}/ *** Šeit DataProvider atgriež vērtību, pamatojoties uz testa metodes nosaukumu* @param m* @return** /@DataProvider (name = "SearchProvider")publiskais objekts [] [] getDataFromDataprovider (m metode) {ja (m.getName (). equalsIgnoreCase ("testMethodA")) {atgriezt jaunu objektu [] [] {{"Guru99", "Indija"},{"Krišna", "UK"},{"Bhupesh", "ASV"}};}cits {atgriezt jaunu objektu [] [] {{"Kanāda"},{ "Krievija" },{"Japāna"}};}}}
Šeit ir izeja
ITestContext - to var izmantot, lai izveidotu dažādus parametrus testa gadījumiem, pamatojoties uz grupām.
Reālajā dzīvē varat izmantot ITestContext, lai mainītu parametru vērtības, pamatojoties uz testa metodēm, resursdatoriem un testa konfigurācijām.
Šajā koda piemērā
- Mums ir 2 grupas A un B
- Katra testa metode tiek piešķirta grupai
- Ja grupas vērtība ir A, tiek atgriezta noteikta datu kopa
- Ja grupas vērtība ir B, tiek atgriezta cita datu kopa
paketes parametri;importēt java.util.concurrent.TimeUnit;importēt org.openqa.selenium.By;importēt org.openqa.selenium.WebDriver;importēt org.openqa.selenium.WebElement;importēt org.openqa.selenium.firefox.FirefoxDriver;importēt org.testng.Assert;importēt org.testng.ITestContext;importēt org.testng.annotations.BeforeTest;importēt org.testng.annotations.DataProvider;importēt org.testng.annotations.Test;public class ParameterByITestContextInDataprovider {WebDriver draiveris;String driverPath = "C: \\ geckodriver.exe";@BeforeTest (grupas = {"A", "B"})public void iestatīšana () {System.setProperty ("webdriver.gecko.driver", driverPath);draiveris = jauns FirefoxDriver ();draiveris.manage (). taimauts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("https://google.com");}@Test (dataProvider = "SearchProvider", grupas = "A")public void testMethodA (virknes autors, String searchKey) meta InterruptedException {{// meklēt google tekstlodziņāWebElement searchText = driver.findElement (By.name ("q"));// meklēt tajā vērtībusearchText.sendKeys (searchKey);System.out.println ("Welcome ->" + autors + "Jūsu meklēšanas atslēga ir ->" + searchKey);Vītne.miegs (3000);String testValue = searchText.getAttribute ("vērtība");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// pārbaudīt pareizo vērtību meklēšanas lodziņāAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}@Test (dataProvider = "SearchProvider", grupas = "B")public void testMethodB (String searchKey) met InterruptedException {{// atrast google meklēšanas lodziņuWebElement searchText = driver.findElement (By.name ("q"));// meklēt tajā vērtībusearchText.sendKeys (searchKey);System.out.println ("Welcome -> Nezināms lietotājs Jūsu meklēšanas atslēga ir ->" + searchKey);Vītne.miegs (3000);String testValue = searchText.getAttribute ("vērtība");System.out.println (testValue + ":::: + searchKey);searchText.clear ();// pārbaudīt pareizo vērtību meklēšanas lodziņāAssert.assertTrue (testValue.equalsIgnoreCase (searchKey));}}/ *** Šeit DAtaProvider nodrošinās objektu masīvu, pamatojoties uz ITestContext* @param c* @return* /@DataProvider (name = "SearchProvider")publiskais objekts [] [] getDataFromDataprovider (ITestContext c) {Objekts [] [] groupArray = null;par (virkņu grupa: c.getIncludedGroups ()) {if (group.equalsIgnoreCase ("A")) {groupArray = jauns objekts [] [] {{"Guru99", "Indija"},{"Krišna", "UK"},{"Bhupesh", "ASV"}};pārtraukums;}cits, ja (group.equalsIgnoreCase ("B")){groupArray = jauns objekts [] [] {{"Kanāda"},{ "Krievija" },{"Japāna"}};}pārtraukums;}atgriešanās grupaAray;}}
Piezīme: Ja jūs tieši vadāt testng klasi, tas vispirms izsauks dataprovider, kurš nevar iegūt informāciju par grupām, jo grupas nav pieejamas. Bet tā vietā, ja jūs zvanīsit šai klasei caur testng.xml, tajā būs pieejama informācija par grupām ar ITestContext. Lai izsauktu testu, izmantojiet šo XML
Kopsavilkums :
- Parametri ir nepieciešami, lai izveidotu ar datiem pamatotu testēšanu .
- TestNG atbalsta divu veidu parametrus, izmantojot @ Parameter + TestNG.xml un izmantojot @DataProvider
- In @ Parameter + TestNG.xml parametriem var novietot vannas līmenī un testa līmenī. Ja
Tas pats parametra nosaukums ir deklarēts abās vietās; testa līmeņa parametrs saņems priekšroku salīdzinājumā ar uzvalka līmeņa parametru.
- Izmantojot @ Parameter + TestNG.xml, vienlaikus var iestatīt tikai vienu vērtību, bet @DataProvider atgriež objekta 2d masīvu .
- Ja DataProvider atrodas dažādās klasēs, tad klasē, kurā atrodas testa metode, DataProvider vajadzētu būt statiskai metodei .
- Ir divas atbalsta parametri DataProvider ir metode un ITestContext.