Урок за тестване на REST Assured API

⚡ Умно обобщение

REST Assured се утвърждава като Java-базирана библиотека с отворен код, която рационализира автоматизираното тестване на REST API. Рамката дава възможност на инженерите по качеството да валидират сложни JSON отговори, заглавки, кодове за състояние и времена за отговор, използвайки изчистен синтаксис в стил BDD с безпроблемна интеграция с Maven.

  • ️ Foundation Setup: Определен Java, Eclipseи зависимостите на Maven, преди да напишете първия си REST Assured тестов скрипт.
  • 📐 Владеене на синтаксиса: Приложете шаблона „Дадено-Когато-Тогава“, за да изразите API заявките си в четлив, удобен за бизнеса формат.
  • 🔍 Детайлна валидация: Extracтялото на отговора, кодовете за състояние, заглавките, типа съдържание и времето чрез плавна верига.
  • 🧩 Навигация по пътя: Обход на вложени JSON стойности, използвайки точкова нотация, подобна на XPath в Selenium за точни твърдения.
  • ️ CI/CD интеграция: Комбинирайте REST Assured с TestNG or JUnit да вграждате API проверки директно в автоматизирани канали за изграждане.

Урок за REST Assured

Какво е Rest Assured?

Бъдете спокойни ви позволява да тествате REST API с помощта на java библиотеки и се интегрира добре с Maven. Има много ефективни техники за съпоставяне, така че утвърждаването на вашите очаквани резултати също е доста лесно. Rest Assured има методи за извличане на данни от почти всяка част от заявката и отговора, без значение колко сложни са JSON структурите.

За общността на тестването API автоматизираното тестване все още е ново и специализирано. Сложността на JSON поддържа тестването на API неизследвано. Но това не го прави по-малко важен в процеса на тестване. Бъдете сигурни. Рамката на io го направи много проста, използвайки основните основи на Java, което го прави много желано нещо за научаване.

Защо се нуждаете от Rest-Assured?

Представете си, че отваряте Google Прегледайте Картите и потърсете място, което искате да посетите. Веднага виждате близки ресторанти, опции за пътуване от водещи туристически компании и много други възможности за избор. Всички знаем, че това не са... Google продукти, така че как Google успява ли да ги покаже? Използва откритите API на тези доставчици. Сега, ако бъдете помолени да тествате този вид настройка, дори преди потребителският интерфейс да е изграден или в процес на разработка, тестването на API става изключително важно. Многократното им тестване с различни комбинации от данни го прави много подходящ случай за автоматизация.

По-рано екипите използваха динамични езици, като например Groovy и Ruby, за да се постигне това, и беше предизвикателство. Следователно API тестването не беше широко проучено от функционалните тестери.

Въпреки това, с Rest Assured, автоматизираното тестване на API и изпращането на прости HTTPS заявки с удобни за потребителя персонализации става лесно, ако човек има основен опит в... JavaПолезно е за разбиране на API тестването и интеграционното тестване. Rest Assured дава силна увереност на backend-а, ​​докато front-end тестерите могат да се съсредоточат върху потребителския интерфейс и операциите от страна на клиента. Rest Assured е с отворен код и постоянното добавяне на методи и библиотеки го прави чудесен избор за API автоматизация.

#1 НАЙ-ДОБЪР ОБЩ РЕЗУЛТАТТест сигма
9.8/ 10
★ ★ ★ ★ ★
Вземете безплатна демонстрация
PractiTest
9.5/ 10
★ ★ ★ ★ ★
посещение PractiTest
Testiny
9.3/ 10
★ ★ ★ ★ ★
посещение Testiny
Най-добър заТестова автоматизацияУправление на тестовеМалки и средни екипи за осигуряване на качеството
Основна характеристика✓Генериране на автоматизирани тестове за секунди✓Централизирано управление на тестовете✓Ръчни + автоматизирани тестови случаи
Интеграции✓Jenkins, Slack, Джира✓Джира, Jenkins, Slack✓Джира, GitHub, GitLab
Безплатен пробен периодБезплатна демонстрация14-дневен безплатен пробен периодБезплатна демонстрация
Вземете безплатна демонстрацияпосещение PractiTestпосещение Testiny

REST Assured срещу Postman: Основни разлики

И двете REST Assured и Postman валидират REST API, но всеки от тях е подходящ за различен етап от жизнения цикъл на тестване. Изборът на правилния инструмент зависи от уменията на вашия екип, обхвата на проекта и нуждите от интеграция.

Аспект БЪДЕТЕ СИГУРНИ Postman
Тип Java библиотека за автоматизация, базирана на код GUI-базиран API клиент с поддръжка на скриптове
Най-добър случай на употреба Канали за непрекъсната интеграция и регресионни пакети Ръчно проучване и бързи API проверки
Изискване за умения Ядро Java необходими знания Минимално кодиране; приложения JavaФрагменти от скриптове
Докладване Интегрира се с TestNG, JUnitи Allure Вградени обобщения на изпълненията чрез Newman CLI

Много отбори използват Postman за ранни прототипиping и преминете към REST Assured за автоматизирана регресия, след като API-то приключиtracт се стабилизира.

Как да настроите Rest Assured.io с Eclipse

Настройването на REST Assured включва три основни зависимости: Java, IDE и Maven. Следвайте стъпките по-долу, за да избегнете грешки при компилиране по-късно.

Стъпка 1) Инсталирайте Java. Обърнете се към това ръководи

Стъпка 2) Изтеглете IDE, за да започнете: затъмнение

Стъпка 3) Инсталирайте Maven и настройте вашия eclipse. Реф тук.

Настройка Бъдете сигурни

  1. Създайте Maven проект във вашата IDE. Ние използваме IntelliJ, но ще получите подобна структура във всяка IDE, която използвате.
  2. Отворете вашия POM.xml файл.

Структура на проекта за REST Assured Maven инсталация

Структура на проекта за 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>

Отстраняване на неизправности:

В случай че видите грешки и не сте сигурни дали зависимостите са изтеглени правилно, следвайте тези стъпки:

  1. Извършете компилация на Maven, за да импортирате всички зависимости. Ще намерите помощ за настройката на Maven на Guru99.
  2. Ако грешките продължават, изпълнете почистване на Maven, последвано от инсталиране на Maven. Компилацията би трябвало да завърши без грешки.
  3. Добавете импортираните по-долу данни във вашия 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“ ви позволява да зададете фон. Тук предавате заглавките на заявката, параметрите на заявката и пътя, тялото и „бисквитките“. Това е по избор, ако тези елементи не са необходими в заявката.
Когато() Ключовата дума „когато“ маркира предпоставката на вашия сценарий. Например, „когато“ получите/публикувате/качите нещо, направете нещо друго.
Метод() Заменете това с някоя от CRUD операциите (get/post/put/delete).
Тогава() Вашите assert и match условия отиват тук.

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

Какво ще донесеш?

Отворете браузъра си и натиснете – https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1. Уверете се, че виждате нещо като по-долу.

Примерен отговор на API за скрипта Rest Assured

Примерен API отговор, заснет от REST Assured

В случай че получите грешка в браузъра, когато се опитвате да получите отговор на заявката:

  1. Проверете дали сте използвали HTTPS или HTTP. Вашият браузър може да има настройки, които блокират несигурни уебсайтове.
  2. Проверете дали някой прокси сървър или защитна стена блокират браузъра ви да отваря уебсайта.

*Забележка – тук не сте използвали никакви заглавки, нито тяло, нито бисквитка. Това беше 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 параметъра на заявката:

  1. Customer_ID
  2. Парола
  3. Account_No

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);
}

}

* Забележка:

  1. 200 е успешен отговор за този сценарий. Понякога може да се наложи заявката да е неуспешна, като в този случай можете да използвате 4XX или 5XX. Опитайте да промените кода на състоянието, като предоставите невалидни параметри и проверете.
  2. Когато заявяваме условие, няма да има печат на конзолата, освен ако няма грешка.

Скрипт за извличане на различни части от отговор

Освен тялото на отговора и кода на състоянието, REST Assured също така разкрива заглавки, време за отговор и тип съдържание чрез верижно свързване.tracметоди на tor. Ключовата дума „ex“tract' е от съществено значение за извличането на тези специфични части.

Header

Rest Assured е много ясен език и извличането на заглавки е също толкова просто. Името на метода е headers(). Както преди, ние ще създадем самостоятелен метод, за да направим същото.

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

Моля, обърнете внимание, че 'given().when()' е пропуснато тук и редът с код започва от get(). Това е така, защото няма предварително условие или проверка, извършена преди обработката на заявката и получаването на отговор. В такива случаи използването на същото е по избор.

Изход:

Бизнес нужда:

Доста често ще трябва да използвате токен за оторизация или бисквитка за сесия за последващата заявка и тези данни се връщат най-вече като заглавки на отговора.

Време За Реакция

За да получите времето, необходимо за извличане на отговора от бекенда или други системи надолу по веригата, 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 в този момент, натоварването на сървъра и други фактори, влияещи върху времето.

Тип съдържание

Можете да получите типа съдържание на върнатия отговор, използвайки метода „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);

}

Забележка: Тъй като стойността на сумата е низов тип данни, ние я преобразуваме в цяло число за сумиране.

Изход:

Най-добри практики за REST Assured Test Automation

След като разберете основите, прилагането на дисциплинирани модели поддържа надеждността на вашия пакет, докато API повърхността расте. Практиките по-долу помагат на екипите да избегнат нестабилни тестове и разходи за поддръжка.

  1. Централизирайте базата URL: Съхранявайте базовия URI и токените за удостоверяване в един конфигурационен клас или файл със свойства. Това избягва дублирането и опростява превключването между среди.
  2. Използвайте спецификации за заявки и отговори: Създавайте обекти RequestSpecBuilder и ResponseSpecBuilder за многократна употреба. Те намаляват броя на шаблоните, когато много тестове споделят общи заглавки или твърдения.
  3. Валидиране на JSON схема: Комбинирайте REST Assured с модула json-schema-validator, за да потвърдите contract интегритет. Схемата проверява промените, които нарушават целостта, преди те да достигнат до потребителите надолу по веригата.
  4. Екстернализиране на тестови данни: Съхранявайте полезните товари в JSON файлове или използвайте доставчици на данни от TestNGТвърдо кодираните данни бързо остаряват.
  5. Изпълнете независими тестове: Всеки тест трябва да настройва и анализира собствените си данни. Зависимите от поръчката пакети се провалят непредсказуемо при паралелни изпълнения на непрекъсната интеграция.
  6. Заснемане на регистрационни файлове избирателно: Използвайте log().ifError() в стабилни пакети и log().all() по време на отстраняване на грешки. Подробните лог файлове забавят CI каналите и прикриват реалните проблеми.
  7. Включете в CI/CD: Задействайте REST Assured пакети чрез Maven Surefire или Failsafe в Jenkins, GitHub Actions или GitLab. Изпълнявайте smoke checks за всеки commit и пълна регресия за една нощ.

Ранното приемане на тези навици превръща автоматизацията на API в дългосрочен актив, а не в крехко пречка.

Въпроси и Отговори

Да. Съвременните AI асистенти, като ChatGPT и GitHub Copilot, могат да създават REST Assured тестови скелета от API спецификации. Инженерите все пак трябва да прегледат генерирания код за твърдения, обработка на данни и гранични случаи, преди да го слеят.

Инструментите, управлявани от изкуствен интелект, анализират модели на реакция и предлагат самовъзстановяващи се локатори или твърдения. Те сигнализират за отклонение в схемата, препоръчват рефакториране и автоматично актуализират тестовите данни, което намалява ръчната поддръжка, когато API-тата се развиват често.

REST Assured е Java библиотека, създадена за автоматизация, управлявана от код, в CI конвейери. Postman е GUI клиент за ръчно проучване и бързо писане на скриптове. Екипите често комбинират и двете по време на жизнения цикъл на тестване.

REST Assured е оптимизиран за REST и JSON. Може да изпраща сурови XML полезни товари за SOAP, но специализирани инструменти като SoapUI предлагат по-богата поддръжка за WSDL парсинг и специфични за SOAP твърдения.

REST Assured се съчетава естествено с TestNG намлява JUnit за твърдения, куки за жизнения цикъл и отчети. Allure, Extent Reports и Maven Surefire добавят визуализация и CI интеграция.

Обобщете тази публикация с: