Найти в Дзене

Реализуем тестирование Rest API в Intellij IDEA JAVA.

В прошлой статье мы разобрали как добавить SQL в наши тесты. Сегодня разберём, как добавить API в автоматизированное тестирование! Из статьи про окружение, мы знаем какие зависимости нам нужны для API, это: <!-- генерация отчёта allure -->
<dependency>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-junit5</artifactId>
<version>2.17.0</version>
<scope>test</scope>
</dependency>
<!-- для отчёта в Allure API -->
<dependency>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-rest-assured</artifactId>
<version>2.17.0</version>
</dependency>
<!-- для отправки API -->
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>5.1.0</version>
<scope>test</scope>
</dependency> Для примера нам подойдёт бесплатный источник с API запросами. Давайте разберёмся с самой структурой запроса, которую нужно прописывать в JAVA. given()
.filter(new AllureRestAssured())
.log().all()
.header("Authorization", "Bear
Оглавление

В прошлой статье мы разобрали как добавить SQL в наши тесты. Сегодня разберём, как добавить API в автоматизированное тестирование!

Из статьи про окружение, мы знаем какие зависимости нам нужны для API, это:

-2
<!-- генерация отчёта allure -->
<dependency>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-junit5</artifactId>
<version>2.17.0</version>
<scope>test</scope>
</dependency>

<!-- для отчёта в Allure API -->
<dependency>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-rest-assured</artifactId>
<version>2.17.0</version>
</dependency>

<!-- для отправки API -->
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>5.1.0</version>
<scope>test</scope>
</dependency>

GET/ Post/ PUT

Для примера нам подойдёт бесплатный источник с API запросами.

Давайте разберёмся с самой структурой запроса, которую нужно прописывать в JAVA.

given()
.filter(new AllureRestAssured())
.log().all()
.header("Authorization", "Bearer ")
.contentType(ContentType.JSON)
.when()
.get("https://reqres.in/api/users?page=2")
.prettyPeek()
.then()
.statusCode(200);

Это стандартный набора запроса на JAVA

  • Чтобы запросы учитывались в отчёте Allure, добавим .filter(new AllureRestAssured()).
  • Для вывода запроса и его тела в консоль используем .log().all().
  • .header("Authorization", "Bearer ") может потребоваться не для всех запросов, например, если ваш запрос должен проходить только с токеном авторизации.
  • .contentType(ContentType.JSON) — обязательная функция, которая указывает формат отправки тела запроса. Для GET-запроса, как в данном случае, она не нужна.
  • .get("https://reqres.in/api/users?page=2") — это сам запрос, где мы выбираем метод (GET, POST, PUT и т. д.).
  • .prettyPeek() используется для вывода тела ответа в консоль.
  • .statusCode(200); — это небольшая проверка статуса ответа.

Использование GET запроса

-3

Это вернёт нам:

-4

Однако этот тест пока не выполняет никаких функций, так как мы не проверяем ответ и не извлекаем из него данные. Давайте исправим это!

  • 1 вариант, он не совсем удобный, так как из тела ответа можно взять только один объект.
String value = String.valueOf(given()
.filter(new AllureRestAssured())
.header("Authorization", "Bearer " + Token)
.contentType(ContentType.JSON)
.when()
.body(body)
.post(HostAddress + ".........")
.prettyPeek()
.then()
.statusCode(200)
.extract().jsonPath().getString("result[0].message"));
-5

Взяли значение page и назначили в перемённую value. Сравниваем её с ожидаемым значением, пишет текст ошибки если не совпадают значения.

  • 2 вариант, советую его использовать, так как мы берём всё тело ответа, а не опредёлённое значение.
JsonPath response = given()
.filter(new AllureRestAssured())
.header("Authorization", "Bearer " + Token)
.param("LocalUid", LocalUid)
.log().all()
.contentType(ContentType.JSON)
.when()
.get(ApiVimis + "..............")
.prettyPeek()
.then()
.statusCode(200)
.extract().jsonPath();

-6

Всё также сравниваем значение page и сравниваем с ожидаемым результатом.

Использование POST запроса

Используем запрос добавления пользователя:

-7

Пишем запрос:

-8

В ответе проверяем что приходит id нашей записи, то есть что не равняется null.

Универсальный запрос

@Step("Универсальный запрос")
public JsonPath Api (String url, String method, String[] params, String[] header, String body, Integer statusCode) throws IOException {

RestAssured.baseURI = url;
RequestSpecification Request = RestAssured.given();

// Собираем параметры заголовков
if (header != null ) {
for (int i = 0; i < header.length; i += 2) {
Request.given().header(header[i], header[i + 1]);
}
}


// Собираем параметры запроса
if (params != null) {
for (int i = 0; i < params.length; i += 2) {
Request.given().param(params[i], params[i + 1]);
}
}

// Условие нужно ли записыывать в консоль тело запроса
if (!url.contains("/api/authenticate") && !url.contains("/IEMKRegionalService/services/patient/search/") &&
!url.contains("/api/smd")) {
Request.log().body();
}

// Условие нужны ли нам куки
if (cookies != null) {
Request.given().cookie(String.valueOf(cookies));
}

/** Записываем тело запроса */
PrintWriter out2 = new PrintWriter("src/test/resources/JsonBody.json");
out2.println(body);
out2.close();

Response = Request
.log().uri()
.log().headers()
.contentType(ContentType.JSON)
.when()
.body(body)
.request(method)
.prettyPeek()
.then()
.extract().jsonPath();

// Условие проверяем ли мы статус ответа
if (statusCode != 0) {
Request.then().statusCode(statusCode);
}

/** Записываем тело ответа */
System.out.println("Записываем");
PrintWriter out3 = new PrintWriter("src/test/resources/JsonResponse.json");
out3.println(Response.prettyPrint());
out3.close();

Allure.addAttachment("Запрос: ",
new String(Files.readAllBytes(Paths.get("src/test/resources/JsonBody.json"))));

Allure.addAttachment("Ответ: ",
new String(Files.readAllBytes(Paths.get("src/test/resources/JsonResponse.json"))));

return Response;
}

Использование

Api("https://reqres.in/api/users?page=2", "get", null, null,"", 200);

Отчёт по тестированию API

Из статьи знаем как вывести отчёт.

allure generate target/allure-results --clean
-9

Если у вас есть вопросы или вы просто хотите стать частью команды тестировщиков, то переходи в ТГ канал, где можем пообщаться с единомышленниками и найти много интересных и полезных знаний!Также если вам нужна индивидуальная консультация, менторство и помощь в создании проекта пишите в ТГ канал!

Обучение тестированию