Урок за TestNG: Какво е, Анотации & Рамка в селен

Съдържание:

Anonim

Какво е TestNG?

TestNG е рамка за тестване на автоматизацията, в която NG означава „Следващо поколение“. TestNG е вдъхновен от JUnit, който използва поясненията (@). TestNG преодолява недостатъците на JUnit и е проектиран да улесни тестването от край до край.

Използвайки TestNG, можете да генерирате правилен отчет и лесно можете да разберете колко тестови случаи са предадени, неуспешни и пропуснати. Можете да изпълнявате неуспешните тестови случаи отделно.

Например:

  • Да предположим, че имате пет тестови случая, за всеки тестов случай е написан един метод (Да приемем, че програмата е написана с помощта на основния метод, без да се използва testNG). Когато стартирате тази програма първо, три метода се изпълняват успешно, а четвъртият метод е неуспешен. След това коригирайте грешките, присъстващи в четвъртия метод, сега искате да стартирате само четвърти метод, тъй като първите три метода така или иначе се изпълняват успешно. Това не е възможно без използване на TestNG.
  • TestNG в Selenium предоставя опция, т.е. testng-failed.xml файл в папка test-output. Ако искате да стартирате само неуспешни тестови случаи, означава, че стартирате този XML файл. Той ще изпълнява само неуспешни тестови случаи.

Освен горепосочената концепция, ще научите повече за TestNG, като какви са предимствата на TestNG, как да създадете тестови методи с помощта на @test анотации, как да конвертирате тези класове във файл за тестови пакети и да изпълните чрез затъмнението, както и от командния ред .

В този урок TestNG ще научите

  • Защо да използвам TestNG със селен?
  • Предимства на TestNG пред JUnit
  • Създайте тестов случай, използвайки анотации на TestNG
  • Как да създам нов файл за изпитване на TestNG
    • Кодиране на нашия първи пример за TestNG Test Case
    • Изпълнение на теста
  • Проверка на отчети, създадени от TestNG
  • Анотации, използвани в TestNG
  • Няколко тестови случая
  • Параметри
    • Множество параметри
    • Обобщение на анотациите на TestNG

Защо да използвам TestNG със селен?

Тестовете по подразбиране за селен не генерират подходящ формат за резултатите от теста. Използвайки TestNG в селен, можем да генерираме резултати от теста.

Повечето потребители на Selenium използват това повече от Junit поради неговите предимства. Има толкова много функции на TestNG, но ние ще се съсредоточим само върху най-важните, които можем да използваме в Selenium. Следват основните характеристики на Selenium TestNG:

  • Генерирайте отчета в подходящ формат, включително брой изпълнения на тестови случаи, брой преминати тестови случаи, брой неуспешни тестови случаи и пропуснати тестови случаи.
  • Множество тестови случаи могат да бъдат групирани по-лесно, като ги конвертирате във файл testng.xml. В който можете да определите приоритети кой тестов случай трябва да бъде изпълнен първо.
  • Същият тестов случай може да бъде изпълнен няколко пъти без цикли, само с помощта на ключова дума, наречена „брой на извикванията“.
  • Използвайки testng, можете да изпълнявате множество тестови случаи в множество браузъри, т.е. кръстосано тестване на браузъра.
  • Рамката TestNG може лесно да се интегрира с инструменти като TestNG Maven, Jenkins и др.
  • Анотациите, използвани при тестването, са много лесни за разбиране например: @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest
  • WebDriver няма собствен механизъм за генериране на отчети. TestNG може да генерира отчета в четим формат като този, показан по-долу.
  • TestNG опростява начина на кодиране на тестовете. Няма повече нужда от статичен основен метод в нашите тестове. Последователността на действията се регулира от лесни за разбиране анотации, които не изискват методите да бъдат статични.
  • Неуловените изключения се обработват автоматично от TestNG, без да прекратяват теста преждевременно. Тези изключения се отчитат като неуспешни стъпки в отчета.

Предимства на TestNG пред JUnit

Има три основни предимства на TestNG пред JUnit:

  • Анотациите са по-лесни за разбиране
  • Тестовите случаи могат да бъдат групирани по-лесно
  • Възможно е паралелно тестване

Анотациите в TestNG са редове с код, които могат да контролират как ще се изпълнява методът под тях . Те винаги се предшестват от символа @. Един много ранен и бърз пример за TestNG е този, показан по-долу.

Анотациите ще бъдат обсъдени по-късно в раздела, наречен „Анотации, използвани в TestNG“, така че е напълно добре, ако все още не разбирате горния пример на TestNG. Засега е важно да се отбележи, че анотациите в TestNG са по-лесни за кодиране и разбиране, отколкото в JUnit.

Възможността за паралелно провеждане на тестове е налична в TestNG, но не и в JUnit, така че рамката TestNG е по-предпочитана от тестерите, използващи Selenium Grid.

Създайте тестов случай, използвайки анотации на TestNG

Сега ще научим как да създадем първия си тестов случай с помощта на TestNG Annotations в Selenium:

Преди да създадем тестов случай, първо трябва да настроим нов проект TestNG в Eclipse и да го наречем "FirstTestNGProject".

Създаване на нов проект TestNG

Стъпка 1: Щракнете върху Файл> Ново> Проект Java

Стъпка 2: Въведете "FirstTestNGProject" като Име на проекта, след което щракнете върху Напред.

Стъпка 3: Сега ще започнем да импортираме библиотеките TestNG в нашия проект. Кликнете върху раздела „Библиотеки“ и след това върху „Добавяне на библиотека“

... "

Стъпка 4: В диалоговия прозорец Добавяне на библиотека изберете "TestNG" и щракнете върху Напред.

Стъпка 5: Щракнете върху Finish.

Трябва да забележите, че TestNG е включен в списъка с библиотеки.

Стъпка 6: Сега ще добавим JAR файловете, които съдържат API на Selenium. Тези файлове се намират в клиентския драйвер на Java, който изтеглихме от http://docs.seleniumhq.org/download/, когато инсталирахме Selenium и Eclipse в предишните глави.

След това отидете до мястото, където сте поставили файловете Selenium JAR.

След добавяне на външни JAR, екранът ви трябва да изглежда така.

Стъпка 7: Щракнете върху Finish и проверете дали нашият FirstTestNGProject е видим в прозореца на Package Explorer на Eclipse.

Как да създам нов файл за изпитване на TestNG

След като приключихме с настройването на нашия проект в този урок TestNG, нека създадем нов файл TestNG.

Стъпка 1: Щракнете с десния бутон на мишката върху папката "src", след което изберете New> Other

...

Стъпка 2: Щракнете върху папката TestNG и изберете опцията "TestNG class". Щракнете върху Напред.

Стъпка 3: Въведете стойностите, посочени по-долу, в съответните полета за въвеждане и щракнете върху Finish. Забележете, че ние нарекохме нашия Java файл като "FirstTestNGFile".

Eclipse трябва автоматично да създаде шаблона за нашия TestNG файл, показан по-долу.

Кодиране на нашия първи пример за TestNG Test Case

Нека сега създадем първия си тестов случай, който ще провери дали началната страница на Mercury Tours е правилна. Въведете кода си, както е показано в примера по-долу TestNG:

пакет firsttestngpackage;внос org.openqa.selenium. *;импортиране на org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;внос org.testng.анотации. *;публичен клас firsttestngfile {публичен низ baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";публичен драйвер на WebDriver;@Тестpublic void verifyHomepageTitle () {System.out.println ("стартиране на браузър Firefox");System.setProperty ("webdriver.gecko.driver", driverPath);драйвер = нов FirefoxDriver ();driver.get (baseUrl);String очакваноTitle = "Добре дошли: Mercury Tours";String actualTitle = driver.getTitle ();Assert.assertEquals (actualTitle, очакваноTitle);driver.close ();}}

Забележете следното.

  • TestNG не изисква да имате метод main ().
  • Методите не трябва да са статични.
  • Използвахме анотацията @Test. @Test се използва, за да каже, че методът под него е тестов случай . В този случай сме задали метода verifyHomepageTitle () да бъде наш тестов случай, така че поставихме над него анотация „@Test“.
  • Тъй като използваме пояснения в TestNG, трябваше да импортираме пакета org.testng.annotations. *.
  • Използвахме класа Assert. Класът Assert се използва за провеждане на операции за проверка в TestNG . За да го използваме, трябва да импортираме пакета org.testng.Assert.

Възможно е да имате множество тестови случаи (следователно, множество @Test пояснения) в един файл TestNG. Това ще бъде разгледано по-подробно по-късно в раздела „Анотации, използвани в TestNG“.

Изпълнение на теста

За да стартирате теста, просто стартирайте файла в Eclipse, както обикновено. Eclipse ще осигури два изхода - един в прозореца на конзолата, а другият в прозореца TestNG Results.

Проверка на отчети, създадени от TestNG

Прозорецът на конзолата в Eclipse дава текстов отчет за резултатите от тестовите ни случаи, докато прозорецът с резултати от TestNG ни дава графичен.

Генериране на HTML отчети

TestNG има способността да генерира отчети в HTML формат.

Стъпка 1: След стартиране на нашия FirstTestNGFile, който създадохме в предишния раздел, щракнете с десния бутон на мишката върху името на проекта (FirstTestNGProject) в прозореца на Project Explorer, след което щракнете върху опцията "Refresh".

Стъпка 2: Забележете, че е създадена папка "test-output". Разгънете го и потърсете файл index.html. Този HTML файл е отчет за резултатите от последното тестово изпълнение.

Стъпка 3: Щракнете двукратно върху този файл 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 (приоритет = 0, alwaysRun = true)

@BeforeTest и @AfterTest

@BeforeTest

методите по тази анотация ще бъдат изпълнени преди първия тестов случай във файла TestNG .

@AfterTest

методите под тази анотация ще бъдат изпълнени, след като бъдат изпълнени всички тестови случаи във файла TestNG .

Помислете за кода по-долу.

пакет firsttestngpackage;внос org.openqa.selenium. *;импортиране на org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;внос org.testng.анотации. *;публичен клас firsttestngfile {публичен низ baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";публичен драйвер на WebDriver;@BeforeTestpublic void launchBrowser () {System.out.println ("стартиране на браузър Firefox");System.setProperty ("webdriver.gecko.driver", driverPath);драйвер = нов FirefoxDriver ();driver.get (baseUrl);}@Тестpublic void verifyHomepageTitle () {String очакваноTitle = "Добре дошли: Mercury Tours";String actualTitle = driver.getTitle ();Assert.assertEquals (actualTitle, очакваноTitle);}@AfterTestpublic void terminateBrowser () {driver.close ();}}

Прилагайки логиката, представена от таблицата и кода по-горе, можем да предскажем, че последователността, по която ще бъдат изпълнени методите, е:

  • 1- во - launchBrowser ()
  • 2- ро - verifyHomepageTitle ()
  • 3 -ти - terminateBrowser ()

Поставянето на блоковете с пояснения може да бъде разменено, без да се влияе на хронологичния ред, по който те ще бъдат изпълнени . Нека разберем с пример TestNG и се опитаме да пренаредим блоковете с анотации така, че вашият код да изглежда подобен на този по-долу.

пакет firsttestngpackage;внос org.openqa.selenium. *;импортиране на org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;внос org.testng.анотации. *;публичен клас firsttestngfile {публичен низ baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";публичен драйвер на WebDriver;@AfterTest // Бъркамpublic void terminateBrowser () {driver.close ();}@BeforeTest // Бъркамpublic void launchBrowser () {System.out.println ("стартиране на браузър Firefox");System.setProperty ("webdriver.gecko.driver", driverPath);драйвер = нов FirefoxDriver ();driver.get (baseUrl);}@ Тест // Бъркамpublic void verifyHomepageTitle () {String очакваноTitle = "Добре дошли: Mercury Tours";String actualTitle = driver.getTitle ();Assert.assertEquals (actualTitle, очакваноTitle);}}

Стартирайте горния код и забележете това

@BeforeMethod и @AfterMethod

@BeforeMethod

методите по тази анотация ще бъдат изпълнени преди всеки метод във всеки тестов случай .

@AfterMethod

методите по тази анотация ще се изпълняват след всеки метод във всеки тестов случай.

Да предположим, че в Mercury Tours искаме да проверяваме заглавията на целевите страници на двете връзки по-долу.

Потокът от нашия тест ще бъде:

  • Отидете на началната страница и проверете нейното заглавие.
  • Щракнете РЕГИСТРИРАНЕ и проверете заглавието на целевата му страница.
  • Върнете се на началната страница и проверете дали все още има правилното заглавие.
  • Щракнете върху ПОДДРЪЖКА и проверете заглавието на целевата му страница.
  • Върнете се на началната страница и проверете дали все още има правилното заглавие.

Кодът по-долу илюстрира как @BeforeMethod и @AfterMethod се използват за ефективно изпълнение на споменатия по-горе сценарий.

пакет firsttestngpackage;внос org.openqa.selenium. *;импортиране на org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;внос org.testng.анотации. *;@Тестпубличен клас firsttestngfile {публичен низ baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";публичен драйвер на WebDriver;публичен низ се очаква = null;публичен низ действителен = нула;@BeforeTestpublic void launchBrowser () {System.out.println ("стартиране на браузър Firefox");System.setProperty ("webdriver.gecko.driver", driverPath);драйвер = нов FirefoxDriver ();driver.get (baseUrl);}@BeforeMethodpublic void verifyHomepageTitle () {String очакваноTitle = "Добре дошли: Mercury Tours";String actualTitle = driver.getTitle ();Assert.assertEquals (actualTitle, очакваноTitle);}@ Тест (приоритет = 0)публичен регистър за невалидни () {driver.findElement (By.linkText ("РЕГИСТРИРАНЕ")). click ();очаквано = "Регистриране: Mercury Tours";действително = driver.getTitle ();Assert.assertEquals (действително, очаквано);}@ Тест (приоритет = 1)публична подкрепа за невалидни () {driver.findElement (By.linkText ("SUPPORT")). click ();очаквано = "В процес на изграждане: обиколки с живак";действително = driver.getTitle ();Assert.assertEquals (действително, очаквано);}@AfterMethodpublic void goBackToHomepage () {driver.findElement (By.linkText ("Начало")). кликнете ();}@AfterTestpublic void terminateBrowser () {driver.close ();}}

След изпълнението на този тест, вашият TestNG трябва да докладва следната последователност.

Просто казано, @BeforeMethod трябва да съдържа методи, които трябва да стартирате преди всеки тест, докато @AfterMethod трябва да съдържа методи, които трябва да стартирате след всеки тест.

Обобщение на анотациите на TestNG

@BeforeSuite : Анотираният метод ще бъде стартиран преди да са стартирали всички тестове в този пакет.

@AfterSuite : Анотираният метод ще се изпълни, след като всички тестове в този пакет са изпълнени.

@BeforeTest : Анотираният метод ще бъде изпълнен преди да се изпълни който и да е тестов метод, принадлежащ към класовете вътре в маркера.

@AfterTest : Анотираният метод ще се изпълни, след като всички тестови методи, принадлежащи към класовете вътре в маркера, са изпълнени.

@BeforeGroups : Списъкът с групи, които този метод за конфигуриране ще се изпълнява преди. Гарантирано е, че този метод се изпълнява малко преди да бъде извикан първият тестов метод, който принадлежи към някоя от тези групи.

@AfterGroups : Списъкът с групи, след които ще се изпълнява този метод за конфигуриране. Гарантирано е, че този метод се изпълнява скоро след извикването на последния тестов метод, който принадлежи към някоя от тези групи.

@BeforeClass : Анотираният метод ще се изпълни преди да бъде извикан първият тестов метод в текущия клас.

@AfterClass : Анотираният метод ще се изпълни, след като всички тестови методи в текущия клас са изпълнени.

@BeforeMethod : Анотираният метод ще се изпълнява преди всеки тест метод.

@AfterMethod : Анотираният метод ще се изпълнява след всеки тестов метод.

@Test : Анотираният метод е част от тестов случай

Заключение

  • TestNG е рамка за тестване, която е в състояние да направи тестовете на Selenium по-лесни за разбиране и да генерира лесни за разбиране отчети.
  • Основните предимства на TestNG пред JUnit са следните.
    • Анотациите са по-лесни за използване и разбиране.
    • Тестовите случаи могат да бъдат групирани по-лесно.
    • TestNG ни позволява да създаваме паралелни тестове.
  • Прозорецът на конзолата в Eclipse генерира текстово-базиран резултат, докато прозорецът TestNG е по-полезен, защото ни дава графичен изход на резултата от теста плюс други значими подробности като:
    • Времетраене на всеки метод.
    • Хронологичният ред, по който са изпълнени методите
  • TestNG е способен да генерира HTML-базирани отчети.
  • Анотациите могат да използват параметри точно като обичайните методи на Java TestNG.
  • TestNG Dataprovider е начин за предаване на параметри в тестовата функция, която предава различни стойности в тестови случаи с едно изпълнение.