Всем привет, меня зовут Сергей Прощаев и в этой статье расскажу про первые шаги в Java для автоматизации тестирования.
Мы разберём, почему Java уже более 25 лет остаётся главным языком для корпоративного тестирования, напишем первую простую программу и на простых примерах увидим, как работают переменные, условия и циклы. Также покажу, где брать инструменты и проходить практику, чтобы это все не осталось в планах и несбыточных мечтах.
Почему Java, а не Python? Спор в комментариях гарантирован:)
Каждый год в Telegram‑чатах QA‑инженеров, на которые я подписан, разгорается спор на тему: «Почему мы учим Java, если Python проще?». Давайте разберемся.
Да, на Python написать скрипт для проверки API можно в 5 строк. Но когда вы придёте в крупный банк, ритейлер или аутсорс‑компанию, вы увидите там экосистему, которая в большинстве случаев заточена под Java:
Selenium — стандарт де‑факто. Хотя биндинги есть под всё, основные фреймворки (JUnit, TestNG, Allure) исторически и архитектурно ближе к Java.
Интеграция с корпоративным зоопарком. CI/CD (Jenkins, TeamCity), системы управления тест‑кейсами (Test IT, Qase), логгеры — всё это дружит с Java без костылей.
Строгая типизация. Для автотестов это плюс. Вы будете тратить меньше времени на отладку, потому что компилятор поймает глупую ошибку с типами данных до того, как тест упал в 3 часа ночи.
В одном из проектов мы нанимали автоматизатора, который отлично знал Python, но не понимал, как устроены maven и многопоточность в Java. Первый спринт он потратил на то, чтобы заставить Selenium работать параллельно на трёх воркерах. На Java эта задача решается добавлением одной аннотации. Выбор языка — это не вопрос «что легче», а вопрос «что дешевле поддерживать команде».
«Открытый урок»: первые шаги в Java для автоматизации
Сегодня мы не будем погружаться в дебри Spring или многопоточности. Наша цель — перестать бояться кода и написать что‑то работающее. Для этого возьмём реальную задачу из тестирования: представьте, что нам нужно автоматизировать проверку формы регистрации. Мы напишем мини‑программу, которая проверяет: подходит ли пароль по длине и совпадают ли введённые пароли.
Настраиваем окружение
Перед тем, как писать код, нам понадобятся три вещи:
JDK (Java Development Kit) — скачайте OpenJDK 11 или 17. Не гонитесь за последними версиями — как правило большие корпорации любят долго сидеть на старых версиях. И очень часто можно увидеть проекты на Java 8. Для освоения и первых шагов этого вполне будет более чем достаточно. Но если очень хочется, то добро пожаловать в Java 25.
IntelliJ IDEA Community Edition — лучшая среда для Java‑разработчика. Бесплатная и самая популярная. Если есть проблема с ее загрузкой, то можно попробовать один из продуктов импортозамещения.
Git — чтобы потом залить код на GitHub.
Вся установка — это просто «далее‑далее‑далее». С этим справляются все. Здесь останавливаться не будем.
Пишем первую программу: «Валидатор пароля»
Задача: у нас есть форма регистрации. Мы хотим проверить, что пароль длиннее 8 символов и что подтверждение пароля совпадает с оригиналом.
Структура проекта и пакеты
В Java принято хранить классы в пакетах — это как папки на компьютере. Для нашего проекта создадим структуру:
src/ └── main/ └── java/ └── ru/ └── otus/ └── firststeps/ └── PasswordValidator.java
Пакет ru.otus.firststeps говорит сам за себя. Это наш первый маленький шаг к порядку.
Создадим класс PasswordValidator. Весь код я выложил в репозиторий на GitHub, ссылка будет в конце статьи. Сейчас разберём ключевые моменты.
package ru.otus.firststeps; public class PasswordValidator { public static void main(String[] args) { // Это наши входные данные (представьте, что мы получили их из веб-формы) String password = "Qwerty123"; String confirmPassword = "Qwerty123"; // Переменные для хранения результатов проверки boolean isLengthValid; boolean isPasswordMatch; // Условная конструкция: проверяем длину if (password.length() >= 8) { isLengthValid = true; System.out.println("Длина пароля корректна"); } else { isLengthValid = false; System.out.println("Ошибка: пароль должен быть не менее 8 символов"); } // Проверяем совпадение паролей if (password.equals(confirmPassword)) { isPasswordMatch = true; System.out.println("Пароли совпадают"); } else { isPasswordMatch = false; System.out.println("Ошибка: пароли не совпадают"); } // Итоговый вердикт if (isLengthValid && isPasswordMatch) { System.out.println("Регистрация возможна: все проверки пройдены"); } else { System.out.println("Регистрация отклонена: исправьте ошибки"); } } }
Этот код — буквально первое, что пишет любой Java‑разработчик. Здесь нет сложной логики, но есть всё, с чего мы начинаем: переменные, условия и вывод в консоль.
Теперь разберем эти «многобукфф» по частям.
Переменные и типы данных
String — текст. Сюда пишем все, что пишется из букв и цифр и различных знаков.
boolean — правда/ложь.
Мы могли бы использовать int для подсчёта попыток или List для хранения списка ошибок, но для старта достаточно строк и флагов.
Условные конструкции if/else
Это — мозг нашей программы. Если условие в скобках истинно (true), выполняется первый блок, если ложно (false) — второй. В наших тестах мы постоянно будем проверять условия: если элемент отобразился, то кликни, иначе упади с ошибкой.Метод equals() в Java строки нельзя сравнивать через ==. Это частая ошибка новичков. == сравнивает ссылки на объекты, а equals() — содержимое. В своих код‑ревью я всегда подсвечиваю этот момент новичкам.
Усложняем пример: добавляем цикл и массив
Представим, что мы проверяем не один паро��ь, а целый набор тестовых данных. Здесь нам помогут циклы. Давайте проверим сразу три комбинации паролей и выведем результаты в виде отчёта.
Создадим новый класс BulkValidator:
package ru.otus.firststeps; public class BulkValidator { public static void main(String[] args) { // Массив тестовых данных String[][] testData = { {"Qwerty123", "Qwerty123"}, // Валидный случай {"12345", "12345"}, // Слишком короткий {"StrongPass", "WrongPass"} // Не совпадают }; System.out.println("ОТЧЁТ ВАЛИДАЦИИ:"); // Цикл for: так проходим по всем элементам массива for (int i = 0; i < testData.length; i++) { String password = testData[i][0]; String confirm = testData[i][1]; System.out.println("\nТестовый случай №" + (i + 1) + ":"); System.out.println("Пароль: " + password); System.out.println("Подтверждение: " + confirm); // Проверки if (password.length() >= 8) { System.out.println("Длина ОК"); } else { System.out.println("Длина НЕ ОК"); } if (password.equals(confirm)) { System.out.println("Совпадение ОК"); } else { System.out.println("Совпадение НЕ ОК"); } } } }
Запустив этот код, мы получим структурированный отчёт в консоли. Согласитесь, это уже отдалённо напоминает работу тест‑раннера, который прогоняет набор тестов и пишет, что упало, а что прошло.
Причём здесь автоматизация тестирования?
Теперь давайте свяжем этот код с реальностью. Мы пойдём дальше и покажем, как этот же валидатор превращается в настоящий автотест с использованием JUnit5. Выглядеть это будет так:
package ru.otus.firststeps; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Assertions; class PasswordValidatorTest { @Test void shouldPassWhenPasswordIsValidAndMatches() { // Данные (Given) String password = "StrongPass123"; String confirm = "StrongPass123"; // Действие (When) boolean isLengthValid = password.length() >= 8; boolean isPasswordMatch = password.equals(confirm); // Проверка (Then) Assertions.assertTrue(isLengthValid, "Длина пароля менее 8 символов"); Assertions.assertTrue(isPasswordMatch, "Пароли не совпадают"); } @Test void shouldFailWhenPasswordTooShort() { String password = "123"; String confirm = "123"; boolean isLengthValid = password.length() >= 8; boolean isPasswordMatch = password.equals(confirm); Assertions.assertFalse(isLengthValid, "Пароль должен быть забракован из-за длины"); Assertions.assertTrue(isPasswordMatch); } }
Поздравляю! Это и есть автоматизация тестирования на Java. Мы просто берём нашу логику, оборачиваем её в методы с аннотацией @Test и используем встроенные средства проверки (Assertions). Все волшебство — в структуре и инструментах, а логика остаётся той же, что и в наших первых примерах.
Визуализируем: как тест взаимодействует с системой
Чтобы лучше понять место Java‑кода в процессе тестирования, посмотрите на простую диаграмму последовательности. Подробные диаграммы можно рисовать в Mermaid. Она показывает, как наш тест общается с браузером и приложением.

Диаграмма наглядно показывает как Java‑тест — управляет всем процессом: отдаёт команды, но не лезет в механику браузера. Вся сложность скрыта за фреймворками (Selenium), а мы лишь пишем логику на том же Java, что и в наших примерах.
Что рекомендуют лучшие практики тестирования?
За 10 лет в разработке я видел код, от которого хотелось закрыть монитор и уйти в лес. Чтобы вы не повторяли чужих ошибок, запомните три правила:
Правило бойскаута: оставляй код чище, чем ты его нашёл. Если видите дублирование (тот же валидатор пароля копируется в 10 местах) — выносите в отдельный приватный метод этого же класса.
Именование переменных это всё! Переменная
a1,b2заставит подумать что в ней находится, а назначение переменнойuserPasswordFromForm— понятно без комментариев. Если вы обнаруживаете, что вам нужен комментарий для объяснения переменной или функции — перепишите её имя так, чтобы оно само объясняло своё назначение.Один тест — одна проверка. Не надо в одном
@Testметоде проверять и логин, и регистрацию, и корзину. Когда такой тест упадёт, вы полдня будете искать причину.
На одном проекте мы сократили время прогона регресса в 3 раза только за счёт того, что переписали «монстров» (тесты, которые проверяли по 20 сценариев сразу) на маленькие атомарные тесты. Java позволяет делать это легко и элегантно.
Заключение
Java в автоматизации — это не страшно. Это просто набор инструментов и договорённостей. Сегодня мы написали две программы, разобрали типы данных, условия и циклы. Этого достаточно, чтобы понимать 80% кода, который пишут автоматизаторы в повседневной работе.

Если вы хотите пойти дальше и разобраться, как писать промышленные автотесты на Java — с фреймворками, отчётами и запуском различных инструментариев, то приходите к нам на специализацию по «Инженер по автоматизации тестирования» («QA Automation Engineer»). Мы как раз будем разбирать первые шаги, но уже в контексте реальных задач автоматизации.
Если хотите понять формат обучения — записывайтесь на бесплатные уроки от преподавателей специализации:
12 марта в 20:00. «Первый автотест с Playwright)». Записаться
23 марта в 20:00. «ИИ в автотестах: помощник или угроза?». Записаться
Еще больше бесплатных уроков от п��еподавателей курсов можно посмотреть в календаре мероприятий.
