TestNG groups или группы тестирования


Сегодня обсудим одну полезную фичу фреймворка TestNG. Она называется groups или группы тестирования. С помощью групп тестирования в TestNG тесты можно объединить в группы. Это позволяет тестировщику выбирать, какие из них в какой момент запускать, а какие игнорировать. Кроме того, есть возможность объединять несколько тестовых групп в одну, а также использовать регулярные выражения и многое другое.

Что такое тестовые группы в TestNG?

Группы в TestNG существуют для объединения различных тестов. Они объединяются в одну тестовую группу для выполнения этих тестов вместе. Для этого достаточно будет просто запустить одну простую команде. Тесты могут находится внутри одного класса или принадлежать к разным классам.

  • В рамках одного тестового проекта у вас могут быть UI тесты, проверяющие пользовательский интерфейс. Ещё могут быть API проверяющие взаимодействие с backend частью, минуя интерфейс пользователя. Для удобства запуска их можно отнести к различным тестовым группам.
  • Ещё тесты могут относится к различной функциональности. В этом случае можно указывать отдельные группы для каждой функциональности.
  • Внутри каждой из предыдущих групп могут быть smoke, acceptance и regression тесты. Для них тоже удобно иметь отдельные группы.

TestNG также позволяет нам группировать тесты внутри групп. Такая группировка избавляет нас от необходимости определять большое количество классов в исходном коде тестов и затем запускать эти классы по отдельности, что позволяет экономить время.

TestNG для тестировщика автоматизатора.

Курс знакомит тестировщиков ПО с часто встречающимися задачами при тестировании backend приложений. На примере простого микро сервиса вы увидите что собой представляет REST API. Какие основные подходы для тестирования ПО используются при его проверках. С помощью каких инструментов и библиотек пишутся автотесты и создаются тестовые фреймворки.

Разметка групп производится внутри аннотации @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>

После запуска мы получим следующий результат: