Что такое TestNG?

«Что такое TestNG?» — вопрос из категории Фреймворки тестирования, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

TestNG — это мощный фреймворк для тестирования на Java, созданный как более функциональная альтернатива JUnit. Он широко используется для модульного, интеграционного и особенно для сквозного (end-to-end) тестирования благодаря своей гибкости.

Ключевые преимущества и особенности:

  • Аннотации: Богатый набор аннотаций для управления жизненным циклом тестов (@BeforeSuite, @Test, @AfterMethod и т.д.).
  • Группировка тестов: Возможность объединять тесты в группы (например, smoke, regression) и запускать их выборочно.
  • Параметризация: Легкая передача данных в тесты через @DataProvider или testng.xml.
  • Зависимости: Определение зависимостей между тестами (dependsOnMethods, dependsOnGroups). Если зависимый тест падает, последующие могут быть пропущены.
  • Параллельное выполнение: Запуск тестов в несколько потоков на уровне методов, классов или сьютов для ускорения прогона.
  • Гибкая конфигурация через XML: Файл testng.xml позволяет централизованно управлять наборами тестов, параметрами, параллельными настройками.

Пример тестового класса TestNG:

import org.testng.annotations.*;

public class LoginTest {

    @BeforeClass
    public void setUp() {
        System.out.println("Инициализация драйвера браузера или тестовых данных");
    }

    @Test(groups = {"smoke", "login"}, priority = 1)
    public void testSuccessfulLogin() {
        System.out.println("Смок-тест: Успешный логин");
        // Код теста: ввод логина/пароля, нажатие кнопки, проверка перехода
        // Assert.assertTrue(dashboardPage.isDisplayed());
    }

    @Test(groups = {"login"}, priority = 2, dependsOnMethods = "testSuccessfulLogin")
    public void testLogout() {
        System.out.println("Тест выхода из системы, зависит от успешного логина");
    }

    @Test(dataProvider = "invalidCredentials")
    public void testLoginWithInvalidData(String username, String password) {
        System.out.println("Тест с некорректными данными: " + username + "/" + password);
        // Проверка сообщения об ошибке
    }

    @DataProvider(name = "invalidCredentials")
    public Object[][] provideData() {
        return new Object[][] {
            {"", "secret"}, // пустой логин
            {"admin", "wrong"} // неверный пароль
        };
    }
}