Посібник з тестування REST Assured API
⚡ Розумний підсумок
REST Assured зарекомендував себе як JavaБібліотека з відкритим кодом на основі , яка спрощує автоматизоване тестування REST API. Фреймворк дозволяє інженерам з якості перевіряти складні JSON-відповіді, заголовки, коди стану та час відгуку, використовуючи чистий синтаксис у стилі BDD з безперебійною інтеграцією з Maven.

Що таке 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-тестування та інтеграційного тестування. Rest Assured дає впевненість у роботі бекенду, тоді як фронтенд-тестери можуть зосередитися на інтерфейсі користувача та операціях на стороні клієнта. Rest Assured має відкритий вихідний код, а постійне додавання методів та бібліотек зробило його чудовим вибором для автоматизації API.
REST Assured проти Postman: Ключові відмінності
Як REST Assured, так і Postman перевіряти REST API, але кожен з них відповідає різному етапу життєвого циклу тестування. Вибір правильного інструменту залежить від навичок вашої команди, обсягу проекту та потреб інтеграції.
| Аспект | ВІДПОЧИВАЙТЕ Впевнені | Postman |
|---|---|---|
| тип | Java бібліотека для автоматизації на основі коду | API-клієнт на основі графічного інтерфейсу з підтримкою скриптів |
| Найкращий варіант використання | Пайплайни безперервної інтеграції та регресійні пакети | Ручне дослідження та швидкі перевірки API |
| Вимоги до вміння | Core Java необхідні знання | Мінімальний код; використання JavaФрагменти сценаріїв |
| Звітність | Інтегрується з TestNG, JUnitта Allure | Вбудовані зведення прогонів через Newman CLI |
Багато команд використовують Postman для ранніх прототипівping і перейдіть на REST Assured для автоматизованої регресії, як тільки API буде завершеноtract стабілізується.
Як налаштувати Rest Assured.io за допомогою Eclipse
Налаштування REST Assured включає три основні залежності: Java, IDE та Maven. Виконайте наведені нижче кроки, щоб уникнути помилок збірки пізніше.
Крок 1) Встановити Java. Зверніться до цього керівництво
Крок 2) Завантажте IDE, щоб почати: затемнення
Крок 3) Встановіть Maven і налаштуйте свій eclipse. Зверніться тут.
Налаштування Будьте впевнені
- Створіть проект Maven у вашому IDE. Ми використовуємо IntelliJ, але ви отримаєте подібну структуру в будь-якому IDE, яке ви можете використовувати.
- Відкрийте ваш POM.xml.
Структура проекту для робочого простору REST Assured Maven
Для будьте впевнені.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>
Вирішення проблем:
Якщо ви бачите помилки та не впевнені, чи залежності завантажилися правильно, виконайте такі дії:
- Виконайте збірку Maven, щоб імпортувати всі залежності. Довідку щодо налаштування Maven ви знайдете на Guru99.
- Якщо помилки не зникають, запустіть очищення Maven, а потім інсталюйте Maven. Збірка має завершитися без помилок.
- Додайте наведені нижче імпорти до вашого Java клас і переконайтеся, що немає помилок компіляції.
import io.restassured.RestAssured.*; import io.restassured.matcher.RestAssuredMatchers.*; import org.hamcrest.Matchers.*;
Перший простий сценарій Rest Assured
Після встановлення залежностей ви можете написати свій перший скрипт. Фреймворк дотримується стилю поведінково-орієнтованої розробки (BDD), який читається майже як англійська мова.
Синтаксис:
Синтаксис Rest Assured.io є найбільш читабельною частиною фреймворку, оскільки він дуже схожий на BDD та зрозумілий.
Given().
param("x", "y").
header("z", "w").
when().
Method().
Then().
statusCode(XXX).
body("x", "y", equalTo("z"));
Пояснення:
| Code | Пояснення |
|---|---|
| Дано() | Ключове слово «Given» дозволяє встановити фон. Тут ви передаєте заголовки запиту, параметри запиту та шляху, тіло запиту та файли cookie. Це необов'язково, якщо ці елементи не потрібні в запиті. |
| Коли() | Ключове слово «коли» позначає передумову вашого сценарію. Наприклад, «коли» ви щось отримаєте/опублікуєте/розмістите, зробіть щось інше. |
| Метод() | Замініть це будь-якою з CRUD-операцій (get/post/put/delete). |
| Потім() | Ваші умови assert та matcher йдуть сюди. |
Тепер, коли у вас є налаштування та деякі знання синтаксису, давайте створимо наш перший простий тест. Не біда, якщо структура здається вам новою, але в міру того, як ви будете кодувати далі та інтерпретувати кожен рядок, ви зрозумієте, що робити.
Що ти принесеш?
Відкрийте браузер і натисніть – https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1. Переконайтеся, що ви бачите щось, як показано нижче.
Зразок відповіді API, отриманої за допомогою REST Assured
Якщо ви отримуєте помилку в браузері під час спроби отримати відповідь на запит:
- Перевірте, чи використовували ви HTTPS чи HTTP. Можливо, у вашому браузері є налаштування, які блокують небезпечні вебсайти.
- Перевірте, чи не блокує проксі-сервер або брандмауер вашому браузеру відкриття веб-сайту.
*Примітка: – ви не використовували тут жодних заголовків, ні тіла, ні файлів 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 потрібно постачати.
тоді(). -> Не потрібно жодних конкретних тверджень.
log().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 параметри запиту:
- Customer_ID
- Пароль
- Номер рахунку
Rest Assured допомагає нам передавати кожну частину (запит, шлях, параметр заголовка) окремо, що робить код більш читабельним та простим у підтримці. Крім того, ми можемо параметризувати дані із зовнішнього файлу за потреби.
Для використання параметрів запиту ми повертаємося до нашого визначення синтаксису та бачимо, що всі вони передаються як частина заданого.
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();
}
**Зверніть увагу, що ми використали «тіло» замість «все»; це допомагає нам розібратися.**tracлише тіло відповіді.
вихід:
Отримання коду статусу відповіді
Наступний метод, який ми напишемо за допомогою скрипта, — це отримання коду стану та встановлення твердження для його перевірки.
Крок 1) Створіть метод під назвою getResponseStatus().
Крок 2) Використовуйте ту саму структуру запиту, що й вище. Скопіюйте та вставте його.
Крок 3) Замість логування використовуйте функцію 'getStatus'CodeВбудований метод Rest Assured для отримання значення коду стану.
Крок 4) Щоб стверджувати, що ваш код стану дорівнює 200, використовуйте ключові слова – assertThat().statusCode(очікуєтьсяCode).
**Примітка –** URL — змінна, що використовується для спрощення. URL містить весь запит API URL.
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);
}
}
* Примітка:
- Код 200 – це успішна відповідь у цьому сценарії. Іноді може знадобитися, щоб запит завершився невдачею, і в такому разі можна використовувати коди 4XX або 5XX. Спробуйте змінити код стану, надавши недійсні параметри, і перевірте.
- Коли ми затверджуємо умову, на консолі не буде друкуватися, якщо немає помилки.
Сценарій для отримання різних частин відповіді
Окрім тіла відповіді та коду стану, REST Assured також надає доступ до заголовків, часу відповіді та типу вмісту за допомогою зчеплених ex.tracметоди tor. Ключове слово 'extract' є важливим для отримання цих конкретних деталей.
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) Rest Assured надає механізм для досягнення значень в API за допомогою «шляху».
Крок 3) Шлях до отримання сум — це «result.statements.AMOUNT». Уявіть собі це як XPath у Selenium.
Крок 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);
}
Примітка: Оскільки значення amount є рядковим типом даних, ми перетворюємо його на ціле число для підсумовування.
вихід:
Найкращі практики для автоматизації тестування REST Assured
Щойно ви зрозумієте основи, застосування дисциплінованих шаблонів забезпечить надійність вашого пакету API у міру зростання поверхні. Наведені нижче практики допоможуть командам уникнути нестабільних тестів та витрат на обслуговування.
- Централізуйте базу URL: Зберігайте базовий URI та токени автентифікації в одному класі конфігурації або файлі властивостей. Це дозволяє уникнути дублювання та спрощує перемикання середовищ.
- Використовуйте специфікації запитів та відповідей: Створюйте об'єкти RequestSpecBuilder та ResponseSpecBuilder, які можна використовувати повторно. Вони зменшують кількість шаблонів, коли багато тестів мають спільні заголовки або твердження.
- Перевірити схему JSON: Поєднайте REST Assured з модулем json-schema-validator для підтвердження конфіденційності.tracЦілісність t. Схема перевіряє зміни, що порушують роботу, перш ніж вони досягнуть споживачів нижче за течією.
- Екстерналізувати тестові дані: Зберігайте корисні навантаження у файлах JSON або використовуйте постачальників даних з TestNGЖорстко закодовані дані швидко стають неактуальними.
- Проведіть незалежні тести: Кожен тест повинен налаштовувати та розбирати власні дані. Залежні від порядку набори непередбачувано дають збій у паралельних запусках неперевершеної інтеграції.
- Вибіркове захоплення журналів: Використовуйте log().ifError() у стабільних пакетах та log().all() під час налагодження. Докладні журнали уповільнюють конвеєри неперевершеної інтеграції та приховують реальні проблеми.
- Підключіть до CI/CD: Активуйте пакети REST Assured через Maven Surefire або Failsafe в Jenkins, Дії GitHub або GitLab. Запускайте перевірки на наявність диму для кожного коміту та повну регресію протягом ночі.
Раннє прийняття цих звичок перетворює автоматизацію API на довгостроковий актив, а не на крихке вузьке місце.


