Учебники

23) Селен и TestNG

Что такое TestNG?

TestNG — это среда тестирования автоматизации, в которой NG означает «Следующее поколение». TestNG вдохновлен JUnit, который использует аннотации (@). TestNG преодолевает недостатки JUnit и предназначен для упрощения сквозного тестирования.

Используя TestNG, вы можете сгенерировать правильный отчет и легко узнать, сколько тестовых примеров пройдено, не пройдено и пропущено. Вы можете выполнить неудачные тестовые случаи отдельно.

Например:

  • Предположим, у вас есть пять тестовых случаев, один метод написан для каждого тестового случая (предположим, что программа написана с использованием основного метода без использования testNG). При первом запуске этой программы три метода успешно выполняются, а четвертый метод не выполняется. Затем исправьте ошибки, присутствующие в четвертом методе, теперь вы хотите запустить только четвертый метод, потому что первые три метода в любом случае выполняются успешно. Это невозможно без использования TestNG.
  • TestNG предоставляет параметр, т. Е. Файл testng-failed.xml в папке test-output. Если вы хотите запускать только неудачные тесты, значит, вы запускаете этот XML-файл. Он будет выполнять только неудачные тестовые случаи.

Помимо приведенной выше концепции, вы узнаете больше о TestNG, например, каковы преимущества TestNG, как создавать методы тестирования с использованием аннотаций @test, как преобразовывать эти классы в файл набора тестирования и выполнять через eclipse, а также из командной строки. ,

В этом уроке вы узнаете

Зачем использовать TestNG с селеном?

Тесты Selenium по умолчанию не генерируют правильный формат для результатов теста. Используя TestNG, мы можем генерировать результаты теста.

Большинство пользователей Selenium используют это больше, чем Junit из-за его преимуществ. Есть так много возможностей TestNG, но мы остановимся только на самых важных, которые мы можем использовать в Selenium. Ниже приведены ключевые особенности TestNG

  • Создайте отчет в правильном формате, включая количество выполненных тестов, количество пройденных тестов, количество неудачных тестов и количество пропущенных тестов.
  • Несколько тестовых случаев можно сгруппировать проще, преобразовав их в файл testng.xml. В котором вы можете сделать приоритеты, какой тестовый пример должен быть выполнен первым.
  • Один и тот же тестовый пример может быть выполнен несколько раз без циклов, просто используя ключевое слово «invocation count».
  • Используя testng, вы можете выполнить несколько тестовых случаев в нескольких браузерах, то есть перекрестное тестирование.
  • Среду тестирования можно легко интегрировать с такими инструментами, как Maven, Jenkins и т. Д.
  • Аннотации, используемые в тестировании, очень легко понять, например: @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest
  • WebDriver не имеет собственного механизма генерации отчетов. TestNG может генерировать отчет в удобочитаемом формате, как показано ниже.
  • Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

  • TestNG упрощает способ кодирования тестов. В наших тестах больше нет необходимости в методе static main. Последовательность действий регулируется простыми для понимания аннотациями, которые не требуют статичности методов.
  • Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

    Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

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

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

Есть три основных преимущества TestNG перед JUnit:

  • Аннотации легче понять
  • Тестовые случаи могут быть сгруппированы легче
  • Возможно параллельное тестирование

Аннотации в TestNG — это строки кода, которые могут управлять выполнением метода под ними . Им всегда предшествует символ @. Очень ранний и быстрый пример показан ниже.

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

Аннотации будут обсуждаться позже в разделе «Аннотации, используемые в TestNG», поэтому вполне нормально, если вы просто еще не поняли приведенный выше пример. Сейчас просто важно отметить, что аннотации в TestNG легче кодировать и понимать, чем в JUnit.

Возможность параллельного запуска тестов доступна в TestNG, но не в JUnit, поэтому это более предпочтительная среда для тестеров, использующих Selenium Grid.

Первый тестовый пример с использованием аннотаций

Перед тем, как создать тестовый пример, мы должны сначала настроить новый проект TestNG в Eclipse и назвать его «FirstTestNGProject».

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

Шаг 1: Нажмите Файл> Создать> Проект Java

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

Шаг 2: Введите «FirstTestNGProject» в качестве имени проекта и нажмите «Далее».

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

Шаг 3: Теперь мы начнем импортировать библиотеки TestNG в наш проект. Нажмите на вкладку «Библиотеки», а затем «Добавить библиотеку…»

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

Шаг 4. В диалоговом окне «Добавить библиотеку» выберите «TestNG» и нажмите «Далее».

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

Шаг 5: Нажмите Готово.

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

Вы должны заметить, что TestNG включен в список библиотек.

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

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

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

Затем перейдите туда, куда вы поместили файлы Selenium JAR.

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

После добавления внешних файлов JAR ваш экран должен выглядеть следующим образом.

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

Шаг 7: Нажмите Finish и убедитесь, что наш FirstTestNGProject видим в окне Package Explorer Eclipse.

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

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

Теперь, когда мы закончили настройку нашего проекта, давайте создадим новый файл TestNG.

Шаг 1: Щелкните правой кнопкой мыши на папке пакета «src», затем выберите New> Other…

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

Шаг 2: Нажмите на папку TestNG и выберите опцию «Класс TestNG». Нажмите кнопку «Далее.

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

Шаг 3: Введите значения, указанные ниже, в соответствующие поля ввода и нажмите Готово. Обратите внимание, что мы назвали наш Java-файл «FirstTestNGFile».

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

Eclipse должен автоматически создать шаблон для нашего файла TestNG, показанного ниже.

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

Кодирование нашего первого теста

Теперь давайте создадим наш первый контрольный пример , который проверит правильность домашней страницы Mercury Tours. Введите свой код, как показано ниже.

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: установка, аннотации, инфраструктура, примеры в SELENIUM

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

Проверка отчетов, созданных TestNG

Окно консоли в Eclipse предоставляет текстовый отчет о результатах нашего теста, а окно результатов TestNG — графический.

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

Генерация отчетов HTML

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

Шаг 1: После запуска нашего FirstTestNGFile, который мы создали в предыдущем разделе, щелкните правой кнопкой мыши имя проекта (FirstTestNGProject) в окне Project Explorer, затем выберите опцию «Обновить».

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

Шаг 2. Обратите внимание, что папка «test-output» была создана. Разверните его и найдите файл index.html. Этот HTML-файл представляет собой отчет о результатах последнего теста.

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

Шаг 3: Дважды щелкните этот файл index.html, чтобы открыть его во встроенном веб-браузере Eclipse. Вы можете обновить эту страницу в любое время после повторного запуска теста, просто нажав F5, как в обычных веб-браузерах.

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

Аннотации, используемые в TestNG

В предыдущем разделе вы познакомились с аннотацией @Test. Теперь мы будем изучать более сложные аннотации и их использование.

Несколько тестовых случаев

Мы можем использовать несколько аннотаций @Test в одном файле TestNG. По умолчанию методы, аннотированные @Test, выполняются в алфавитном порядке. Смотрите код ниже. Хотя методы c_test, a_test и b_test расположены не в алфавитном порядке в коде, они будут выполнены как таковые.

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

Запустите этот код и на созданной странице index.html нажмите «Хронологическое представление».

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

параметры

Если вы хотите, чтобы методы выполнялись в другом порядке, используйте параметр «приоритет». Параметры — это ключевые слова, которые изменяют функцию аннотации .

  • Параметры требуют, чтобы вы присвоили им значение. Вы делаете это, помещая «=» рядом с ними, а затем следует значение.
  • Параметры заключены в пару круглых скобок, которые помещаются сразу после аннотации, как показано ниже.

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

TestNG выполнит аннотацию @Test с самым низким значением приоритета до самого большого. Нет необходимости, чтобы значения приоритетов были последовательными.

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

HTML-отчет TestNG подтвердит, что методы были выполнены на основе возрастающего значения приоритета.

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

Несколько параметров

Помимо «приоритета», @Test имеет еще один параметр с именем «AlwaysRun», который может быть установлен только в «true» или «false». Чтобы использовать два или более параметров в одной аннотации, разделите их запятой, такой как показано ниже.

@Test(priority = 0, alwaysRun = true)

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

@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();
      }
}

Применяя логику, представленную таблицей и приведенным выше кодом, мы можем предсказать, что последовательность выполнения методов будет следующей:

  • 1- й — launchBrowser ()
  • 2- й — verifyHomepageTitle ()
  • 3- й — terminateBrowser ()

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

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);
     }
      
}

Run the code above and notice that

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

@BeforeMethod and @AfterMethod

@BeforeMethod

methods under this annotation will be executed prior to each method in each test case.

@AfterMethod

methods under this annotation will be executed after each method in each test case.

In Mercury Tours, suppose we like to verify the titles of the target pages of the two links below.

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

The flow of our test would be:

  • Go to the homepage and verify its title.
  • Click REGISTER and verify the title of its target page.
  • Go back to the homepage and verify if it still has the correct title.
  • Нажмите «ПОДДЕРЖКА» и проверьте заголовок целевой страницы.
  • Вернитесь на домашнюю страницу и проверьте правильность заголовка.

Приведенный ниже код иллюстрирует, как @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 должен сообщить о следующей последовательности.

Учебное пособие по TestNG: установка, аннотации, инфраструктура, примеры в SELENIUM

Проще говоря, @BeforeMethod должен содержать методы, которые нужно запускать перед каждым тестовым примером, а @AfterMethod должен содержать методы, которые нужно запускать после каждого тестового случая.

Краткое содержание аннотаций TestNG

@BeforeSuite : аннотированный метод будет запущен до запуска всех тестов в этом наборе.

@AfterSuite : аннотированный метод будет запущен после выполнения всех тестов в этом наборе.

@BeforeTest : аннотированный метод будет запущен до запуска любого тестового метода, принадлежащего классам внутри тега.

@AfterTest : аннотированный метод будет запущен после запуска всех тестовых методов, принадлежащих классам внутри тега.

@BeforeGroups : список групп, которые этот метод конфигурации будет запускать раньше. Этот метод гарантированно будет запущен незадолго до того, как будет вызван первый тестовый метод, принадлежащий любой из этих групп.

@AfterGroups : список групп, после которых будет запускаться этот метод конфигурации. Этот метод гарантированно будет запущен вскоре после вызова последнего метода тестирования, принадлежащего любой из этих групп.

@BeforeClass : аннотированный метод будет запущен до вызова первого тестового метода в текущем классе.

@AfterClass : аннотированный метод будет запущен после запуска всех тестовых методов в текущем классе.

@BeforeMethod : аннотированный метод будет запускаться перед каждым тестовым методом.

@AfterMethod : аннотированный метод будет запускаться после каждого метода тестирования.

@Test : аннотированный метод является частью теста

Вывод

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