07/11/2026

RestAssured и Maven

Разбор ключевых концепций RestAssured и Maven для прохождения технического собеседования на позицию QA Automation Engineer. Практические примеры, частые вопросы и план подготовки.

🟢 Часть 1. RestAssured (Тестирование API)

Что это? Библиотека на Java для тестирования REST API. Она использует BDD-синтаксис (Given / When / Then), что делает тесты читаемыми. По сути, это DSL (Domain Specific Language).

Ключевые концепции для собеседования:

  1. Базовый синтаксис (BDD):
    • given() — подготовка (headers, query params, body, auth).
    • when() — действие (HTTP метод: GET, POST, PUT, DELETE).
    • then() — проверки (assertions, status code, body).
  2. RequestSpecification и ResponseSpecification:
    • Зачем нужны? Чтобы избежать дублирования кода. Выносишь базовые URL, headers и auth в RequestSpec, а ожидаемые коды ответов — в ResponseSpec.
  3. Извлечение данных (Extracting):
    • Используются методы .jsonPath().get("path.to.value") или .path("path.to.value").
  4. Матчеры (Assertions):
    • RestAssured тесно интегрирован с библиотекой Hamcrest.
    • Примеры:equalTo(), hasSize(), containsString(), hasItems().
  5. Логирование:
    • .log().all() (выводит всё: headers, body, params) или .log().ifValidationFails() (очень полезно, чтобы не засорять консоль при успешных тестах).

💻 Практический пример (как писать на доске/в IDE):

// Создание переиспользуемого RequestSpec
RequestSpecification requestSpec = new RequestSpecBuilder()
    .setBaseUri("https://api.example.com")
    .addHeader("Content-Type", "application/json")
    .build();

// Сам тест
given()
    .spec(requestSpec)
    .queryParam("status", "active")
.when()
    .get("/users")
.then()
    .statusCode(200)
    .body("data.size()", greaterThan(0)) // Проверка через Hamcrest
    .body("data[0].name", equalTo("Вика")); // Проверка конкретного поля

🔵 Часть 2. Maven (Сборка и зависимости)

Что это? Инструмент для управления зависимостями и сборки проекта. В QA Automation он нужен, чтобы подключать библиотеки (RestAssured, JUnit, Selenide) и запускать тесты через командную строку или CI/CD.

Ключевые концепции для собеседования:

  1. pom.xml (Project Object Model):
    • Главный файл проекта. Содержит информацию о зависимостях, плагинах и настройках сборки.
  2. Dependencies (Зависимости):
    • Scope (Область видимости): Очень частый вопрос!
      • compile (по умолчанию) — нужна для компиляции и запуска.
      • test — нужна только для запуска тестов (например, JUnit, TestNG, RestAssured).
      • provided — нужна для компиляции, но предоставляется сервером при запуске (например, Servlet API).
  3. Plugins (Плагины):
    • Расширяют функционал Maven.
    • Maven Surefire Plugin — самый важный для QA. Отвечает за запуск тестов (JUnit/TestNG) на этапе test.
    • Maven Compiler Plugin — задает версию Java (source/target).
  4. Build Lifecycle (Жизненный цикл сборки):
    • Нужно знать основные фазы по порядку:
      1. validate (проверка pom.xml)
      2. compile (компиляция основного кода)
      3. test (запуск юнит/автотестов)
      4. package (упаковка в jar/war)
      5. install (копирует пакет в локальный репозиторий Maven).
  5. Profiles (Профили):
    • Позволяют менять настройки сборки в зависимости от окружения. Например, профиль dev запускает тесты на тестовом API, а prod — на продуктовом. Передаются флагом -P.

🎯 Часть 3. Топ вопросов на собеседовании (Q&A)

Вопрос 1: Как в RestAssured передать динамические данные в URL?Ответ: Использовать path parameters. В URL ставим плейсхолдер {id}, а в given() передаем .pathParam("id", 123).

Вопрос 2: В чем разница между jsonPath и JsonPath (класс) в RestAssured?Ответ: Метод .jsonPath() (с маленькой буквы) возвращает объект io.restassured.path.json.JsonPath, который позволяет парсить JSON. Это часть API RestAssured.

Вопрос 3: Как в Maven запустить только один конкретный тест?Ответ: Через Maven Surefire Plugin. Команда: mvn test -Dtest=MyTestClass#myTestMethod.

Вопрос 4: Что такое Maven Local Repository и как он работает?Ответ: Это папка на компьютере (обычно ~/.m2/repository), куда Maven скачивает зависимости. При следующей сборке Maven сначала смотрит туда, и если библиотеки там нет — идет в центральный репозиторий (Maven Central).

Вопрос 5: Как обработать ошибку (например, 500 Internal Server Error) в RestAssured, чтобы тест не упал?Ответ: По умолчанию RestAssured бросает AssertionError при кодах 3xx, 4xx, 5xx. Чтобы этого избежать, нужно использовать .extract().response() до блока then(), либо отключить стандартные проверки через RelaxedHTTPSValidation (если проблема с SSL) или явно указать .statusCode(anyOf(200, 500)).