TestNG – це тестовий фреймворк, котрий полегшує вирішення ряду проблем (конфігурація, запуск, отримання результатів, тощо) при написанні тестів на мові програмування Java. Основні можливості TestNG:
- набір тверджень (assertions), котрі знаходяться в класі Assert, для написання різноманітних перевірок. Наприклад:
- assertEquals/assertNotEquals
- assertTrue/assertFalse
- assertNull/assertNotNull
- набір анотацій для гнучкості налаштування середовища і тестів на різних етапах виконання. Наприклад:
- @BeforeSuite/AfterSuite
- @BeforeTest/AfterTest
- @BeforeClass/AfterClass
- @BeforeGroups/AfterGroups
- @BeforeMethod/AfterMethod
- можливість запускати тести паралельно для скорочення часу прогону. Паралельність може бути на рівні suites, classes, methods
- можливість налаштувати запуск або ігнорування тесту, в залежності від вдалого виконання попередніх окремих тестів або груп тестів. Досягається завдяки аргументам dependsOnMethods та dependsOnGroups в анотації @Test
- пріоритетність тестів, завдяки якій можна налаштувати послідовність їх запуску (не вважається гарною практикою, але можливість така є). Досягається завдяки аргументу priority в анотації @Test
- групування тестів за логікою, що надає можливість запускати групи тестів паралельно, виконувати окремі необхідні кроки до, або після. Досягається завдяки аргументу group в анотації @Test
- підтримка Data-Driven Testing, прогін тесту на певній групі даних. Досягається завдяки анотації @DataProvider перед методом, котрий повертає набір даних
- параметризація тестів з використання анотації @Parameters, завдяки чому можна передавати в тести значення параметрів з конфігураційного файлу testng.xml
- після прогону тестів формується звіт з результатами, формат якого можна конфігурувати за допомогою listeners
- гнучка конфігурація запуску тестів за допомогою файлу testng.xml
Приклад простого тесту з використанням TestNG
Тепер напишу дуже простий тест, для загального уявлення як це працює. Попередньо створюю проект maven в середі розробки IntellijIdea (докладніше про те, як це зробити, можна прочитати в нотатці Hello World на Java з використанням Intellij Idea та Maven)
В файл pom.xml проекту додаю залежність:
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.7.1</version>
<scope>test</scope>
</dependency>В директорії src/test/java створюю пакет в який додаю клас SimpleTest:

Сам код класу:
package wiki.it.notes.testng;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
public class SimpleTest {
private String expectedString;
@BeforeClass
void setupClass() {
System.out.println("Start tests");
expectedString = "string";
}
@Test
void firstTest() {
assertEquals("string".toUpperCase(), expectedString);
}
@Test
void secondTest() {
assertEquals("string", expectedString);
}
@AfterClass
void tearDownClass() {
System.out.println("End tests");
}
}- метод setupClass анотований @BeforeClass виконується один раз перед всіма тестами в класі
- метод tearDownClass анотований @AfterClass виконується один раз після всіх тестів в класі
- методи анотовані @Test сприймаються testNG як тести
Для запуску цього простого прикладу я скористуюсь вбудованими у Intellij IDEA засобами підтримки testNG. Достатньо просто натиснути зелений трикутник:

Відображення результатів в консолі:

Ще один простий спосіб запуску тестів саме в Intellij IDEA через вкладку Maven -> Lifecycle -> test:

В результаті такого запуску буде сформовано простий html звіт, котрий можна подивитися, якщо відкрити в браузері файл index.html (лежить у директорії target -> surefire-reports)

В моєму прикладі звіт має такий вигляд:

Це була нотатка про основні можливості фреймворку testNG, для створення архітектури тестів на мові програмування Java. Документація фреймворку доступна за посиланням: