TestNG Підручник
⚡ Розумний підсумок
TestNG є наступним поколінням Java фреймворк для тестування, який поєднується з Selenium для структурованої автоматизації, розширеної звітності та паралельного виконання. Цей посібник охоплює основні анотації, налаштування проекту в Eclipse, написання першого тестового випадку, HTML-звітів та використання розширених параметрів.
Що таке 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 спрощує тестовий код. Вам більше не потрібен статичний метод main; анотації визначають, що і коли виконуватиметься.
- Неперехоплені винятки коректно обробляються TestNGПро них повідомляється як про невдалі кроки без завершення всього виконання.
Переваги TestNG над JUnit
TestNG пропонує три основні переваги порівняно JUnit:
- Анотації легше зрозуміти та використовувати.
- Тестові випадки можна групувати та розставляти пріоритети з меншими зусиллями.
- Паралельне виконання тестів підтримується "з коробки".
Що таке анотація в TestNG?
Анотації в TestNG — це рядки коду, розміщені над методом, для керування його виконанням. Вони завжди починаються із символу @. Простий приклад наведено нижче.
Анотації детально розглянуті в розділі «Анотації, що використовуються в TestNG" далі в цьому посібнику, тому наведений вище приклад призначений лише для встановлення очікувань. TestNG анотації легше кодувати та читати, ніж JUnit еквіваленти, і вони є важливими під час проведення тестів на Selenium сітка де паралельне виконання має значення.
Як писати тестові приклади TestNG
Написання а TestNG Тестовий випадок виконується в три кроки:
- Напишіть свою бізнес-логіку та місце TestNG анотації над кожним методом.
- Додайте метадані, такі як назва класу, назва групи та назва пакета.
- Запустіть TestNG клас з вашого IDE або командного рядка.
Створіть тестовий випадок за допомогою TestNG Анотації
Тепер ми створимо наш перший тестовий випадок, використовуючи TestNG анотації в SeleniumПерш ніж писати тест, налаштуйте новий TestNG проект в Eclipse і назвіть це Ім’яTestNGПроекти.
Налаштування нового TestNG Проекти
Крок 1) Натисніть Файл > Новий > Java Проекти.
Крок 2) Enter Ім’яTestNGПроекти як назву проекту та натисніть Далі.
Крок 3) Імпортуйте TestNG бібліотеки. Натисніть на Бібліотеки вкладку, а потім Додати бібліотеку….
Крок 4) Перейдіть на вкладку Додати бібліотеку діалог, виберіть TestNG і натисніть кнопку Далі.
Крок 5) Натисніть обробка.
TestNG тепер має з’явитися у списку Бібліотек.
Крок 6) Додайте JAR-файли, що містять Selenium API. Вони походять від Java драйвер клієнта, завантажений з selenium.dev/завантаження.
Перейдіть до папки, де знаходиться Selenium JAR-файли зберігаються.
Після додавання зовнішніх JAR-файлів екран має виглядати ось так.
Крок 7) Натисніть обробка. Нові Ім’яTestNGПроекти відображається у Провіднику пакетів.
Як створити новий TestNG Тестовий файл
Коли проект готовий, створіть новий TestNG файлу.
Крок 1) Клацніть правою кнопкою миші src папку та виберіть Нове > Інше….
Крок 2) Розгорнути TestNG папку, виберіть TestNG клас, і клацніть Далі.
Крок 3) Введіть значення, наведені нижче, та натисніть обробка, Java файл має назву Ім’яTestNGФайл.
Крок 4) Eclipse генерує TestNG шаблон, показаний нижче.
Програмування вашого першого 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
Вікно консолі надає текстовий звіт, а TestNG Вікно результатів відображає графічне представлення.
Створення HTML звітів
TestNG також може генерувати повні HTML-звіти.
Крок 1) Після бігу Ім’яTestNGФайл, клацніть правою кнопкою миші на проекті та виберіть оновлення.
Крок 2) A тестовий вихід з’явиться папка. Розгорніть її та знайдіть index.html — HTML-звіт за останній запуск.
Крок 3) Double-клік index.html відкрити його всередині Eclipseбраузера. Натисніть F5 для оновлення після наступних запусків.
Анотації, що використовуються в TestNG
Ви вже бачили анотацію @Test. Решта цього розділу охоплює найкорисніші розширені анотації.
Кілька тестів
Одинокий TestNG Файл може містити кілька анотацій @Test. За замовчуванням методи, анотовані за допомогою @Test, виконуються в алфавітному порядку. У коді нижче методи c_test, a_test та b_test розміщуються в алфавітному порядку незалежно від порядку джерел.
Запустіть код та відкрийте index.html. Клацання Хронологічний вигляд.
Параметри
Щоб змінити порядок за замовчуванням, скористайтеся priority параметр. Параметри – це ключові слова, які змінюють поведінку анотації.
- Призначте значення за допомогою
=. - Параметри, розміщені одразу після анотації, оберніть у дужки, як показано нижче.
TestNG виконує анотації @Test від найнижчого значення пріоритету до найвищого. Номери пріоритетів не обов'язково мають бути послідовними.
Звіт HTML підтверджує, що методи виконувалися у порядку зростання пріоритету.
Кілька параметрів
Крім priority, @Test приймає alwaysRun параметр (true або false). Щоб використовувати два або більше параметрів в одній анотації, розділіть їх комою:
@Test(priority = 0, alwaysRun = true)
@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);
}
}
Запустіть код та перевірте результат.
@BeforeMethod і @AfterMethod
| @BeforeMethod | Методи під цією анотацією виконуються перед кожним методом випробування. |
| @AfterMethod | Методи під цією анотацією виконуються після кожного методу випробування. |
In 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 повідомляє послідовність нижче.
Коротко кажучи: розмістіть кроки налаштування всередині @BeforeMethod та очищення або скидання навігації всередині @AfterMethod таким чином, кожен тестовий випадок починається та закінчується у відомому стані.
Резюме TestNG Анотації
- @BeforeSuite: виконується перед усіма тестами в наборі.
- @AfterSuite: запускається після всіх тестів у наборі.
- @BeforeTest: виконується перед будь-яким тестовим методом, що належить до класів усередині тег.
- @AfterTest: виконується після всіх тестових методів, що належать до класів всередині тег.
- @BeforeGroups: виконується незадовго до першого методу тестування, що належить до будь-якої зі списку груп.
- @AfterGroups: виконується невдовзі після останнього методу тестування, що належить до будь-якої зі списку груп.
- @BeforeClass: виконується перед першим тестовим методом у поточному класі.
- @AfterClass: виконується після всіх методів тестування в поточному класі.
- @BeforeMethod: виконується перед кожним методом тестування.
- @AfterMethod: виконується після кожного методу тестування.
- @Тест: позначає метод як тестовий випадок.


































