Какие аннотации использовал для автотестов?
Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Основные аннотации в фреймворках для автотестов
В своей практике QA Automation Engineer я использую широкий спектр аннотаций в зависимости от фреймворка (JUnit, TestNG, pytest и др.), которые служат метаданными для управления жизненным циклом тестов, их группировки и настройки окружения. Ниже — ключевые категории и примеры.
1. Аннотации для управления жизненным циклом теста (JUnit 5 / Jupiter)
Эти аннотации определяют, когда выполняются определённые методы.
import org.junit.jupiter.api.*;
public class LifecycleTest {
@BeforeAll
static void initAll() {
// Выполняется ПЕРЕД всеми тестами класса (1 раз)
}
@BeforeEach
void init() {
// Выполняется перед КАЖДЫМ тестом
}
@Test
void myTest() {
// Сам тестовый метод
}
@AfterEach
void tearDown() {
// Выполняется после КАЖДОГО теста
}
@AfterAll
static void tearDownAll() {
// Выполняется ПОСЛЕ всех тестов класса (1 раз)
}
}
2. Аннотации для маркировки и фильтрации тестов
Позволяют категоризировать тесты для выборочного запуска.
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.DisplayName;
@Tag("integration") // Тег для группировки (например, "smoke", "regression")
public class FilteringTest {
@Test
@Tag("fast")
@DisplayName("Проверка быстрой операции") // Человекочитаемое имя в отчётах
void fastTest() { }
@Test
@Disabled("Баг JIRA-123") // Временно отключает тест
void brokenTest() { }
}
3. Аннотации для параметризации (Data-Driven Testing)
Ключевые для параметризованных тестов, где один тест запускается с разными наборами данных.
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import org.junit.jupiter.params.provider.CsvSource;
public class ParameterizedTests {
@ParameterizedTest
@ValueSource(strings = {"data1", "data2"})
void testWithValues(String data) { }
@ParameterizedTest
@CsvSource({"1, 'name1'", "2, 'name2'"})
void testWithCsv(int id, String name) { }
}
4. Аннотации для управления порядком и зависимостями (TestNG)
TestNG предоставляет расширенные возможности по сравнению с JUnit.
import org.testng.annotations.*;
public class TestNGExample {
@Test(priority = 1, groups = {"smoke"})
public void highPriorityTest() { }
@Test(dependsOnMethods = {"highPriorityTest"}) // Зависимость между тестами
public void dependentTest() { }
@Test(timeOut = 5000) // Ограничение времени выполнения
public void timeoutTest() { }
@Test(enabled = false) // Аналог @Disabled в JUnit
public void disabledTest() { }
}
5. Аннотации для настройки тестового окружения
Часто используются в связке с фреймворками (Spring, Selenium) для инъекции зависимостей.
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;
@SpringBootTest
@TestPropertySource(locations = "/test.properties") // Загрузка конфигурации
public class IntegrationTest {
// Контекст Spring загружается перед тестами
}
6. Аннотации в Python (pytest)
В pytest аннотации реализованы через декораторы.
import pytest
@pytest.fixture(scope="session") # Фикстура (аналог @BeforeAll)
def global_data():
return {"key": "value"}
@pytest.mark.smoke # Маркировка теста
@pytest.mark.parametrize("input,expected", [(1, 2), (3, 4)]) # Параметризация
def test_example(input, expected, global_data):
assert input + 1 == expected
7. Кастомные аннотации
В сложных проектах мы создаём собственные аннотации для унификации повторяющихся конфигураций.
import io.qameta.allure.Epic;
import io.qameta.allure.Feature;
@Epic("Авторизация") // Аннотации для Allure-отчётности
@Feature("Логин")
public class LoginTest {
@Test
@AllureId("TEST-123") // Связь с тикетом
@Description("Проверка ввода валидных данных")
void validLoginTest() { }
}
Резюме по использованию
- Жизненный цикл:
@BeforeAll,@BeforeEach,@AfterEach,@AfterAll(JUnit),@BeforeMethod,@AfterMethod(TestNG). - Маркировка и фильтрация:
@Tag(JUnit),@Test(groups = {...})(TestNG),@pytest.mark(pytest). - Параметризация:
@ParameterizedTestс провайдерами (@CsvSource,@ValueSource). - Зависимости и порядок:
@Test(dependsOnMethods, priority)в TestNG. - Отчётность и метаданные:
@DisplayName,@Description, аннотации Allure. - Интеграция: Аннотации Spring (
@SpringBootTest), Selenium (часто через кастомные врапперы).
Правильный выбор аннотаций напрямую влияет на читаемость, поддерживаемость и гибкость тестового набора, позволяя эффективно организовывать сложные сценарии и интеграции. В реальных проектах я комбинирую стандартные аннотации с кастомными, адаптируя их под архитектуру продукта и процессы команды.