Сегодня обсудим одну полезную фичу фреймворка TestNG. Она называется groups или группы тестирования. С помощью групп тестирования в TestNG тесты можно объединить в группы. Это позволяет тестировщику выбирать, какие из них в какой момент запускать, а какие игнорировать. Кроме того, есть возможность объединять несколько тестовых групп в одну, а также использовать регулярные выражения и многое другое.
Содержание
Что такое тестовые группы в TestNG?
Группы в TestNG существуют для объединения различных тестов. Они объединяются в одну тестовую группу для выполнения этих тестов вместе. Для этого достаточно будет просто запустить одну простую команде. Тесты могут находится внутри одного класса или принадлежать к разным классам.
- В рамках одного тестового проекта у вас могут быть UI тесты, проверяющие пользовательский интерфейс. Ещё могут быть API проверяющие взаимодействие с backend частью, минуя интерфейс пользователя. Для удобства запуска их можно отнести к различным тестовым группам.
- Ещё тесты могут относится к различной функциональности. В этом случае можно указывать отдельные группы для каждой функциональности.
- Внутри каждой из предыдущих групп могут быть smoke, acceptance и regression тесты. Для них тоже удобно иметь отдельные группы.
TestNG также позволяет нам группировать тесты внутри групп. Такая группировка избавляет нас от необходимости определять большое количество классов в исходном коде тестов и затем запускать эти классы по отдельности, что позволяет экономить время.
Разметка групп производится внутри аннотации @Test. Для этого используется параметр groups. Группировка тестов реализуется в файле testng.xml. Группы можно указать внутри тэгов или . Помните, что тестовые группы, определенные в теге , применяются только к этому конкретному тесту. Группы тестов, определенные в теге , применяются ко всем тестам в XML-файле. Например, в данном случае, мы определили группу Smoke внутри тега «suite», как в следующем примере:
<suite name="Triangle tests">
<groups>
<run>
<include name="Smoke"/>
</run>
</groups>
<test name="Groups basic test">
<classes>
<class name="ru.qaway.testng.GroupsFirstTest"/>
</classes>
</test>
<test name="Groups test">
<classes>
<class name="ru.qaway.testng.GroupsSecondTest"/>
</classes>
</test>
</suite>
Поскольку «groups» находится внутри тега suite, он запустит все тесты в XML-файле. Для второго случая смотрите следующую настройку, как в приведенном далее коде:
<suite name="Triangle tests">
<test name="Groups basic test">
<groups>
<run>
<include name="Smoke"/>
</run>
</groups>
<classes>
<class name="ru.qaway.testng.GroupsFirstTest"/>
</classes>
</test>
<test name="Groups test">
<classes>
<class name="ru.qaway.testng.GroupsSecondTest"/>
</classes>
</test>
</suite>
Теперь группы будут работать только внутри тега test с именем Groups test.
Как создавать группы?
Давайте создадим несколько тестовых методов, чтобы на примере посмотреть как работать с тестовыми группами в TestNG. Добавим первый тестовый класс:
import org.testng.annotations.Test;
import java.lang.reflect.Method;
public class GroupsFirstTest {
@Test(groups = {"Smoke", "Acceptance", "Regression"})
public void checkGroup1st(Method method) {
System.out.printf("Test : %s.%s\n", getClass().getSimpleName(), method.getName());
}
@Test(groups = {"Acceptance", "Regression"})
public void checkGroup2nd(Method method) {
System.out.printf("Test : %s.%s\n", getClass().getSimpleName(), method.getName());
}
@Test(groups = "Regression")
public void checkGroup3rd(Method method) {
System.out.printf("Test : %s.%s\n", getClass().getSimpleName(), method.getName());
}
}
Созданный класс содержит три тестовых метода. Каждый из них содержит аннотацию @Test из TestNG. Тестовые группы указаны в парметре groups. Для первого тестового метода это группы Smoke, Acceptance и Regression. Для второго метода указаны тестовые группы Acceptance и Regression. Для третьего указана одна группа тестов TestNG с именем Regression. Создадим еще один тестовый класс. Он будет содержать такие же автотесты и будет отличаться только названием:
import org.testng.annotations.Test;
import java.lang.reflect.Method;
public class GroupsSecondTest {
@Test(groups = {"Smoke", "Acceptance", "Regression"})
public void checkGroup1st(Method method) {
System.out.printf("Test : %s.%s\n", getClass().getSimpleName(), method.getName());
}
@Test(groups = {"Acceptance", "Regression"})
public void checkGroup2nd(Method method) {
System.out.printf("Test : %s.%s\n", getClass().getSimpleName(), method.getName());
}
@Test(groups = "Regression")
public void checkGroup3rd(Method method) {
System.out.printf("Test : %s.%s\n", getClass().getSimpleName(), method.getName());
}
}
Запуск группы автотестов в TestNG
Запуск группы тестов в TestNG можно сделать несколькими способами. Можно сделать это через IDE. Например в Intellij Idea для этого нужно создать соответствующую TestNG конфигурацию запуска:

В ней нужно указать, что запускать нужно группу. Для этого в выпадающем списке Test kind выбираем Group. В параметре Group указываем название группы, в нашем случае это группа Smoke. После запуска с такой конфигурацией у нас запустятся два теста:

Второй вариант запуска — через файл testng.xml. Укажем в нём наши созданные классы и тестовую группу Smoke:
<suite name="Triangle tests">
<groups>
<run>
<include name="Smoke"/>
</run>
</groups>
<test name="Groups basic test">
<classes>
<class name="ru.qaway.testng.GroupsFirstTest"/>
</classes>
</test>
<test name="Groups test">
<classes>
<class name="ru.qaway.testng.GroupsSecondTest"/>
</classes>
</test>
</suite>
После запуска мы получим следующий результат:

