TestNG Обучение

⚡ Умное резюме

TestNG это следующее поколение Java фреймворк для тестирования, который работает в паре с Selenium Для структурированной автоматизации, создания подробных отчетов и параллельного выполнения. В этом руководстве рассматриваются основные аннотации и настройка проекта. Eclipseнаписание первого тестового примера, HTML-отчетов и расширенное использование параметров.

  • 🧱 Основная структура: TestNG продолжается JUnit идеи с аннотациями, группаpingи параллельное выполнение тестов для Selenium люкс.
  • 🏷️ Аннотации определяют ход выполнения задачи: Настройка, тестирование и завершение работы последовательностей с аннотациями @Test, @BeforeMethod, @AfterMethod, @BeforeTest и @AfterTest.
  • 🇧🇷 Eclipse Настроить: Построить TestNG проект, добавить TestNG библиотека и Selenium Затем сгенерируйте JAR-файлы с помощью мастера создания тестовых классов.
  • 📊 Отчетность: TestNG Создает текстовые, графические и HTML-отчеты в папке с тестовыми данными, включая хронологические представления.
  • ⚙️ Параметры: Используйте параметры priority, alwaysRun и dataProvider для управления порядком выполнения и передачи данных в тесты.
  • 🤖 Повышение ИИ: Искусственный интеллект в качестве помощника в программировании ускоряет процесс. TestNG Генерация классов, обновление локаторов и создание структуры dataProvider.

TestNG Обучение

Что такое TestNG?

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

С TestNG Вы можете создать подробный отчет и сразу увидеть, сколько тестов прошло успешно, сколько не прошли или были пропущены. Вы также можете повторно запустить только те тесты, которые не прошли проверку.

Например:

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

Кроме того, вы узнаете о преимуществах TestNGКак писать тестовые методы с аннотациями @Test и как преобразовать ваши классы в набор тестов, который запускается из... Eclipse или командной строки.

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

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

Лучшее Selenium пользователи предпочитают TestNG за JUnit благодаря более широкому набору функций. Ключевые особенности для Selenium составляют:

  • Отчеты, содержащие информацию о количестве выполненных, пройденных, неудачных и пропущенных тестовых случаев.
  • Легкая группаping тестовых примеров посредством testng.xml файл с указанием приоритетов выполнения.
  • Повторите тест несколько раз без циклов, используя invocationCount.
  • Проведите несколько тестов в разных браузерах — кросс-тестированиетестирование браузера .
  • Плавная интеграция с Maven. Jenkinsа также другие инструменты непрерывной интеграции.
  • Readable аннотации — например, @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest.
  • Selenium WebDriver не имеет встроенной функции формирования отчетов; TestNG Заполняет этот пробел, предоставляя понятный HTML-отчет, подобный приведенному ниже.

TestNG Пример HTML-отчета для Selenium тестов

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

Обычный Java структура тестового класса с методом main

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

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

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

TestNG предлагает три основных преимущества по сравнению с JUnit:

  • Аннотации проще понимать и использовать.
  • Тестовые случаи можно группировать и расставлять по приоритетам с меньшими усилиями.
  • Параллельное выполнение тестов поддерживается по умолчанию.

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

Аннотации в TestNG Это строки кода, размещенные над методом для управления его выполнением. Они всегда начинаются с символа @. Простой пример показан ниже.

Пример TestNG аннотация над a Java метод

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

Как писать тестовые случаи в TestNG

Написание TestNG Тестовый пример состоит из трех шагов:

  1. Напишите свою бизнес-логику и разместите её. TestNG Примечания над каждым методом.
  2. Добавьте метаданные, такие как имя класса, имя группы и имя пакета.
  3. Запустите TestNG Создайте класс в своей IDE или в командной строке.

Создайте тестовый случай, используя TestNG Аннотации

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

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

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

Eclipse меню для создания нового Java Проект

Шаг 2) Enter ИмяTestNGПроект в качестве названия проекта и нажмите Следующая.

Новое Java Мастер проектов с именем ПервыйTestNGПроект

Шаг 3) Импортируйте TestNG библиотеки. Нажмите на Библиотеки и затем Добавить библиотеку….

Вкладка «Библиотеки» с опцией «Добавить библиотеку» Eclipse

Шаг 4) В Добавить библиотеку диалога, выберите TestNG и нажмите Следующая.

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

Шаг 5) Нажмите Завершить.

Завершение работы мастера добавления библиотеки.

TestNG Теперь они должны отображаться в списке библиотек.

TestNG отображается в списке библиотек

Шаг 6) Добавьте JAR-файлы, содержащие Selenium API. Они поступают из Java драйвер клиента загружен из selenium.dev/downloads.

Добавить диалоговое окно «Добавить внешние JAR-файлы» в Eclipse

Перейдите в папку, в которой находится Selenium JAR-файлы хранятся.

Выбор Selenium JAR-файлы для пути сборки

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

Selenium JAR-файлы добавлены в список библиотек.

Шаг 7) Нажмите Завершить. Новые ИмяTestNGПроект Отображается в обозревателе пакетов.

ИмяTestNGПроект отображается в обозревателе пакетов.

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

Когда проект будет готов, создайте новый TestNG .

Шаг 1) Щелкните правой кнопкой мыши src папку и выберите Новое > Другое….

Новое меню «Другое» из папки src находится в Eclipse

Шаг 2) Развернуть TestNG папку, выберите TestNG класси нажмите Следующая.

TestNG выбор класса в мастере создания нового

Шаг 3) Введите значения, указанные ниже, и нажмите кнопку. Завершить, Java файл назван ИмяTestNGФайл.

TestNG Мастер классов с ПервымTestNGЗначения файла

Шаг 4) Eclipse генерирует TestNG Шаблон показан ниже.

Сгенерировано TestNG шаблон класса в Eclipse редактор

Ваше первое знакомство с программированием TestNG Тестовый кейс

Создайте первый прецедент что подтверждает название Mercury Домашняя страница туров.

package firsttestngpackage;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.Test;

public class FirstTestNGFile {

    public String baseUrl = "https://demo.guru99.com/test/newtours/";
    public WebDriver driver;

    @Test
    public void verifyHomepageTitle() {
        System.out.println("launching firefox browser");
        // Selenium 4 ships Selenium Manager, so the driver path is no longer required.
        driver = new FirefoxDriver();
        driver.get(baseUrl);
        String expectedTitle = "Welcome: Mercury Tours";
        String actualTitle = driver.getTitle();
        Assert.assertEquals(actualTitle, expectedTitle);
        driver.quit();
    }
}

На что следует обратить внимание:

  • TestNG не нужен main() метод.
  • Методы не обязательно должны быть статичными.
  • @Контрольная работа аннотационные знаки verifyHomepageTitle() в качестве тестового примера.
  • Аннотации находятся в org.testng.annotations.* пакет.
  • Утверждай класс от org.testng.Assert проверки приводов.

В одном файле может быть несколько аннотаций @Test. TestNG файл. Мы рассматриваем это в «Аннотации, используемые в TestNG .

Запуск теста

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

TestNG Окно с результатами теста.

Eclipse Окно консоли с TestNG текстовый вывод

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

Окно «Консоль» предоставляет текстовое резюме, а TestNG В окне результатов отображается графическое представление.

Текст против графики TestNG сравнение результатов

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

TestNG Также может генерировать полные HTML-отчеты.

Шаг 1) После запуска ИмяTestNGФайлЩелкните правой кнопкой мыши по проекту и выберите обновление.

Опция обновления для TestNG проекта в Eclipse

Шаг 2) A тестовый вывод Появляется папка. Разверните её и найдите index.html — HTML-отчет за последний запуск.

папка с тестовыми данными, в которой выделен файл index.html

Шаг 3) Double-щелкните index.html открыть его внутри EclipseВ браузере. Нажмите F5 для обновления страницы при последующих запусках.

TestNG HTML-индексный отчет, отображаемый в Eclipse

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

Вы уже видели аннотацию @Test. Остальная часть этого раздела посвящена наиболее полезным расширенным аннотациям.

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

Один TestNG Файл может содержать несколько аннотаций `@Test`. По умолчанию методы, аннотированные `@Test`, выполняются в алфавитном порядке. В приведенном ниже коде методы c_test, a_test и b_test Запускать в алфавитном порядке независимо от порядка источников.

Несколько методов @Test в одном приложении TestNG класс

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

Хронологический вид множественных TestNG методы

Параметры

Чтобы изменить порядок по умолчанию, используйте priority Параметр. Параметры — это ключевые слова, которые изменяют поведение аннотации.

  • Присвоить значение с помощью =.
  • Параметры следует заключать в скобки, расположенные непосредственно после аннотации, как показано ниже.

TestNG аннотация с синтаксисом параметров и значений

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

Полный код с параметрами приоритета @Test

HTML-отчет подтверждает, что методы выполняются в порядке возрастания приоритета.

TestNG отчет, показывающий методы, выполняемые в порядке возрастания приоритета

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

Кроме того priority@Test принимает alwaysRun параметр (истина или ложь). Чтобы использовать два или более параметров в одной аннотации, разделите их запятой:

@Test(priority = 0, alwaysRun = true)

Пример использования нескольких параметров внутри аннотации @Test

@BeforeTest и @AfterTest

@BeforeTest Методы, находящиеся под этой аннотацией, выполняются. перед первым тестовым случаем в TestNG файл.
@AfterTest Методы, находящиеся под этой аннотацией, выполняются. после всех тестовых случаев в TestNG завершение файла.

Рассмотрим код ниже.

package firsttestngpackage;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;

public class FirstTestNGFile {

    public String baseUrl = "https://demo.guru99.com/test/newtours/";
    public WebDriver driver;

    @BeforeTest
    public void launchBrowser() {
        System.out.println("launching firefox browser");
        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.quit();
    }
}

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

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

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

package firsttestngpackage;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;

public class FirstTestNGFile {

    public String baseUrl = "https://demo.guru99.com/test/newtours/";
    public WebDriver driver;

    @AfterTest                              // Jumbled
    public void terminateBrowser() {
        driver.quit();
    }

    @BeforeTest                             // Jumbled
    public void launchBrowser() {
        System.out.println("launching firefox browser");
        driver = new FirefoxDriver();
        driver.get(baseUrl);
    }

    @Test                                   // Jumbled
    public void verifyHomepageTitle() {
        String expectedTitle = "Welcome: Mercury Tours";
        String actualTitle = driver.getTitle();
        Assert.assertEquals(actualTitle, expectedTitle);
    }
}

Запустите код и проверьте результат.

TestNG Результат подтверждает порядок, несмотря на перемешанные аннотации.

@BeforeMethod и @AfterMethod

@BeforeMethod Методы, находящиеся под этой аннотацией, выполняются. перед каждым методом тестирования.
@AfterMethod Методы, находящиеся под этой аннотацией, выполняются. после каждого метода тестирования.

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

Три ссылки из Mercury Домашняя страница туров

Последовательность выполнения теста следующая:

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

Приведённый ниже код показывает, как аннотации @BeforeMethod и @AfterMethod обрабатывают повторяющиеся шаги.

package firsttestngpackage;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;

public class FirstTestNGFile {

    public String baseUrl = "https://demo.guru99.com/test/newtours/";
    public WebDriver driver;
    public String expected = null;
    public String actual = null;

    @BeforeTest
    public void launchBrowser() {
        System.out.println("launching firefox browser");
        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.quit();
    }
}

После проведения теста, TestNG В отчете представлена ​​последовательность действий, описанная ниже.

TestNG Последовательность отчетов с использованием методов BeforeMethod и AfterMethod

Вкратце: поместите этапы настройки внутрь @BeforeMethod и очистка или сброс навигации внутри @AfterMethod Таким образом, каждый тестовый случай начинается и заканчивается в известном состоянии.

Резюме TestNG Аннотации

  • @BeforeSuite: Запускается перед всеми тестами в наборе.
  • @AfterSuite: Запускается после всех тестов в наборе.
  • @BeforeTest: выполняется перед любым методом тестирования, принадлежащим классам внутри ярлык.
  • @AfterTest: выполняется после всех методов тестирования, принадлежащих классам внутри ярлык.
  • @BeforeGroups: выполняется незадолго до первого метода тестирования, принадлежащего к любой из перечисленных групп.
  • @AfterGroups: выполняется вскоре после последнего метода тестирования, принадлежащего к любой из перечисленных групп.
  • @BeforeClass: выполняется перед первым методом тестирования в текущем классе.
  • @AfterClass: Выполняется после всех методов тестирования в текущем классе.
  • @BeforeMethod: выполняется перед каждым методом тестирования.
  • @AfterMethod: выполняется после каждого метода тестирования.
  • @Тест: Этот метод помечается как тестовый пример.

Часто задаваемые вопросы (FAQ)

JUnit 5 модернизированных JUnit с использованием API Jupiter и модели расширений. TestNG по-прежнему лидирует в параллельном выполнении, групповом режиме на уровне пакета.pingзависит от и поставщика данных. Многие Selenium команды выбирают TestNG для апартаментов от начала до конца JUnit 5 для модульных тестов.

Добавьте атрибут parallel=”methods” или parallel=”classes” плюс атрибут thread-count к тег внутри testng.xml. TestNG затем распределяет методы тестирования по потокам, что идеально подходит для Selenium Кроссбраузерная работа в сетях Grid или Cloud.

Аннотация `@DataProvider` передает несколько наборов данных в один метод `@Test`. Каждая строка в провайдере соответствует одному выполнению. Это стандартный шаблон для работы с данными. Selenium тесты, проводимые с использованием форм, полей поиска или экранов входа в систему.

Да. AI помощники по программированию генерируют TestNG Создание шаблонов, аннотирование методов @Test, разработка классов Page Object и создание массивов DataProvider на основе примеров CSV-файлов, что значительно сокращает время генерации кода.

Генеративный ИИ анализирует файл testng-results.xml и логи Surefire, группирует похожие ошибки, предлагает вероятные первопричины и создает задачи в Jira. Это сокращает время обработки нестабильных тестов и помогает руководителям отдела контроля качества расставлять приоритеты в исправлениях CI.

Подведем итог этой публикации следующим образом: