Практикум Java — JUnit и REST Assured
Практикум №5 (Java). После pytest-практикума — тот же цикл Arrange → Act → Assert, но в экосистеме Java. Стек: JUnit 5 (запуск и assertions) + REST Assured (HTTP API). Подходит для enterprise-команд, Android-автоматизации (Espresso) и Selenium на Java.
Зачем Java тестировщику
Java часто встречается в:
- бэкенде (Spring) и микросервисах;
- Android UI-тестах (Espresso);
- корпоративной автоматизации (Selenium + TestNG/JUnit);
- API-тестах через REST Assured.
Если вы уже знаете тестирование API и интеграционные тесты, этот практикум закрепляет их на втором языке.
Подготовка окружения
Нужны JDK 17+ (LTS) и Maven или Gradle. Проверка:
java -version
mvn -version
Создайте Maven-проект или добавьте в pom.xml зависимости:
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.10.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>5.4.0</version>
<scope>test</scope>
</dependency>
</dependencies>
Структура:
src/
├── main/java/ # код приложения (может быть пустым в учебном проекте)
└── test/java/
└── api/
└── HealthApiTest.java
Подробнее про JUnit в каталоге инструментов.
Шаг 1 — простой JUnit-тест (unit)
Проверим чистую функцию без сети — так же, как test_calculator.py в 1011:
package utils;
public class StringUtils {
public static boolean isBlank(String s) {
return s == null || s.trim().isEmpty();
}
}
package utils;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.DisplayName;
import static org.junit.jupiter.api.Assertions.*;
class StringUtilsTest {
@Test
@DisplayName("Пустая строка распознаётся как blank")
void blankStringIsBlank() {
assertTrue(StringUtils.isBlank(""));
assertTrue(StringUtils.isBlank(" "));
}
@Test
@DisplayName("Непустая строка не blank")
void nonBlankString() {
assertFalse(StringUtils.isBlank("qa"));
}
}
Запуск:
mvn test
Шаг 2 — API-тест с REST Assured
Проверим публичный учебный API JSONPlaceholder:
package api;
import io.restassured.RestAssured;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
class PostsApiTest {
@BeforeAll
static void setup() {
RestAssured.baseURI = "https://jsonplaceholder.typicode.com";
}
@Test
void getPostReturns200AndTitle() {
given()
.pathParam("id", 1)
.when()
.get("/posts/{id}")
.then()
.statusCode(200)
.body("id", equalTo(1))
.body("title", not(emptyString()))
.body("userId", greaterThan(0));
}
@Test
void createPostReturns201() {
String body = """
{"title": "QA test", "body": "from REST Assured", "userId": 1}
""";
given()
.header("Content-Type", "application/json")
.body(body)
.when()
.post("/posts")
.then()
.statusCode(201)
.body("title", equalTo("QA test"));
}
}
Здесь Given–When–Then — аналог Arrange–Act–Assert из автоматизации.
Шаг 3 — параметризация
Связь с тест-дизайном — одна логика, несколько входов:
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import static org.junit.jupiter.api.Assertions.*;
class BoundaryTest {
@ParameterizedTest
@CsvSource({
"0, false",
"1, true",
"100, true",
"-1, false"
})
void orderQuantityValidation(int qty, boolean valid) {
assertEquals(valid, qty > 0 && qty <= 100);
}
}
Связь с Selenium и Appium
Тот же Maven-проект можно расширить:
- Selenium WebDriver — см. 1181;
- Appium Java Client — см. мобильное тестирование.
Page Object и явные ожидания (WebDriverWait) — те же принципы, что в 1013.
Типичные ошибки
| Ошибка | Решение |
|---|---|
Connection refused | Проверьте URL, VPN, доступ к стенду |
| Тест зависит от порядка запуска | Изолируйте данные, не шарьте state между тестами |
| Хардкод токена в коде | Переменные окружения или @BeforeAll из CI secrets |
| Дублирование HTTP-логики | Вынесите given() в helper или базовый класс |
Что дальше
- Интеграционное тестирование — стыки сервисов и БД.
- Selenium на Java — UI-автоматизация.
- Git для QA — хранение тестов в репозитории.
- Запуск
mvn testв CI/CD.
Навигация по разделу «Тестирование»
- Практикум: 1011 Python · 1012 · 1013 · 1014 · 1015 Java · 1016 JS
- Бонус-модули: 1274
- Маршрут: О разделе
См. также
Другие статьи этого же раздела в боковом меню (как на странице "О разделе"). Что такое тестирование, чем оно отличается от QA, цепочка ошибка→дефект→сбой, верификация и валидация, виды проверок и роли в команде. Юнит-тест представляет собой автоматизированную проверку отдельной единицы программного кода. Практическое занятие и реализация интеграционного теста. Практическое занятие и реализация ручного тестирования. Практическое занятие и реализация нагрузочного тестирования. Первый автотест на JavaScript для QA: Jest для unit-проверок и Playwright для E2E в браузере. Тестирование разных признаков - доступ к коду, модульное, интеграционное, системное, приёмочное и прочие. Основные фазы - планирование и контроль, анализ и проектирование, реализация и выполнение, оценка критериев, отчетность. Что такое артефакты, каким целям и принципам они служат. Системное тестирование, в чём суть и чем отличается E2E. Использование программных средств для выполнения проверок без вмешательства человека. Порядок тестирования, как правильно проектировать стратегию реализации контроля качества.Основы тестирования программного обеспечения
Подготовка среды и создание первого теста
Проверка взаимодействия компонентов
Проверка пользовательского сценария
Проверка надежности под нагрузкой
Практикум JavaScript — Playwright и Jest
Классификация видов тестирования
Жизненный цикл тестирования
Артефакты качества в проекте
End-to-End и системное тестирование
Автоматизация тестирования
Последовательность этапов тестирования