Учебное пособие по TestNG: что такое аннотации и фреймворк в Selenium

Что такое TestNG?

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

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

Например:

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

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

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

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

Большинство пользователей Selenium используют это более чем Юнит из-за его преимуществ. Функций TestNG очень много, но мы сосредоточимся только на наиболее важных из них, которые можно использовать в Selenium. Фоллоwing Ключевые особенности Selenium TestNG:

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

  • TestNG упрощает кодирование тестов. В наших тестах больше нет необходимости в статическом основном методе. Последовательность действий регламентируется понятными аннотациями, не требующими статичности методов.
  • Используйте TestNG с Selenium

    Используйте TestNG с Selenium

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

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

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

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

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

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

Аннотация в TestNG

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

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

Как писать тестовые примеры в TestNG?

Шаг 1) Напишите свою бизнес-логику и вставьте аннотации TestNG в свой код.
Шаг 2) Добавьте дополнительную информацию, такую ​​​​как имя класса, имя группы, имя пакета и т. д.
Шаг 3) Запустите TestNG.

Создание тестового примера с использованием аннотаций TestNG

Теперь мы узнаем, как создать наш первый тестовый пример, используя аннотации TestNG в Selenium:

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

Настройка нового проекта TestNG

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

Настройка нового проекта TestNG

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

Настройка нового проекта TestNG

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

Настройка нового проекта TestNG

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

Настройка нового проекта TestNG

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

Настройка нового проекта TestNG

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

Настройка нового проекта TestNG

Шаг 6: Теперь мы добавим файлы JAR, содержащие Selenium API. Эти файлы находятся в драйвере клиента Java, который мы скачали с сайта https://www.selenium.dev/downloads/ когда мы устанавливали Selenium и Eclipse в предыдущих главах.

Настройка нового проекта TestNG

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

Настройка нового проекта TestNG

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

Настройка нового проекта TestNG

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

Настройка нового проекта TestNG

Как создать новый тестовый файл TestNG

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

Шаг 1: Нажмите «Источник» и выберите «Другое».
Щелкните правой кнопкой мыши папку пакета «src», затем выберите «Создать» > «Другое…».

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

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

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

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

Создайте новый тестовый файл 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();
  }
}

Обратите внимание на следующееwing.

  • TestNG не требует наличия метода main().
  • Методы не обязательно должны быть статичными.
  • Мы использовали аннотацию @Test. @Test используется, чтобы сообщить, что метод, используемый в нем, является тестовым примером.. В этом случае мы установили метод VerifiedHomepageTitle() в качестве тестового примера, поэтому поместили над ним аннотацию @Test.
  • Поскольку мы используем аннотации в TestNG, нам нужно было импортировать пакет org.testng.annotations.*.
  • Мы использовали класс Assert. Класс Assert используется для проведения операций проверки в TestNG.. Чтобы использовать его, нам нужно импортировать пакет org.testng.Assert.

В одном файле TestNG может быть несколько тестовых случаев (следовательно, несколько аннотаций @Test). Это будет рассмотрено более подробно later в разделе «Аннотации, используемые в TestNG».

Запуск теста

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

Запуск теста

Запуск теста

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

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

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

Создание HTML-отчетов

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

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

Создание 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 со значением приоритета от наименьшего до наибольшего. Нет необходимости, чтобы ваши значения приоритета были последовательными.

параметры

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

параметры

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

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

@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 – проверить название домашней страницы ()
  • 3rd – ЗавершитьБраузер()

Размещение блоков аннотаций можно менять местами, не затрагивая хронологический порядок их выполнения.. Давайте разберемся с примером 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 методы под этой аннотацией будут выполнены после каждого метода в каждом тестовом примере.

Предположим, в Mercury Tours нам нужно проверить заголовки целевых страниц двух ссылок ниже.

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

Ход нашего теста будет таким:

  • Перейдите на домашнюю страницу и проверьте ее название.
  • Нажмите «РЕГИСТРАЦИЯ» и проверьте заголовок целевой страницы.
  • Вернитесь на домашнюю страницу и проверьте, правильно ли указано название.
  • Нажмите «ПОДДЕРЖКА» и проверьте заголовок целевой страницы.
  • Вернитесь на домашнюю страницу и проверьте, правильно ли указано название.

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

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

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

Сводка аннотаций TestNG

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

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

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

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

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

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

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

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

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

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

@Контрольная работа: аннотированный метод является частью тестового примера.

Заключение

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