← Назад к вопросам

Какие аннотации TestNG вы знаете?

2.3 Middle🔥 182 комментариев
#Теория тестирования

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI7 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Аннотации TestNG и их классификация

TestNG предоставляет богатый набор аннотаций для организации, управления и контроля выполнения тестов. Я разделю их на несколько ключевых категорий.

Аннотации для управления жизненным циклом тестового метода

Это аннотации, которые управляют выполнением отдельных тестовых методов и их подготовкой/завершением.

  • @Testосновная аннотация, обозначающая метод как тестовый. Она может содержать множество параметров для настройки поведения теста:
    @Test(priority = 1, groups = {"smoke"}, description = "Проверка логина с валидными данными")
    public void testValidLogin() {
        // тело теста
    }
    
    Ключевые параметры: `priority`, `groups`, `description`, `enabled`, `timeOut`, `expectedExceptions`, `dataProvider`.

  • @BeforeMethod / @AfterMethod — выполняются перед каждым и после каждого тестового метода (@Test) соответственно. Идеально для подготовки и очистки контекста конкретного теста.

    @BeforeMethod
    public void setUpTestData() {
        // Инициализация данных, нужных только для этого теста
    }
    
  • @BeforeClass / @AfterClass — выполняются перед первым и после последнего тестовым методом внутри одного тестового класса. Используются для операций, затратных по ресурсам (например, открытие/закрытие драйвера браузера для всех тестов класса).

    @BeforeClass
    public void initDriver() {
        WebDriver driver = new ChromeDriver();
        // драйвер будет доступен для всех @Test методов этого класса
    }
    
  • @BeforeTest / @AfterTest — в контексте TestNG <test> в XML-файле — выполняются перед первым и после последнего тестовым методом, принадлежащим этому <test> секции. Область действия шире, чем класс.

  • @BeforeSuite / @AfterSuite — имеют самый широкий охват, выполняются перед любыми тестами в рамках всей Suite (набора тестов) и после всех тестов соответственно. Пример — генерация общего отчета или запуск/остановка внешних сервисов.

Аннотации для управления группами и зависимостями

  • @BeforeGroups / @AfterGroups — выполняются перед выполнением первой и после выполнения последней тестового метода, принадлежащего указанной группе (groups параметр в @Test).

  • @Listeners — позволяет подключить слушателей (Listeners) к тестовому классу или всей Suite для мониторинга событий тестового выполнения (например, для кастомного логирования или обработки неудачных тестов).

    @Listeners({CustomTestListener.class, ReportListener.class})
    public class LoginTestSuite {
        // тесты
    }
    

Аннотации для параметризации и передачи данных

  • @Parameters — позволяет передавать параметры из TestNG XML-конфигурации непосредственно в тестовый метод.

    <!-- testng.xml -->
    <parameter name="browser" value="chrome" />
    
    @Test
    @Parameters({"browser", "environment"})
    public void crossBrowserTest(String browser, String env) {
        // тест использует параметры из XML
    }
    
  • @DataProvider — одна из самых мощных аннотация. Она позволяет методу возвращать набор данных (массив объектов), которые будут использоваться для параметризованного выполнения теста. Каждый набор данных запускает тестовый метод отдельно.

    @DataProvider(name = "loginCredentials")
    public Object[][] provideLoginData() {
        return new Object[][] {
            {"user1", "pass123"},
            {"user2", "pass456"},
            {"", "pass789"} // негативный тест
        };
    }
    
    @Test(dataProvider = "loginCredentials")
    public void testLoginWithData(String username, String password) {
        // этот метод выполнится 3 раза с разными данными
    }
    

Аннотации для управления порядком и конфигурацией

  • @Factory — аннотация для метода, который динамически создает несколько экземпляров тестовых классов. Часто используется в комбинации с @DataProvider для создания отдельных тестовых инстансов с разными начальными состояниями или параметрами.

  • @Ignore (или параметр enabled=false в @Test) — позволяет отключить выполнение тестового метода или всего класса. Тест остается в коде, но не будет запущен.

Практическое применение и важность

Выбор правильной аннотации напрямую влияет на:

  1. Читаемость и структуру тестового кода.
  2. Эффективность использования ресурсов (не открывать драйвер браузера 100 раз, если можно открыть один раз для группы тестов).
  3. Управление зависимостьями и порядком выполнения (например, @BeforeSuite для запуска Docker-контейнера с базой данных).
  4. Мощность тестирования через параметризацию (@DataProvider) и конфигурацию (@Parameters).

Понимание этих аннотации и их области действия (Scope) — фундамент для создания стабильных, масштабируемых и легко поддерживаемых автоматизированных тестовых комплексов на TestNG. В реальных проектах часто используется комбинация: @BeforeSuite для глобальной подготовки, @BeforeClass для подготовки модуля, @BeforeMethod для очистки состояния, и @Test с @DataProvider для покрытия различных сценариев.