Перейти к основному содержимому

Практикум 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-проект можно расширить:

Page Object и явные ожидания (WebDriverWait) — те же принципы, что в 1013.


Типичные ошибки

ОшибкаРешение
Connection refusedПроверьте URL, VPN, доступ к стенду
Тест зависит от порядка запускаИзолируйте данные, не шарьте state между тестами
Хардкод токена в кодеПеременные окружения или @BeforeAll из CI secrets
Дублирование HTTP-логикиВынесите given() в helper или базовый класс

Что дальше

  1. Интеграционное тестирование — стыки сервисов и БД.
  2. Selenium на Java — UI-автоматизация.
  3. Git для QA — хранение тестов в репозитории.
  4. Запуск mvn test в CI/CD.

Навигация по разделу «Тестирование»


См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").