TestNG Підручник

⚡ Розумний підсумок

TestNG є наступним поколінням Java фреймворк для тестування, який поєднується з Selenium для структурованої автоматизації, розширеної звітності та паралельного виконання. Цей посібник охоплює основні анотації, налаштування проекту в Eclipse, написання першого тестового випадку, HTML-звітів та використання розширених параметрів.

  • 🧱 Основна структура: TestNG продовжується JUnit ідеї з анотаціями, групаping, та паралельне виконання тестів для Selenium люкси.
  • 🏷️ Анотації Drive Flow: Налаштування, тестування та демонтаж послідовностей @Test, @BeforeMethod, @AfterMethod, @BeforeTest та @AfterTest.
  • 🗂️ Eclipse Установка: Побудуйте a TestNG проект, додайте TestNG бібліотека та Selenium JAR-файли, а потім згенерувати тестові класи за допомогою майстра.
  • 📊 звітність: TestNG створює текстові, графічні та HTML-звіти в папці test-output, включаючи хронологічні подання.
  • Параметри: Використовуйте 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.
  • Запустіть кілька тестів у кількох браузерах — крос-тестування браузера support.
  • Плавна інтеграція з Maven, Jenkinsта інші інструменти неперервної інтеграції (CI).
  • 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 анотація над 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 майстер проектів з назвою FirstTestNGПроекти

Крок 3) Імпортуйте TestNG бібліотеки. Натисніть на Бібліотеки вкладку, а потім Додати бібліотеку….

Вкладка «Бібліотеки» з опцією «Додати бібліотеку» Eclipse

Крок 4) Перейдіть на вкладку Додати бібліотеку діалог, виберіть TestNG і натисніть кнопку Далі.

вибирає TestNG у діалоговому вікні «Додати бібліотеку»

Крок 5) Натисніть обробка.

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

TestNG тепер має з’явитися у списку Бібліотек.

TestNG відображається у списку бібліотек

Крок 6) Додайте JAR-файли, що містять Selenium API. Вони походять від Java драйвер клієнта, завантажений з selenium.dev/завантаження.

Діалогове вікно додавання зовнішніх 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 класний чарівник з FirstTestNGЗначення файлів

Крок 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.* пакет.
  • Команда Assert клас з 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-звіт за останній запуск.

папка test-output з виділеним 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 параметр (true або false). Щоб використовувати два або більше параметрів в одній анотації, розділіть їх комою:

@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: виконується після кожного методу тестування.
  • @Тест: позначає метод як тестовий випадок.

Поширені запитання

JUnit 5 модернізованих JUnit з API та моделлю розширення Jupiter. TestNG все ще лідирує в паралельному виконанні, група рівня пакетуping, dependsOn та DataProvider. Багато Selenium вибирають команди TestNG для комплексних люксів та JUnit 5 для модульних тестів.

Додайте parallel=”methods” або parallel=”classes” плюс атрибут thread-count до тег у файлі testng.xml. TestNG потім розподіляє методи тестування по потоках, що ідеально підходить для Selenium Кроссбраузерний режим роботи сітки або хмари.

@DataProvider передає кілька наборів даних в один метод @Test. Кожен рядок у провайдері є одним виконанням. Це стандартний шаблон для керованих даними Selenium тести на формах, пошукових полях або екранах входу.

Так. AI помічники з кодування генерують TestNG скелети, анотувати методи @Test, створювати класи об'єктів сторінок та створювати масиви DataProvider зі зразків CSV-файлів, що значно скорочує час створення каркасу.

Генеративний ШІ отримує журнали testng-results.xml та Surefire, кластеризує схожі збої, пропонує ймовірні першопричини та створює чернетки заявок Jira. Це скорочує час сортування нестабільних тестів та допомагає керівникам відділу контролю якості пріоритезувати виправлення неперервної інтеграції.

Підсумуйте цей пост за допомогою: