Підручник REST Assured для тестування автоматизації API (приклад)

Що таке Rest Assured?

Будьте впевнені дозволяє тестувати REST API за допомогою бібліотек Java і добре інтегрується з Maven. Він має дуже ефективні методи зіставлення, тому стверджувати очікувані результати також досить просто. Rest Assured має методи отримання даних майже з кожної частини запиту та відповіді, незалежно від того, наскільки складними є структури JSON.

Для спільноти тестувальників автоматизоване тестування API все ще є новим і нішевим. Складність JSON залишає тестування API недослідженим. Але це не робить його менш важливим у процесі тестування. Будьте впевнені. Іо фреймворк зробив це дуже простим, використовуючи базові основи Java, що робить його дуже бажаним для вивчення.

Навіщо потрібен Rest-Assured?

Уявіть, що ви відкриваєте карту Google і шукаєте місце, куди хочете піти, і відразу бачите найближчі ресторани, ви бачите варіанти маршруту; від деяких провідних туристичних постачальників і побачите стільки варіантів у вас під рукою. Ми всі знаємо, що вони не є продуктами Google, тоді як Google вдається це показати. Вони використовують відкритий API цих постачальників. Тепер, якщо вас попросять протестувати такий тип налаштувань, навіть до того, як користувальницький інтерфейс буде створено або знаходиться в стадії розробки, тестування API стає надзвичайно важливим, а їх повторне тестування з різними комбінаціями даних робить це дуже придатним випадком для автоматизації.

Раніше ми використовували динамічні мови, такі як groovy, ruby, щоб досягти цього, і це було складно. Тому тестування API не вивчалося функціональним тестуванням.

Але використання Rest Assured, автоматизоване тестування API, надсилання простих https-запитів із зручними налаштуваннями є простими, якщо ви маєте базове знання Java. Це необхідно для розуміння тестування API та інтеграційного тестування, але публікація цієї автоматизації, будьте впевнені, дає дуже хорошу впевненість у серверній частині, тоді як зовнішнє тестування може зосереджуватися лише на інтерфейсі користувача та операціях на стороні клієнта. Будьте впевнені, це відкрите програмне забезпечення з великою кількістю додаткових методів і бібліотек, що робить його чудовим вибором для автоматизації API.

Як налаштувати Rest Assured.io за допомогою Eclipse

Крок 1) Встановити Java. Зверніться до цього керівництво

Крок 2) Завантажте IDE, щоб почати: затемнення

Крок 3) Встановіть Maven і налаштуйте свій eclipse. Зверніться тут.

Налаштування Будьте впевнені

  1. Створіть проект Maven у своєму IDE. Ми використовуємо Intellij, але ви отримаєте подібну структуру в будь-якій IDE, яку ви можете використовувати.
  2. Відкрийте файл POM.xml
Структура проекту
Структура проекту

Для будьте впевнені.io: Для Java версія < 9 користувачів:

Додайте наведену нижче залежність до свого POM.xml:

<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-path</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>


<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>xml-path</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>


<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-schema-validator</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>

Для будьте впевнені.io : Для Java Користувачі версії 9+:

<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured-all</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>

Вирішення проблем:

Якщо ви бачите помилки та не впевнені, чи правильно завантажено залежності,

  1. Виконайте збірку maven, щоб імпортувати всі залежності, ви знову знайдете довідку щодо налаштування Maven на guru99.
  2. Все одно ви бачите помилки, потім виконайте очищення maven, а потім установіть maven, і він повинен зібратися без будь-яких помилок.
  3. Ви можете додати наведені нижче рядки у свій клас Java і побачити, що помилки компіляції відсутні.
import io.restassured.RestAssured.*;
import io.restassured.matcher.RestAssuredMatchers.*;
import org.hamcrest.Matchers.*;

Перший простий сценарій Rest Assured

Синтаксис:

Синтаксис Rest Assured.io є найкрасивішою частиною, оскільки він дуже схожий на BDD і зрозумілий.

Given(). 
        param("x", "y"). 
        header("z", "w").
when().
Method().
Then(). 
        statusCode(XXX).
        body("x, ”y", equalTo("z"));

Пояснення:

код Пояснення
Дано() Ключове слово "Given" дозволяє встановити фон, тут ви передаєте заголовки запитів, параметри запиту та шляху, тіло, файли cookie. Це необов’язково, якщо ці елементи не потрібні в запиті
Коли() Ключове слово "when" позначає передумову вашого сценарію. Наприклад, «коли» ви отримуєте/розміщуєте/поставляєте щось, зробіть щось інше.
Метод() Замініть це будь-якою з операцій CRUD (get/post/put/delete)
Потім() Ваші умови підтвердження та збігу знаходяться тут

Тепер, коли у вас є налаштування та деякі знання синтаксису, давайте створимо наш перший простий тест. Це нормально, якщо поки що структура здається вам новою, у міру подальшої інтерпретації коду кожного рядка ви зрозумієте її.

Що ти принесеш?

Відкрийте браузер і натисніть – https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1. Переконайтеся, що ви бачите щось, як показано нижче.

Будьте впевнені, сценарій

Якщо ви отримуєте помилку в браузері під час спроби отримати відповідь на запит,

  1. Перевірте, чи використовували ви Https або Http. Ваш веб-переглядач може мати налаштування, щоб не відкривати небезпечні веб-сайти.
  2. Подивіться, чи є у вас проксі-сервер або брандмауер, який блокує ваш браузер для відкриття веб-сайтів.

*Примітка: – ви не використовували тут ні заголовків, ні тіла, ні cookie. Це була URL-адреса, а також ви отримуєте вміст з API і не публікуєте чи оновлюєте будь-який існуючий вміст, тому це робить виклик GET. Запам’ятайте це, щоб краще зрозуміти наш перший тест.

Мета вашого тесту:

Мета сценарію — надрукувати на вашій консолі IDE той самий вихід, який ви отримали у браузері через Rest Assured.

Давайте закодуємо це за допомогою наступних кроків:

Отримання Тіла відповіді

Крок 1) Створіть клас із назвою «myFirstRestAssuredClass»

Крок 2) Створіть метод під назвою «getResponseBody»

Крок 3) Подібно до структури, вивченої раніше, коли і потім, введіть наведений нижче код

дано(). -> Заголовки не потрібні, запит або параметр шляху.

коли(). -> Немає спеціальних умов

отримати('https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1'). ->потрібно вказати лише url

потім(). -> Ніяких конкретних тверджень не потрібно

журнал(). all() -> Після отримання всієї відповіді зареєструйте відповідь, заголовки, фактично все, що вам повертає запит.

public static void getResponseBody(){
   given().when().get("https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1").then().log()
  .all();
 
}

Тепер зауважте, що URL-адреса, яка використовується, є довгою та менш читабельною. Якщо ви уважно придивитеся, ви помітите, що використовуються 3 параметри запиту, які

  1. Customer_ID
  2. Пароль
  3. Номер рахунку

Будьте впевнені, допомагає нам передавати кожну частину (запит, шлях, параметр заголовка) окремо, роблячи код більш читабельним і легким для обслуговування. Крім того, ми можемо параметризувати дані із зовнішнього файлу за потреби.

Для використання параметрів запиту ми повертаємося до нашого визначення синтаксису та бачимо, що всі вони передаються як частина заданого.

public static void getResponseBody(){
 
   given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1")
           .when().get("https://demo.guru99.com/V4/sinkministatement.php").then().log()
           .body();
}

**Зверніть увагу, що ми використали «body» замість «all»; це допомагає нам виділити лише тіло відповіді.

вихід:

Отримання коду статусу відповіді

Наступним методом, який ми створимо, буде отримання коду статусу, а також розміщення твердження для його перевірки.

Крок 1) Створіть метод під назвою getResponseStatus()

Крок 2) Використовуйте ту саму структуру запиту, що й вище. Скопіюйте та вставте його.

Крок 3) Замість того, щоб реєструвати його, ми використовуємо вбудований метод 'getStatusCode' Rest Assured для отримання значення коду стану

Крок 4) Щоб підтвердити, що ваш код статусу дорівнює 200, ми використовуємо ключові слова – assertThat().statusCode(expectedCode)

**Примітка. URL – це змінна, яка використовується для простоти. URL-адреса містить повну URL-адресу запиту API

public static void getResponseStatus(){
   int statusCode= given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1") .when().get("https://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
   System.out.println("The response status is "+statusCode);

   given().when().get(url).then().assertThat().statusCode(200);
}

вихід:

Потреба бізнесу

Одне з основних правил автоматизації полягає в тому, що ми повинні поставити контрольні точки, щоб тест проходив лише за умови виконання всіх необхідних умов. Під час тестування API найосновнішою перевіркою є перевірка коду статусу запиту у форматі 2XX.

Повний код наразі:

import java.util.ArrayList;
import static io.restassured.RestAssured.*;
import static java.util.concurrent.TimeUnit.MILLISECONDS;

public class myFirstRestAssuredClass {

   final static String url="https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1";

   public static void main(String args[]) {

     getResponseBody();
     getResponseStatus();

; }

   //This will fetch the response body as is and log it. given and when are optional here
   public static void getResponseBody(){
       given().when().get(url).then().log()
      .all();

  given().queryParam("CUSTOMER_ID","68195")
               .queryParam("PASSWORD","1234!")
               .queryParam("Account_No","1") .when().get("https://demo.guru99.com/V4/sinkministatement.php").then().log().body();
   }

public static void getResponseStatus(){
   int statusCode= given().queryParam("CUSTOMER_ID","68195")
           .queryParam("PASSWORD","1234!")
           .queryParam("Account_No","1")
           .when().get("https://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
   System.out.println("The response status is "+statusCode);

   given().when().get(url).then().assertThat().statusCode(200);
}

}

* Примітка:

  1. 200 є успішною відповіддю для цього сценарію. Іноді вам також потрібно, щоб запит завершився помилкою, і тоді ви можете використовувати 4XX або 5XX. Спробуйте змінити код стану, вказавши недійсні параметри, і перевірте.
  2. Коли ми затверджуємо умову, на консолі не буде друкуватися, якщо немає помилки.

Сценарій для отримання різних частин відповіді

Отримання тексту відповіді та коду статусу відповіді вже розглянуто у наведеному вище сегменті. Варто зазначити, що для отримання різних частин відповіді дуже важливим є ключове слово 'витягнути'.

Header

Будьте впевнені, це дуже проста мова, і отримати заголовки так само просто. Ім’я методу – headers(). Як і раніше, ми створимо окремий метод для того ж.

public static void getResponseHeaders(){
   System.out.println("The headers in the response "+
                   get(url).then().extract()
           .headers());
}

Будь ласка, зверніть увагу, що 'given().when()' тут пропускається, а рядок коду починається з get(), це тому, що тут немає попередньої умови чи перевірки для виконання запиту та отримання відповіді. У таких випадках використовувати те саме необов’язково.

Вихід:

Ділова потреба:

Досить багато разів вам знадобиться використовувати маркер авторизації або сеансовий файл cookie для наступного запиту, і в основному ці деталі повертаються як заголовки відповіді.

Час реакції

Щоб отримати час, потрібний для отримання відповіді від серверної частини або інших низхідних систем, Rest Assured надає метод під назвою «timeIn» із відповідним timeUnit для отримання часу, необхідного для повернення відповіді.

public static void getResponseTime(){
  System.out.println("The time taken to fetch the response "+get(url)
         .timeIn(TimeUnit.MILLISECONDS) + " milliseconds");
}

вихід:

Ділова потреба:

Дуже важливою особливістю тестування API є час відповіді для вимірювання продуктивності програми. Зауважте, що час, витрачений на ваш дзвінок, може займати більше або менше часу залежно від швидкості вашого Інтернету, продуктивності API на той момент, завантаження сервера та інших факторів, що впливають на час.

Content-Type

Ви можете отримати отриманий тип вмісту відповіді за допомогою методу «contentType ()».

public static void getResponseContentType(){
   System.out.println("The content type of response "+
           get(url).then().extract()
              .contentType());
}

Вихід

Ділова потреба:

Часом отримання типу вмісту має важливе значення для забезпечення відсутності прогалин у безпеці для будь-яких загроз між джерелами або просто для того, щоб переконатися, що переданий вміст відповідає стандартам API.

Отримати окремий елемент JSON

З наданої відповіді вам пропонується обчислити загальну суму, вам потрібно отримати кожну суму та підсумувати її.

Кроки:

Крок 1) Поле суми знаходиться в масиві з ключовими «виписками», який, у свою чергу, у списку з ключем «результат»

Крок 2) Будьте впевнені, надає механізм для досягнення значень в API за допомогою «шляху»

Крок 3) Шлях досягнення суми – “result.statements.AMOUNT”. Подумайте про це як про Xpath у селені.

Крок 4) Отримайте всі суми в колекції, а потім виконайте цикл для всіх значень, щоб обчислити суму

public static void getSpecificPartOfResponseBody(){

ArrayList<String> amounts = when().get(url).then().extract().path("result.statements.AMOUNT") ;
int sumOfAll=0;
for(String a:amounts){

    System.out.println("The amount value fetched is "+a);
    sumOfAll=sumOfAll+Integer.valueOf(a);
}
System.out.println("The total amount is "+sumOfAll);

}

Примітка. Оскільки значення суми є рядковим типом даних, ми перетворюємо його на ціле число та використовуємо його для підсумовування.

вихід:

Підсумки

  • Rest Assured — це група бібліотек Java, які дозволяють автоматизувати роботу Тестування Rest API
  • Будьте певні Java-основа, та знання осн Java достатньо, щоб навчитися цьому
  • Це допомагає отримати значення запиту та відповіді зі складних структур JSON
  • Команда API запит можна налаштувати за допомогою різноманітних заголовків, запитів, параметрів шляху та будь-якого сеансу чи файлів cookie, які потрібно встановити.
  • Це допомагає встановлювати твердження та умови.
  • Хоча Rest Assured дуже корисний, коли відповідь має тип JSON, його методи можуть не працювати бездоганно, якщо ідентифікатор типу вмісту HTML або звичайний текст.