Ответ
В своих проектах по автоматизации я использую JUnit 5 (Jupiter) как основной фреймворк. Вот ключевые аннотации и как я их применяю:
1. Аннотации жизненного цикла теста:
-
@BeforeAll/@AfterAll: Использую для настройки и завершения работы общих ресурсов, которые требуются для всех тестов в классе. Например, запуск/остановку Selenium WebDriver, инициализацию базы тестовых данных или поднятие тестового сервера. Методы должны бытьstatic.public class WebTestBase { protected static WebDriver driver; @BeforeAll static void setupAll() { WebDriverManager.chromedriver().setup(); driver = new ChromeDriver(); driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5)); } @AfterAll static void tearDownAll() { if (driver != null) { driver.quit(); } } } -
@BeforeEach/@AfterEach: Использую для подготовки и очистки состояния перед и после каждого тестового метода. Например, переход на стартовую страницу, логин в систему, очистка cookies или сброс базы данных к известному состоянию.public class LoginTest extends WebTestBase { @BeforeEach void openLoginPage() { driver.get("https://app.test.com/login"); driver.manage().deleteAllCookies(); } @AfterEach void captureScreenshotOnFailure(TestInfo testInfo) { if (testInfo.getTags().contains("ui") && /* проверка на провал теста */) { // Сохраняем скриншот для анализа } } }
2. Аннотация выполнения теста:
@Test: Помечает метод как тестовый. Часто комбинирую с@DisplayNameдля читаемых отчетов.@Test @DisplayName("Успешный логин с валидными кредами") void successfulLoginWithValidCredentials() { loginPage.enterCredentials("user", "pass"); loginPage.submit(); assertThat(dashboardPage.isLoaded()).isTrue(); }
3. Аннотации для управления выполнением:
@Disabled: Временно отключаю тест, если он падает из-за дефекта в тестируемом приложении или требует доработки. Обязательно указываю причину вStringзначении.@Test @Disabled("Отключено до фикса бага PROJ-1234 в API") void testFeatureWithKnownBug() { ... }-
@Tag: Группирую тесты для выборочного запуска (например, через Maven/Gradle). Это критично для CI/CD.@Test @Tag("smoke") // Быстрые проверки основной функциональности @Tag("regression") void criticalUserJourney() { ... } @Test @Tag("slow") // Долгие интеграционные тесты @Tag("api") void fullDataImportTest() { ... }Запуск только smoke-тестов:
mvn test -Dgroups=smoke
4. Аннотации для параметризованных тестов (@ParameterizedTest, @ValueSource, @CsvSource):
Широко использую для тестирования одного сценария с разными входными данными (позитивные/негативные кейсы).
@ParameterizedTest
@CsvSource({
"admin, admin123, true",
"user, wrongpass, false",
"'', '', false"
})
@DisplayName("Проверка логина с разными данными")
void testLoginParametrized(String username, String password, boolean expectedSuccess) {
boolean actualResult = loginService.authenticate(username, password);
assertThat(actualResult).isEqualTo(expectedSuccess);
}
Этот набор аннотаций позволяет создавать хорошо структурированные, поддерживаемые и эффективные наборы автотестов.