Ответ
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"} // неверный пароль
};
}
}