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 с Selenium

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

    употреба TestNG с Selenium

  • Неуловените изключения се обработват автоматично от TestNG без преждевременно прекратяване на теста. Тези изключения се докладват като неуспешни стъпки в отчета.

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

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

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

В какво е анотацията TestNG?

Анотации в 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 Проект

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

Стъпка 2: Въведете „ПървоTestNGПроект“ като име на проекта, след което щракнете върху Напред.

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

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

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

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

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

Стъпка 5: Кликнете върху Готово.

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

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

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

Стъпка 6: Сега ще добавим JAR файловете, които съдържат Selenium API. Тези файлове се намират в Java клиентски драйвер, от който сме изтеглили https://www.selenium.dev/downloads/ когато инсталирахме Selenium намлява Eclipse в предишните глави.

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

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

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

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

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

Стъпка 7: Щракнете върху Готово и проверете дали нашият FirstTestNGПроектът се вижда на EclipseПрозорец на Package Explorer.

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

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

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

Стъпка 1: Кликнете върху „src“ и изберете друго.
Щракнете с десния бутон върху папката на пакета „src“, след което изберете New > Other…

Създайте нов TestNG Тестови файл

Стъпка 2: Изберете TestNG клас.
Кликнете върху TestNG папка и изберете „TestNG клас” опция. Щракнете Напред.

Създайте нов TestNG Тестови файл

Стъпка 3: Въведете стойностите.
Въведете посочените по-долу стойности в съответните полета за въвеждане и щракнете върху Готово. Забележете, че ние наименувахме нашите Java файл като „ПървоTestNGФайл”.

Създайте нов TestNG Тестови файл

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

Създайте нов 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 Прозорецът с резултати ни дава графичен.

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

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

TestNG има възможност за генериране на отчети в HTML формат.

Стъпка 1: След като изпълнихме нашия FirstTestNGФайл, който създадохме в предишния раздел, щракнете с десния бутон върху името на проекта (ПървоTestNGProject) в прозореца Project Explorer, след което щракнете върху опцията „Refresh“.

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

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

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

Стъпка 3: Double-щракнете върху този файл index.html, за да го отворите Eclipseвграден уеб браузър. Можете да опресните тази страница по всяко време, след като повторите теста си, като просто натиснете F5 точно както в обикновените уеб браузъри.

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

Анотациите, използвани в TestNG

В предишния раздел се запознахте с анотацията @Test. Сега ще изучаваме по-напреднали анотации и техните употреби.

Множество тестови случаи

Можем да използваме няколко анотации @Test в една TestNG файл. По подразбиране методите, анотирани от @Test, се изпълняват по азбучен ред. Вижте кода по-долу. Въпреки че методите c_test, a_test и b_test не са подредени по азбучен ред в кода, те ще бъдат изпълнени като такива.

Анотациите, използвани в TestNG

Стартирайте този код и на генерираната страница index.html щракнете върху „Хронологичен изглед“.

Анотациите, използвани в TestNG

параметри

Ако искате методите да се изпълняват в различен ред, използвайте параметъра “приоритет”. Параметрите са ключови думи, които променят функцията на анотацията.

  • Параметрите изискват да им присвоите стойност. Вие правите това, като поставите „=“ до тях и след това последвано от стойността.
  • Параметрите са оградени в двойка скоби, които се поставят точно след анотацията като кодовия фрагмент, показан по-долу.

параметри

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 е начин за предаване на параметри в тестовата функция, която предава различни стойности в тестови случаи в едно изпълнение.