Как объединить тесты в группы в TestNG
Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Группировка тестов в TestNG: подходы и лучшие практики
В TestNG существует несколько способов объединения тестов в логические группы для более гибкого управления выполнением тестового набора. Это ключевая возможность фреймворка, которая позволяет селективно запускать тесты по различным критериям.
Основные механизмы группировки
1. Группы тестов (Test Groups)
Наиболее распространенный способ — использование аннотации @Test(groups = {"groupName"}). Тесты помечаются принадлежностью к одной или нескольким группам.
import org.testng.annotations.Test;
public class GroupingTests {
@Test(groups = {"smoke", "regression"})
public void testUserLogin() {
System.out.println("Smoke & Regression: Testing user login");
}
@Test(groups = {"regression"})
public void testUserProfile() {
System.out.println("Regression: Testing user profile");
}
@Test(groups = {"smoke"})
public void testHomePageLoad() {
System.out.println("Smoke: Testing homepage loading");
}
}
2. Группы классов (Class Groups)
Можно назначать группы на уровне всего класса:
@Test(groups = {"api-tests"})
public class ApiTestSuite {
@Test
public void testGetEndpoint() {
// Все методы класса автоматически относятся к группе "api-tests"
}
@Test(groups = {"security"})
public void testAuthEndpoint() {
// Этот метод принадлежит двум группам: "api-tests" и "security"
}
}
3. Метагруппы (Meta Groups)
TestNG поддерживает создание групп, которые включают другие группы через атрибут alwaysRun:
<suite name="Test Suite">
<groups>
<define name="all-tests">
<include name="smoke"/>
<include name="regression"/>
<include name="integration"/>
</define>
<run>
<include name="all-tests"/>
</run>
</groups>
</suite>
Конфигурация групп в XML-файле
Управление выполнением групп осуществляется через testng.xml:
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Automation Suite">
<test name="Regression Testing">
<groups>
<define name="critical-path">
<include name="login"/>
<include name="checkout"/>
</define>
<run>
<!-- Запустить только указанные группы -->
<include name="regression"/>
<include name="critical-path"/>
<!-- Исключить конкретные группы -->
<exclude name="broken-tests"/>
</run>
</groups>
<classes>
<class name="com.example.tests.LoginTests"/>
<class name="com.example.tests.CheckoutTests"/>
</classes>
</test>
</suite>
Методы, зависящие от групп
TestNG позволяет создавать конфигурационные методы, которые выполняются только для определенных групп:
public class GroupDependentTests {
@BeforeGroups(groups = {"database"})
public void setupDatabase() {
System.out.println("Setting up database for database group tests");
}
@AfterGroups(groups = {"database"})
public void cleanupDatabase() {
System.out.println("Cleaning up database after database group tests");
}
@Test(groups = {"database"})
public void testDatabaseConnection() {
System.out.println("Testing database connection");
}
}
Группы на уровне параметров
Группы могут быть параметризованы для передачи дополнительной информации:
@DataProvider(name = "userRoles")
public Object[][] getUserRoles() {
return new Object[][] {
{"admin", "admin-group"},
{"user", "user-group"},
{"guest", "guest-group"}
};
}
@Test(groups = {"role-based"}, dataProvider = "userRoles")
public void testRoleAccess(String role, String group) {
System.out.println("Testing access for role: " + role + " in group: " + group);
}
Частичные группы (Partial Groups)
Можно создавать группы, которые включают только некоторые методы класса:
<groups>
<run>
<include name="fast-tests"/>
</run>
</groups>
<class name="com.example.TestClass">
<methods>
<include name="quickTest.*"/> <!-- Регулярное выражение -->
<exclude name="slowTest"/>
</methods>
</class>
Лучшие практики использования групп
- Семантические названия групп: используйте понятные имена (
smoke,regression,api,ui,security) - Иерархия групп: создавайте логическую структуру (например,
payment.creditcard,payment.paypal) - Комбинации групп: один тест может принадлежать нескольким группам для гибкости
- Группы для CI/CD: настройте разные группы для разных этапов пайплайна
- Избегайте дублирования: используйте метагруппы для часто используемых комбинаций
- Документация: ведите список всех групп и их назначения в проекте
Запуск групп из командной строки
# Запуск конкретных групп через Maven
mvn test -Dgroups=smoke,regression
# Исключение групп
mvn test -DexcludedGroups=broken,flaky
# Запуск через testng.xml
java -cp "bin:lib/*" org.testng.TestNG testng.xml
Группировка в TestNG предоставляет мощный механизм для организации тестов, позволяя эффективно управлять тестовыми прогонами в зависимости от контекста выполнения (разработка, CI/CD, регрессия).