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. Документація фреймворку доступна за посиланням:

Документація TestNG