Разбор ключевых концепций RestAssured и Maven для прохождения технического собеседования на позицию QA Automation Engineer. Практические примеры, частые вопросы и план подготовки.
Что это? Библиотека на Java для тестирования REST API. Она использует BDD-синтаксис (Given / When / Then), что делает тесты читаемыми. По сути, это DSL (Domain Specific Language).
given() — подготовка (headers, query params, body, auth).when() — действие (HTTP метод: GET, POST, PUT, DELETE).then() — проверки (assertions, status code, body).RequestSpec, а ожидаемые коды ответов — в ResponseSpec..jsonPath().get("path.to.value") или .path("path.to.value").equalTo(), hasSize(), containsString(), hasItems()..log().all() (выводит всё: headers, body, params) или .log().ifValidationFails() (очень полезно, чтобы не засорять консоль при успешных тестах).// Создание переиспользуемого 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("Вика")); // Проверка конкретного поляЧто это? Инструмент для управления зависимостями и сборки проекта. В QA Automation он нужен, чтобы подключать библиотеки (RestAssured, JUnit, Selenide) и запускать тесты через командную строку или CI/CD.
pom.xml (Project Object Model):compile (по умолчанию) — нужна для компиляции и запуска.test — нужна только для запуска тестов (например, JUnit, TestNG, RestAssured).provided — нужна для компиляции, но предоставляется сервером при запуске (например, Servlet API).test.validate (проверка pom.xml)compile (компиляция основного кода)test (запуск юнит/автотестов)package (упаковка в jar/war)install (копирует пакет в локальный репозиторий Maven).dev запускает тесты на тестовом API, а prod — на продуктовом. Передаются флагом -P.Вопрос 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)).