1. Настройка тестового окружения и работа с фреймворками JUnit 5 и TestNG
Настройка тестового окружения и работа с фреймворками JUnit 5 и TestNG
Добро пожаловать на курс «Автоматизация Backend-тестирования на Java». Мы пропускаем основы синтаксиса языка, так как предполагается, что вы уже знакомы с Java Core, и сразу переходим к «мясу» — инструментам, которые превращают код в мощную систему проверки качества серверной части приложений.
В этой вводной статье мы подготовим фундамент: настроим окружение, разберем системы сборки и детально изучим два главных фреймворка для тестирования в экосистеме Java — JUnit 5 и TestNG.
Зачем нам специальное окружение?
Автоматизация бэкенда — это не просто написание скриптов. Это создание масштабируемой архитектуры, которая должна:
Для этого нам понадобятся: JDK (Java Development Kit), IDE (среда разработки) и система сборки.
Выбор IDE и JDK
Для этого курса мы рекомендуем использовать JDK 17 или JDK 21 (LTS версии) и среду разработки IntelliJ IDEA (Community или Ultimate). Это индустриальный стандарт, обеспечивающий наилучшую поддержку инструментов тестирования.
Системы сборки: Maven и Gradle
В современной Java-разработке библиотеки не скачиваются вручную в виде .jar файлов. Эту работу берут на себя системы сборки. Они управляют жизненным циклом проекта: от компиляции до запуска тестов.
!Схематичное изображение процесса сборки проекта: от исходного кода до артефактов и отчетов.
Apache Maven
Maven использует файл pom.xml (Project Object Model) для конфигурации. Это декларативный подход, основанный на XML.
Пример подключения зависимости JUnit 5 в pom.xml:
Обратите внимание на тег <scope>test</scope>. Он говорит Maven, что эта библиотека нужна только во время компиляции и запуска тестов, но не должна попасть в итоговый продакшн-сборку приложения.
Gradle
Gradle — более современный и гибкий инструмент, использующий DSL (Domain Specific Language) на базе Groovy или Kotlin. Он работает быстрее Maven благодаря инкрементальной сборке.
Тот же пример подключения JUnit 5 в build.gradle (Groovy DSL):
> Совет: Если вы начинаете новый проект с нуля, выбирайте Gradle. Если поддерживаете существующий энтерпрайз-проект, скорее всего, там будет Maven.
Фреймворк JUnit 5
JUnit 5 — это стандарт де-факто в мире Java. В отличие от предыдущей 4-й версии, он модульный и состоит из трех частей:
Жизненный цикл теста
Понимание порядка выполнения методов критически важно для настройки тестовых данных (например, подключение к базе данных перед тестами и очистка после).
Основные аннотации JUnit 5:
* @Test — помечает метод как тестовый.
* @BeforeAll — выполняется один раз перед всеми тестами в классе (метод должен быть статическим).
* @BeforeEach — выполняется перед каждым тестом.
* @AfterEach — выполняется после каждого теста.
* @AfterAll — выполняется один раз после всех тестов (метод должен быть статическим).
* @DisplayName("Описание") — задает человекочитаемое имя теста в отчетах.
!Визуализация жизненного цикла тестового класса в JUnit 5.
Пример кода:
Проверки (Assertions)
Тест без проверок бесполезен. В JUnit 5 используется класс Assertions.
* Assertions.assertEquals(expected, actual) — проверяет равенство.
* Assertions.assertTrue(condition) — проверяет истинность условия.
* Assertions.assertNotNull(object) — проверяет, что объект не null.
* Assertions.assertThrows(Exception.class, () -> { ... }) — проверяет, что код выбрасывает ожидаемое исключение.
Фреймворк TestNG
TestNG (Test Next Generation) появился раньше JUnit 5 и вдохновил его создателей на многие фичи. Он до сих пор популярен в QA-сообществе благодаря мощной конфигурации через XML и встроенной поддержке многопоточности.
Ключевые отличия TestNG
testng.xml: Позволяет гибко настраивать наборы тестов (Suites), включать/исключать пакеты, классы и методы, а также передавать параметры.@Test(dependsOnMethods = "login") позволяет запустить тест только если прошел метод login.@Test(groups = {"smoke", "regression"}) позволяет легко запускать только нужные категории тестов.Пример аннотаций TestNG (они очень похожи на JUnit, но есть отличия):
| JUnit 5 | TestNG |
| :--- | :--- |
| @BeforeAll | @BeforeSuite, @BeforeTest, @BeforeClass |
| @BeforeEach | @BeforeMethod |
| @Test | @Test |
| @AfterEach | @AfterMethod |
| @AfterAll | @AfterSuite, @AfterTest, @AfterClass |
| @Disabled | @Test(enabled = false) |
Data Providers в TestNG
Одной из киллер-фич TestNG всегда были Data Providers — способ запустить один тест с разными наборами данных.
Примечание: В JUnit 5 аналогом являются @ParameterizedTest и @MethodSource, которые мы разберем в следующих статьях.
Что выбрать: JUnit 5 или TestNG?
Этот вопрос часто вызывает холивары. Давайте посмотрим объективно:
* JUnit 5: Современный стандарт, модульный, идеально интегрируется со Spring Boot (самый популярный фреймворк для бэкенда на Java). Если вы пишете тесты рядом с кодом разработчиков — это ваш выбор. * TestNG: Мощный инструмент для сложных сценариев E2E (End-to-End) тестирования, где важна сложная логика запуска, зависимости между тестами и параллельное выполнение «из коробки».
В рамках этого курса мы будем делать упор на JUnit 5, так как он чаще встречается в требованиях к вакансиям SDET (Software Development Engineer in Test) и Backend QA.
Заключение
Мы настроили окружение и разобрались с инструментами. Теперь у вас есть понимание, как код тестов взаимодействует с системой сборки и как управлять жизненным циклом проверок.
В следующей статье мы перейдем к практике: напишем наш первый HTTP-клиент и научимся отправлять реальные запросы к API.