TestNG Урок: Какво представляват анотациите и рамката Selenium
Какво е TestNG?
TestNG е рамка за автоматизирано тестване, в която NG означава „следващо поколение“. TestNG е вдъхновен от JUnit който използва анотациите (@). TestNG преодолява недостатъците на JUnit и е проектиран да прави тестване от край до край лесно.
Използването на TestNG, можете да генерирате подходящ отчет и лесно можете да разберете колко тестови случая са преминали, неуспешни и пропуснати. Можете да изпълните неуспешните тестови случаи отделно.
Например:
- Да предположим, че имате пет тестови случая, един метод е написан за всеки тестов случай (да приемем, че програмата е написана с помощта на основния метод без използване на testNG). Когато стартирате първо тази програма, три метода се изпълняват успешно, а четвъртият метод е неуспешен. След това коригирайте грешките, присъстващи в четвъртия метод, сега искате да стартирате само четвъртия метод, тъй като първите три метода така или иначе се изпълняват успешно. Това не е възможно без използване TestNG.
- - TestNG in Selenium предоставя опция, т.е. testng-failed.xml файл в папка test-output. Ако искате да стартирате само неуспешни тестови случаи, това означава, че стартирате този XML файл. Той ще изпълнява само неуспешни тестови случаи.
Освен горната концепция, ще научите повече за TestNG, като какви са предимствата на TestNG, как да създавате тестови методи с помощта на @test анотации, как да конвертирате тези класове във файл с пакет за тестване и да ги изпълнявате чрез eclipse, както и от командния ред.
Защо да използвате TestNG с Selenium?
По подразбиране Selenium тестовете не генерират подходящ формат за резултатите от теста. Използване TestNG in Selenium, можем да генерираме резултати от тестове.
мост Selenium потребителите използват това повече от Джунит заради своите предимства. Има толкова много характеристики на TestNG, но ще се съсредоточим само върху най-важните, които можем да използваме в Selenium. Следват основните характеристики на Selenium TestNG:
- Генерирайте отчета в правилен формат, включително брой изпълнения на тестови случаи, броя на издържаните тестови случаи, броя на неуспешните тестови случаи и броя на пропуснатите тестови случаи.
- Множество тестови случаи могат да бъдат групирани по-лесно, като ги конвертирате във файл testng.xml. В който можете да зададете приоритети кой тестов случай трябва да се изпълни първи.
- Един и същи тестов случай може да бъде изпълнен многократно без цикли само чрез използване на ключова дума, наречена „брой на извикванията“.
- Използвайки testng, можете да изпълните множество тестови случаи на множество браузъри, т.е тестване на браузър.
- - TestNG рамката може лесно да се интегрира с инструменти като TestNG Мейвън, Дженкинс и др.
- Анотациите, използвани при тестването, са много лесни за разбиране, например: @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest
- WebDriver няма собствен механизъм за генериране на отчети. TestNG може да генерира отчета в четим формат като този, показан по-долу.
- TestNG опростява начина на кодиране на тестовете. Вече няма нужда от статичен основен метод в нашите тестове. Последователността на действията се регулира от лесни за разбиране анотации, които не изискват методите да бъдат статични.
- Неуловените изключения се обработват автоматично от TestNG без преждевременно прекратяване на теста. Тези изключения се докладват като неуспешни стъпки в отчета.
Предимства на TestNG над JUnit
Има три основни предимства на TestNG над JUnit:
- Анотациите са по-лесни за разбиране
- Тестовите случаи могат да бъдат групирани по-лесно
- Възможно е паралелно тестване
В какво е анотацията TestNG?
Анотации в TestNG са редове код, които могат да контролират как ще бъде изпълнен методът под тях. Те винаги се предхождат от символа @. Много рано и бързо TestNG Примерът е показаният по-долу.
Анотациите ще бъдат обсъдени по-късно в раздела, наречен „Анотации, използвани в TestNG”, така че е напълно добре, ако не разбирате горното TestNG Пример още. Засега е важно да се отбележи, че анотациите в TestNG са по-лесни за кодиране и разбиране, отколкото в JUnit.
Възможността за паралелно провеждане на тестове е налична в TestNG но не и в JUnit, Така че TestNG рамката е по-предпочитана за използване от тестери Selenium Решетка.
Как да пишете тестови случаи в TestNG?
Стъпка 1) Напишете вашата бизнес логика и вмъкнете TestNG анотации във вашия код.
Стъпка 2) Добавете още информация като име на клас, име на групи, име на пакет и др
Стъпка 3) Стартирайте TestNG.
Създайте тестов случай с помощта на TestNG Анотации
Сега ще научим как да създадем нашия първи тестов случай с помощта на TestNG Анотации в Selenium:
Преди да създадем тестов случай, първо трябва да настроим нов TestNG Проектирайте в Eclipse и го наименувайте като „ПървоTestNGПроект”.
Създаване на нов TestNG Проект
Стъпка 1: Щракнете върху Файл > Нов > Java Проект
Стъпка 2: Въведете „ПървоTestNGПроект“ като име на проекта, след което щракнете върху Напред.
Стъпка 3: Сега ще започнем да импортираме TestNG Библиотеки към нашия проект. Кликнете върху раздела „Библиотеки“ и след това върху „Добавяне на библиотека…“
Стъпка 4: В диалоговия прозорец за добавяне на библиотека изберете „TestNG”И щракнете върху Напред.
Стъпка 5: Кликнете върху Готово.
Трябва да забележите това TestNG е включен в списъка с библиотеки.
Стъпка 6: Сега ще добавим JAR файловете, които съдържат Selenium API. Тези файлове се намират в Java клиентски драйвер, от който сме изтеглили https://www.selenium.dev/downloads/ когато инсталирахме Selenium намлява Eclipse в предишните глави.
След това отидете до мястото, където сте поставили Selenium JAR файлове.
След като добавите външните JAR, вашият екран трябва да изглежда така.
Стъпка 7: Щракнете върху Готово и проверете дали нашият FirstTestNGПроектът се вижда на EclipseПрозорец на Package Explorer.
Как да създадете нов TestNG Тестови файл
Сега, когато приключихме с настройването на нашия проект в това TestNG урок, нека създадем нов TestNG файл.
Стъпка 1: Кликнете върху „src“ и изберете друго.
Щракнете с десния бутон върху папката на пакета „src“, след което изберете New > Other…
Стъпка 2: Изберете TestNG клас.
Кликнете върху TestNG папка и изберете „TestNG клас” опция. Щракнете Напред.
Стъпка 3: Въведете стойностите.
Въведете посочените по-долу стойности в съответните полета за въвеждане и щракнете върху Готово. Забележете, че ние наименувахме нашите Java файл като „ПървоTestNGФайл”.
Стъпка 4: Шаблонът е създаден.
Eclipse трябва автоматично да създаде шаблона за нашия TestNG файл, показан по-долу.
Кодиране на нашия Първи TestNG Пример за тестов случай
Нека сега създадем нашия първи Тестов случай който ще провери дали Mercury Началната страница на Tours е правилна. Въведете вашия код, както е показано по-долу TestNG Пример:
package firsttestngpackage; import org.openqa.selenium.*; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.*; public class firsttestngfile { public String baseUrl = "http://demo.guru99.com/test/newtours/"; String driverPath = "C:\\geckodriver.exe"; public WebDriver driver ; @Test public void verifyHomepageTitle() { System.out.println("launching firefox browser"); System.setProperty("webdriver.gecko.driver", driverPath); driver = new FirefoxDriver(); driver.get(baseUrl); String expectedTitle = "Welcome: Mercury Tours"; String actualTitle = driver.getTitle(); Assert.assertEquals(actualTitle, expectedTitle); driver.close(); } }
Забележете следното.
- TestNG не изисква да имате метод main().
- Методите не трябва да са статични.
- Използвахме анотацията @Test. @Test се използва, за да се каже, че методът под него е тестов случай. В този случай сме задали метода verifyHomepageTitle() да бъде нашия тестов случай, така че поставихме анотация „@Test“ над него.
- Тъй като използваме анотации в TestNG, трябваше да импортираме пакета org.testng.annotations.*.
- Използвахме класа Assert. Класът Assert се използва за извършване на операции за проверка в TestNG. За да го използваме, трябва да импортираме пакета org.testng.Assert.
Може да имате множество тестови случаи (следователно множество @Test анотации) в един TestNG файл. Това ще бъде разгледано по-подробно по-късно в раздела „Анотации, използвани в TestNG"
Изпълнение на теста
За да стартирате теста, просто стартирайте файла Eclipse както обикновено правите. Eclipse ще предостави два изхода – единият в прозореца на конзолата, а другият в TestNG Прозорец с резултати.
Проверка на отчетите, създадени от TestNG
Прозорецът на конзолата в Eclipse дава текстов отчет за резултатите от нашия тестов случай, докато TestNG Прозорецът с резултати ни дава графичен.
Генериране на HTML отчети
TestNG има възможност за генериране на отчети в HTML формат.
Стъпка 1: След като изпълнихме нашия FirstTestNGФайл, който създадохме в предишния раздел, щракнете с десния бутон върху името на проекта (ПървоTestNGProject) в прозореца Project Explorer, след което щракнете върху опцията „Refresh“.
Стъпка 2: Забележете, че е създадена папка „test-output“. Разгънете го и потърсете файл index.html. Този HTML файл е отчет за резултатите от последния тест.
Стъпка 3: Double-щракнете върху този файл index.html, за да го отворите Eclipseвграден уеб браузър. Можете да опресните тази страница по всяко време, след като повторите теста си, като просто натиснете F5 точно както в обикновените уеб браузъри.
Анотациите, използвани в TestNG
В предишния раздел се запознахте с анотацията @Test. Сега ще изучаваме по-напреднали анотации и техните употреби.
Множество тестови случаи
Можем да използваме няколко анотации @Test в една TestNG файл. По подразбиране методите, анотирани от @Test, се изпълняват по азбучен ред. Вижте кода по-долу. Въпреки че методите c_test, a_test и b_test не са подредени по азбучен ред в кода, те ще бъдат изпълнени като такива.
Стартирайте този код и на генерираната страница index.html щракнете върху „Хронологичен изглед“.
параметри
Ако искате методите да се изпълняват в различен ред, използвайте параметъра “приоритет”. Параметрите са ключови думи, които променят функцията на анотацията.
- Параметрите изискват да им присвоите стойност. Вие правите това, като поставите „=“ до тях и след това последвано от стойността.
- Параметрите са оградени в двойка скоби, които се поставят точно след анотацията като кодовия фрагмент, показан по-долу.
TestNG ще изпълни анотацията @Test с най-ниската стойност на приоритет до най-голямата. Няма нужда вашите приоритетни стойности да са последователни.
- TestNG HTML отчетът ще потвърди, че методите са били изпълнени въз основа на възходящата стойност на приоритета.
Множество параметри
Освен „приоритет“, @Test има друг параметър, наречен „alwaysRun“, който може да бъде зададен само на „true“ или „false“. За да използвате два или повече параметъра в една анотация, разделете ги със запетая като показаното по-долу.
@Test(priority = 0, alwaysRun = true)
@BeforeTest и @AfterTest
@BeforeTest | ще бъдат изпълнени методи под тази анотация преди първия тестов случай в TestNG досие. |
@AfterTest | ще бъдат изпълнени методи под тази анотация след всички тестови случаи в TestNG файл се изпълняват. |
Разгледайте кода по-долу.
package firsttestngpackage; import org.openqa.selenium.*; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.*; public class firsttestngfile { public String baseUrl = "http://demo.guru99.com/test/newtours/"; String driverPath = "C:\\geckodriver.exe"; public WebDriver driver ; @BeforeTest public void launchBrowser() { System.out.println("launching firefox browser"); System.setProperty("webdriver.gecko.driver", driverPath); driver = new FirefoxDriver(); driver.get(baseUrl); } @Test public void verifyHomepageTitle() { String expectedTitle = "Welcome: Mercury Tours"; String actualTitle = driver.getTitle(); Assert.assertEquals(actualTitle, expectedTitle); } @AfterTest public void terminateBrowser(){ driver.close(); } }
Прилагайки логиката, представена от таблицата и кода по-горе, можем да предвидим, че последователността, чрез която методите ще бъдат изпълнени, е:
- 1st – стартиране на браузъра ()
- 2nd – verifyHomepageTitle()
- 3rd – terminateBrowser()
Поставянето на анотационните блокове може да се сменя, без да се засяга хронологичният ред, по който те ще бъдат изпълнени. Да разберем с a TestNG Пример и се опитайте да пренаредите блоковете с анотации така, че вашият код да изглежда подобно на този по-долу.
package firsttestngpackage; import org.openqa.selenium.*; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.*; public class firsttestngfile { public String baseUrl = "http://demo.guru99.com/test/newtours/"; String driverPath = "C:\\geckodriver.exe"; public WebDriver driver ; @AfterTest //Jumbled public void terminateBrowser(){ driver.close(); } @BeforeTest //Jumbled public void launchBrowser() { System.out.println("launching firefox browser"); System.setProperty("webdriver.gecko.driver", driverPath); driver = new FirefoxDriver(); driver.get(baseUrl); } @Test //Jumbled public void verifyHomepageTitle() { String expectedTitle = "Welcome: Mercury Tours"; String actualTitle = driver.getTitle(); Assert.assertEquals(actualTitle, expectedTitle); } }
Изпълнете горния код и забележете това
@BeforeMethod и @AfterMethod
@BeforeMethod | ще бъдат изпълнени методи под тази анотация преди всеки метод във всеки тестов случай. |
@AfterMethod | ще бъдат изпълнени методи под тази анотация след всеки метод във всеки тестов случай. |
In Mercury Обиколки, да предположим, че искаме да проверим заглавията на целевите страници на двете връзки по-долу.
Потокът на нашия тест ще бъде:
- Отидете на началната страница и проверете нейното заглавие.
- Щракнете върху РЕГИСТРАЦИЯ и проверете заглавието на целевата страница.
- Върнете се на началната страница и проверете дали все още има правилното заглавие.
- Щракнете върху ПОДДРЪЖКА и проверете заглавието на целевата страница.
- Върнете се на началната страница и проверете дали все още има правилното заглавие.
Кодът по-долу илюстрира как @BeforeMethod и @AfterMethod се използват за ефективно изпълнение на сценария, споменат по-горе.
package firsttestngpackage; import org.openqa.selenium.*; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.*; @Test public class firsttestngfile { public String baseUrl = "http://demo.guru99.com/test/newtours/"; String driverPath = "C:\\geckodriver.exe"; public WebDriver driver; public String expected = null; public String actual = null; @BeforeTest public void launchBrowser() { System.out.println("launching firefox browser"); System.setProperty("webdriver.gecko.driver", driverPath); driver= new FirefoxDriver(); driver.get(baseUrl); } @BeforeMethod public void verifyHomepageTitle() { String expectedTitle = "Welcome: Mercury Tours"; String actualTitle = driver.getTitle(); Assert.assertEquals(actualTitle, expectedTitle); } @Test(priority = 0) public void register(){ driver.findElement(By.linkText("REGISTER")).click() ; expected = "Register: Mercury Tours"; actual = driver.getTitle(); Assert.assertEquals(actual, expected); } @Test(priority = 1) public void support() { driver.findElement(By.linkText("SUPPORT")).click() ; expected = "Under Construction: Mercury Tours"; actual = driver.getTitle(); Assert.assertEquals(actual, expected); } @AfterMethod public void goBackToHomepage ( ) { driver.findElement(By.linkText("Home")).click() ; } @AfterTest public void terminateBrowser(){ driver.close(); } }
След като извършите този тест, вашият TestNG трябва да съобщи следната последователност.
Просто казано, @BeforeMethod трябва да съдържа методи, които трябва да изпълните преди всеки тестов случай, докато @AfterMethod трябва да съдържа методи, които трябва да изпълните след всеки тестов случай.
Резюме на TestNG Анотации
@BeforeSuite: Анотираният метод ще бъде изпълнен преди всички тестове в този пакет да са изпълнени.
@AfterSuite: Анотираният метод ще бъде изпълнен, след като всички тестове в този пакет са изпълнени.
@BeforeTest: Анотираният метод ще се изпълни, преди да се изпълни който и да е тестов метод, принадлежащ към класовете в тага.
@AfterTest: Анотираният метод ще се изпълни, след като се изпълнят всички тестови методи, принадлежащи към класовете вътре в етикета.
@BeforeGroups: Списъкът с групи, които този метод за конфигуриране ще изпълнява преди. Гарантирано е, че този метод ще се изпълнява малко преди да бъде извикан първият тестов метод, който принадлежи към някоя от тези групи.
@AfterGroups: Списъкът с групи, след които ще се изпълнява този метод за конфигуриране. Гарантирано е, че този метод ще се изпълни малко след извикването на последния тестов метод, който принадлежи към някоя от тези групи.
@BeforeClass: Анотираният метод ще бъде изпълнен, преди да бъде извикан първият тестов метод в текущия клас.
@След часовете: Анотираният метод ще бъде изпълнен, след като всички тестови методи в текущия клас бъдат изпълнени.
@BeforeMethod: Анотираният метод ще се изпълнява преди всеки тестов метод.
@AfterMethod: Анотираният метод ще се изпълнява след всеки тестов метод.
@Тест: Анотираният метод е част от тестов случай
Заключение
- TestNG е тестване рамка, която е в състояние да направи Selenium тестове, по-лесни за разбиране и генериране на отчети, които са лесни за разбиране.
- Основните предимства на TestNG над JUnit са следните.
- Анотациите са по-лесни за използване и разбиране.
- Тестовите случаи могат да бъдат групирани по-лесно.
- TestNG ни позволява да създаваме паралелни тестове.
- Прозорецът на конзолата в Eclipse генерира текстов резултат, докато TestNG прозорецът е по-полезен, защото ни дава графичен изход на резултата от теста плюс други значими подробности като:
- Време на изпълнение на всеки метод.
- Хронологичният ред, по който са били изпълнени методите
- TestNG е в състояние да генерира отчети, базирани на HTML.
- Анотациите могат да използват параметри точно както обикновено Java TestNG методи.
- TestNG Dataprovider е начин за предаване на параметри в тестовата функция, която предава различни стойности в тестови случаи в едно изпълнение.