Samouczek testowania interfejsu API REST Assured

โšก Inteligentne podsumowanie

REST Assured ugruntowuje swojฤ… pozycjฤ™ jako JavaOparta na otwartym kodzie ลบrรณdล‚owym biblioteka, ktรณra usprawnia automatyczne testowanie interfejsu API REST. Framework umoลผliwia inลผynierom jakoล›ci walidacjฤ™ zล‚oลผonych odpowiedzi JSON, nagล‚รณwkรณw, kodรณw statusu i czasรณw odpowiedzi przy uลผyciu przejrzystej skล‚adni w stylu BDD z pล‚ynnฤ… integracjฤ… z Maven.

  • โš™๏ธ Foundation Konfiguracja: Konfigurowanie Java, Eclipsei zaleลผnoล›ci Mavena przed napisaniem pierwszego skryptu testu REST Assured.
  • ๐Ÿ“ Znajomoล›ฤ‡ skล‚adni: Zastosuj wzorzec Given-When-Then, aby wyraลผaฤ‡ ลผฤ…dania API w czytelnym i przyjaznym dla biznesu formacie.
  • ๐Ÿ” Walidacja szczegรณล‚owa: Extractreล›ฤ‡ odpowiedzi, kody statusu, nagล‚รณwki, typ zawartoล›ci i czas w pล‚ynnym ล‚aล„cuchu.
  • ๐Ÿงฉ Nawigacja po ล›cieลผce: Przechodzenie zagnieลผdลผonych wartoล›ci JSON przy uลผyciu notacji kropkowej podobnej do XPath w Selenium dla precyzyjnych twierdzeล„.
  • ๐Ÿ›ก๏ธ Integracja CI/CD: Poล‚ฤ…cz REST Assured z TestNG or JUnit aby osadziฤ‡ kontrole API bezpoล›rednio w zautomatyzowanych procesach kompilacji.

Samouczek REST Assured

Co to jest pewnoล›ฤ‡ spokoju?

Zapewniam ciฤ™ umoลผliwia testowanie interfejsรณw API REST przy uลผyciu bibliotek Java i dobrze integruje siฤ™ z Maven. Posiada bardzo wydajne techniki dopasowywania, wiฤ™c potwierdzenie oczekiwanych wynikรณw jest rรณwnieลผ doล›ฤ‡ proste. Rest Assured ma metody pobierania danych z niemal kaลผdej czฤ™ล›ci ลผฤ…dania i odpowiedzi, niezaleลผnie od tego, jak zล‚oลผone sฤ… struktury JSON.

Dla spoล‚ecznoล›ci testujฤ…cej testowanie automatyzacji API jest wciฤ…ลผ czymล› nowym i niszowym. Zล‚oลผonoล›ฤ‡ JSON sprawia, ลผe โ€‹โ€‹testowanie API pozostaje niezbadane. Ale to nie czyni go mniej waลผnym w procesie testowania. Framework Rest Assured.io uczyniล‚ to bardzo prostym, wykorzystujฤ…c podstawowe podstawy jฤ™zyka Java, co czyni go bardzo poลผฤ…danym przedmiotem do nauki.

Dlaczego potrzebujesz Rest-Assured?

Wyobraลบ sobie, ลผe otwierasz Google Przeglฤ…daj mapy i szukaj miejsc, do ktรณrych chcesz siฤ™ udaฤ‡. Od razu zobaczysz pobliskie restauracje, opcje dojazdu od wiodฤ…cych biur podrรณลผy i wiele opcji na wyciฤ…gniฤ™cie rฤ™ki. Wszyscy wiemy, ลผe to nie jestโ€ฆ Google produkty, wiฤ™c jak to dziaล‚a Google Jak je wyล›wietliฤ‡? Wykorzystuje on udostฤ™pnione API tych dostawcรณw. Jeล›li zostaniesz poproszony o przetestowanie takiej konfiguracji, jeszcze przed stworzeniem lub rozwojem interfejsu uลผytkownika, testowanie API staje siฤ™ niezwykle waลผne. Wielokrotne testowanie ich z rรณลผnymi kombinacjami danych sprawia, ลผe โ€‹โ€‹jest to bardzo odpowiedni przypadek do automatyzacji.

Wczeล›niej zespoล‚y korzystaล‚y z dynamicznych jฤ™zykรณw, takich jak Groovy i Ruby, aby to osiฤ…gnฤ…ฤ‡, i byล‚o to trudne. W zwiฤ…zku z tym testowanie API nie byล‚o szeroko eksplorowane przez testerรณw funkcjonalnych.

Jednak dziฤ™ki Rest Assured automatyczne testowanie interfejsรณw API i wysyล‚anie prostych ลผฤ…daล„ HTTPS z przyjaznymi dla uลผytkownika dostosowaniami staje siฤ™ proste, jeล›li ktoล› ma podstawowฤ… wiedzฤ™ na temat JavaJest pomocny w zrozumieniu testowania API i testรณw integracyjnych. Rest Assured daje duลผฤ… pewnoล›ฤ‡ w zakresie back-endu, podczas gdy testerzy front-endu mogฤ… skupiฤ‡ siฤ™ na interfejsie uลผytkownika i operacjach po stronie klienta. Rest Assured jest oprogramowaniem typu open source, a ciฤ…gล‚e dodawanie metod i bibliotek sprawiล‚o, ลผe jest to doskonaล‚y wybรณr do automatyzacji API.

REST Assured vs Postman: Kluczowe rรณลผnice

Zarรณwno REST Assured, jak i Postman Walidacja interfejsรณw API REST, ale kaลผde z nich pasuje do innego etapu cyklu testowania. Wybรณr odpowiedniego narzฤ™dzia zaleลผy od umiejฤ™tnoล›ci zespoล‚u, zakresu projektu i potrzeb integracyjnych.

WYGLฤ„D Zapewniony odpoczynek Postman
Typ Java biblioteka do automatyzacji opartej na kodzie Klient API oparty na interfejsie graficznym z obsล‚ugฤ… skryptรณw
Najlepszy przypadek uลผycia Ciฤ…gล‚e procesy integracji i zestawy regresji Rฤ™czna eksploracja i szybkie kontrole API
Wymagania dotyczฤ…ce umiejฤ™tnoล›ci rdzeล„ Java wymagana wiedza Minimalne kodowanie; uลผywa JavaFragmenty skryptu
Raportowanie Integruje siฤ™ z TestNG, JUniti Allure Wbudowane podsumowania przebiegรณw za poล›rednictwem interfejsu wiersza poleceล„ Newman

Wiele zespoล‚รณw korzysta Postman dla wczesnego prototypuping i przejdลบ na REST Assured w celu automatycznej regresji, gdy API bฤ™dzie gotowetract siฤ™ stabilizuje.

Jak skonfigurowaฤ‡ Rest Assured.io za pomocฤ… Eclipse

Wdroลผenie usล‚ugi REST Assured wymaga speล‚nienia trzech podstawowych zaleลผnoล›ci: Java, IDE i Maven. Wykonaj poniลผsze kroki, aby uniknฤ…ฤ‡ bล‚ฤ™dรณw kompilacji w przyszล‚oล›ci.

Krok 1) Zainstaluj Java. Zapoznaj siฤ™ z tym

Krok 2) Pobierz IDE, aby rozpoczฤ…ฤ‡: zaฤ‡mienie

Krok 3) Zainstaluj Maven i skonfiguruj eclipse. Zapoznaj siฤ™ z w tym miejscu.

Konfiguracja jest pewna

  1. Utwรณrz projekt Maven w swoim IDE. My uลผywamy IntelliJ, ale podobnฤ… strukturฤ™ uzyskasz w dowolnym uลผywanym IDE.
  2. Otwรณrz plik POM.xml.

Struktura projektu dla konfiguracji REST Assured Maven

Struktura projektu dla obszaru roboczego Maven z certyfikatem REST

Aby mieฤ‡ pewnoล›ฤ‡.io: Dla Java wersja < 9 uลผytkownikรณw:

Dodaj poniลผszฤ… zaleลผnoล›ฤ‡ do pliku 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>

Aby mieฤ‡ pewnoล›ฤ‡.io: Dla Java uลผytkownicy wersji 9+:

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

Rozwiฤ…zywanie problemรณw:

Jeล›li widzisz bล‚ฤ™dy i nie masz pewnoล›ci, czy zaleลผnoล›ci zostaล‚y poprawnie pobrane, wykonaj nastฤ™pujฤ…ce kroki:

  1. Wykonaj kompilacjฤ™ Maven, aby zaimportowaฤ‡ wszystkie zaleลผnoล›ci. Pomoc dotyczฤ…cฤ… konfiguracji Maven znajdziesz tutaj. Guru99.
  2. Jeล›li bล‚ฤ™dy nadal wystฤ™pujฤ…, uruchom czyszczenie Mavena, a nastฤ™pnie instalacjฤ™ Mavena. Kompilacja powinna zakoล„czyฤ‡ siฤ™ bez bล‚ฤ™dรณw.
  3. Dodaj poniลผsze importy do swojego Java klasฤ™ i sprawdลบ, czy nie ma bล‚ฤ™dรณw kompilacji.
import io.restassured.RestAssured.*;
import io.restassured.matcher.RestAssuredMatchers.*;
import org.hamcrest.Matchers.*;

Pierwszy prosty skrypt typu Rest Assured

Po skonfigurowaniu zaleลผnoล›ci moลผesz teraz napisaฤ‡ swรณj pierwszy skrypt. Framework wykorzystuje styl programowania sterowanego zachowaniem (BDD), ktรณry brzmi niemal jak jฤ™zyk angielski.

Skล‚adnia:

Skล‚adnia Rest Assured.io jest najbardziej czytelnฤ… czฤ™ล›ciฤ… struktury, poniewaลผ jest bardzo podobna do BDD i zrozumiaล‚a.

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

Wyjaล›nienie:

Code Wyjaล›nienie
Dany() Sล‚owo kluczowe โ€žGivenโ€ pozwala ustawiฤ‡ tล‚o. W tym miejscu przekazujesz nagล‚รณwki ลผฤ…dania, parametry zapytania i ล›cieลผki, treล›ฤ‡ oraz pliki cookie. Jest to opcjonalne, jeล›li te elementy nie sฤ… potrzebne w ลผฤ…daniu.
Gdy() Sล‚owo kluczowe โ€žkiedyโ€ oznacza zaล‚oลผenie Twojego scenariusza. Na przykล‚ad โ€žkiedyโ€ coล› otrzymasz/opublikujesz/umieล›cisz, a zrobisz coล› innego.
Metoda() Zastฤ…p tฤ™ operacjฤ™ dowolnฤ… operacjฤ… CRUD (get/post/put/delete).
Nastฤ™pnie() Tutaj naleลผy wpisaฤ‡ warunki potwierdzenia i dopasowania.

Skoro masz juลผ konfiguracjฤ™ i podstawy skล‚adni, utwรณrzmy nasz pierwszy prosty test. Nic nie szkodzi, jeล›li struktura wydaje Ci siฤ™ nowa, ale w miarฤ™ dalszego kodowania i interpretacji kaลผdej linijki, zaล‚apiesz o co chodzi.

Co przyniesiesz?

Otwรณrz przeglฤ…darkฤ™ i naciล›nij โ€“ https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1. Upewnij siฤ™, ลผe widzisz coล› jak poniลผej.

Przykล‚adowa odpowiedลบ skryptu API Rest Assured

Przykล‚adowa odpowiedลบ API przechwycona przez REST Assured

W przypadku, gdy podczas prรณby uzyskania odpowiedzi na ลผฤ…danie w przeglฤ…darce pojawi siฤ™ bล‚ฤ…d:

  1. Sprawdลบ, czy uลผyล‚eล› protokoล‚u HTTPS czy HTTP. Twoja przeglฤ…darka moลผe mieฤ‡ ustawienia blokujฤ…ce niebezpieczne witryny.
  2. Sprawdลบ, czy jakiล› serwer proxy lub zapora sieciowa nie blokuje Twojej przeglฤ…darce moลผliwoล›ci otwarcia witryny.

*Note โ€“ nie uลผyล‚eล› tu ลผadnych nagล‚รณwkรณw, treล›ci ani pliku cookie. To byล‚o URL, a Ty pobierasz zawartoล›ฤ‡ z API, zamiast publikowaฤ‡ lub aktualizowaฤ‡ istniejฤ…cฤ… zawartoล›ฤ‡. To sprawia, ลผe โ€‹โ€‹jest to wywoล‚anie GET. Zapamiฤ™taj to, aby lepiej zrozumieฤ‡ nasz pierwszy test.

Cel Twojego testu:

Celem skryptu jest wydrukowanie na konsoli IDE tych samych danych wyjล›ciowych, ktรณre otrzymaล‚eล› w przeglฤ…darce za poล›rednictwem usล‚ugi Rest Assured.

Zakodujmy to, wykonujฤ…c poniลผsze kroki:

Uzyskiwanie treล›ci odpowiedzi

Krok 1) Utwรณrz klasฤ™ o nazwie โ€žmyFirstRestAssuredClassโ€.

Krok 2) Utwรณrz metodฤ™ o nazwie โ€žgetResponseBodyโ€.

Krok 3) Podobnie do struktury, ktรณrej nauczyล‚eล› siฤ™ wczeล›niej, czyli โ€žgiveโ€, โ€žWhenโ€, a nastฤ™pnie wpisz poniลผszy kod:

dany(). -> Nie sฤ… wymagane ลผadne nagล‚รณwki, ลผadne zapytania ani parametry ล›cieลผki.

kiedy(). -> Brak okreล›lonego ustawienia warunku.

Dostawaฤ‡('https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1'). -> tylko URL musi zostaฤ‡ dostarczone.

then(). -> Nie sฤ… wymagane ลผadne konkretne potwierdzenia.

log(). all() -> Po pobraniu caล‚ej odpowiedzi, zapisz odpowiedลบ, nagล‚รณwki i zasadniczo wszystko, co ลผฤ…danie do Ciebie zwrรณci.

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

}

Teraz zauwaลผ, ลผe URL uลผyto jest dล‚ugie i mniej czytelne. Przyglฤ…dajฤ…c siฤ™ uwaลผnie, zauwaลผysz, ลผe uลผywane sฤ… 3 parametry zapytania:

  1. Identyfikator klienta
  2. Hasล‚o
  3. Nr konta

Rest Assured pomaga nam przekazywaฤ‡ kaลผdฤ… czฤ™ล›ฤ‡ (zapytanie, ล›cieลผkฤ™, parametr nagล‚รณwka) osobno, dziฤ™ki czemu kod jest bardziej czytelny i ล‚atwiejszy w utrzymaniu. Moลผemy rรณwnieลผ parametryzowaฤ‡ dane z pliku zewnฤ™trznego, jeล›li zajdzie taka potrzeba.

Aby uลผyฤ‡ parametru zapytania, wracamy do naszej definicji skล‚adni i widzimy, ลผe wszystkie z nich sฤ… przekazywane jako czฤ™ล›ฤ‡ podanego.

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

**Naleลผy pamiฤ™taฤ‡, ลผe uลผyliล›my sล‚owa โ€žbodyโ€ zamiast โ€žallโ€; pomaga nam to np.tractylko treล›ฤ‡ odpowiedzi.

Wyjล›cie:

Uzyskiwanie kodu stanu odpowiedzi

Nastฤ™pnฤ… metodฤ…, ktรณrฤ… pokaลผemy, bฤ™dzie pobranie kodu statusu i umieszczenie potwierdzenia w celu jego sprawdzenia.

Krok 1) Utwรณrz metodฤ™ o nazwie getResponseStatus().

Krok 2) Uลผyj tej samej struktury ลผฤ…dania, co powyลผej. Skopiuj i wklej.

Krok 3) Zamiast rejestrowaฤ‡, uลผyj 'getStatusCodeWbudowana metoda Rest Assured sล‚uลผฤ…ca do pobierania wartoล›ci kodu statusu.

Krok 4) Aby potwierdziฤ‡, ลผe kod statusu wynosi 200, uลผyj sล‚รณw kluczowych assertThat().statusCode(oczekiwanyCode).

**Notatka - URL jest zmiennฤ… uลผywanฤ… dla uproszczenia. URL przechowuje caล‚e ลผฤ…danie 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);
}

Wyjล›cie:

Potrzeba biznesowa

Jednฤ… z podstawowych zasad automatyzacji jest to, ลผe musimy ustawiฤ‡ punkty kontrolne tak, aby test przebiegaล‚ tylko wtedy, gdy zostanฤ… speล‚nione wszystkie wymagane warunki. W testowaniu API najbardziej podstawowฤ… walidacjฤ… jest sprawdzenie, czy kod statusu ลผฤ…dania ma format 2XX.

Peล‚ny kod, jak dotฤ…d:

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

}

*Uwaga:

  1. 200 to odpowiedลบ pomyล›lna w tym scenariuszu. Czasami moลผe zaistnieฤ‡ potrzeba niepowodzenia ลผฤ…dania, w takim przypadku naleลผy uลผyฤ‡ kodu 4XX lub 5XX. Sprรณbuj zmieniฤ‡ kod statusu, podajฤ…c nieprawidล‚owe parametry i sprawdลบ.
  2. Kiedy potwierdzimy warunek, na konsoli nie bฤ™dzie drukowania, chyba ลผe wystฤ…pi bล‚ฤ…d.

Skrypt pobierajฤ…cy rรณลผne czฤ™ล›ci odpowiedzi

Oprรณcz treล›ci odpowiedzi i kodu statusu, REST Assured udostฤ™pnia rรณwnieลผ nagล‚รณwki, czas odpowiedzi i typ zawartoล›ci za pomocฤ… ล‚aล„cuchowych przykล‚adรณwtracmetody tor. Sล‚owo kluczowe โ€žexโ€tracjest to niezbฤ™dne do pobrania tych konkretnych czฤ™ล›ci.

Nagล‚รณwek

Rest Assured to bardzo prosty jฤ™zyk, a pobieranie nagล‚รณwkรณw jest rรณwnie proste. Nazwa metody to headers(). Podobnie jak poprzednio, stworzymy samodzielnฤ… metodฤ™, aby zrobiฤ‡ to samo.

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

Naleลผy pamiฤ™taฤ‡, ลผe pominiฤ™to tutaj metodฤ™ โ€žgiven().when()โ€, a wiersz kodu rozpoczyna siฤ™ od metody โ€žget(). Dzieje siฤ™ tak, poniewaลผ przed wysล‚aniem ลผฤ…dania i otrzymaniem odpowiedzi nie ma ลผadnego warunku wstฤ™pnego ani weryfikacji. W takich przypadkach uลผycie tej samej metody jest opcjonalne.

wyjล›cie:

Potrzeba biznesowa:

Czฤ™sto konieczne jest uลผycie tokena autoryzacyjnego lub pliku cookie sesji przy kolejnym ลผฤ…daniu. Dane te sฤ… najczฤ™ล›ciej zwracane jako nagล‚รณwki odpowiedzi.

Czas odpowiedzi

Aby uzyskaฤ‡ czas potrzebny na pobranie odpowiedzi z backendu lub innych systemรณw dalszych, Rest Assured udostฤ™pnia metodฤ™ o nazwie โ€žtimeInโ€ z odpowiedniฤ… jednostkฤ… czasu, aby uzyskaฤ‡ czas potrzebny na zwrรณcenie odpowiedzi.

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

Wyjล›cie:

Potrzeba biznesowa:

Bardzo waลผnฤ… cechฤ… testowania API jest ich czas reakcji, ktรณry mierzy wydajnoล›ฤ‡ aplikacji. Czas oczekiwania na wywoล‚anie moลผe byฤ‡ dล‚uลผszy lub krรณtszy, w zaleลผnoล›ci od szybkoล›ci ล‚ฤ…cza internetowego, wydajnoล›ci API w danym momencie, obciฤ…ลผenia serwera i innych czynnikรณw wpล‚ywajฤ…cych na czas.

Typ zawartoล›ci

Typ zawartoล›ci zwrรณconej odpowiedzi moลผna uzyskaฤ‡ za pomocฤ… metody โ€žcontentType()โ€.

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

Wydajnoล›ฤ‡

Potrzeba biznesowa:

Czasami uzyskanie informacji o typie zawartoล›ci jest niezbฤ™dne, aby mieฤ‡ pewnoล›ฤ‡, ลผe nie ma luk w zabezpieczeniach umoลผliwiajฤ…cych ataki miฤ™dzydomenowe, a takลผe w celu potwierdzenia, ลผe โ€‹โ€‹przekazywana zawartoล›ฤ‡ jest zgodna ze standardami interfejsu API.

Pobierz indywidualny element JSON

Na podstawie podanej odpowiedzi zostaniesz poproszony o obliczenie kwoty caล‚kowitej. Musisz pobraฤ‡ kaลผdฤ… kwotฤ™ i jฤ… zsumowaฤ‡.

Kroki:

Krok 1) Pole kwoty znajduje siฤ™ w tablicy z kluczem โ€žstatementsโ€, ktรณra z kolei znajduje siฤ™ na liล›cie z kluczem โ€žresultโ€.

Krok 2) Rest Assured udostฤ™pnia mechanizm umoลผliwiajฤ…cy dotarcie do wartoล›ci w API za pomocฤ… โ€žล›cieลผkiโ€.

Krok 3) ลšcieลผka do osiฤ…gniฤ™cia kwot to โ€žresult.statements.AMOUNTโ€. Pomyล›l o tym jak o XPath w Selenium.

Krok 4) Pobierz wszystkie kwoty z kolekcji, a nastฤ™pnie przejrzyj wszystkie wartoล›ci, aby obliczyฤ‡ sumฤ™.

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

}

Uwaga: Poniewaลผ wartoล›ฤ‡ kwoty jest typem danych ล‚aล„cuchowych, w celu zsumowania konwertujemy jฤ… na liczbฤ™ caล‚kowitฤ….

Wyjล›cie:

Najlepsze praktyki w zakresie automatyzacji testรณw REST Assured

Po zrozumieniu podstaw, stosowanie zdyscyplinowanych wzorcรณw zapewni niezawodnoล›ฤ‡ pakietu w miarฤ™ rozwoju interfejsu API. Poniลผsze praktyki pomogฤ… zespoล‚om uniknฤ…ฤ‡ niestabilnych testรณw i narzutu na konserwacjฤ™.

  1. Centralizacja bazy URL: Przechowuj podstawowy identyfikator URI i tokeny uwierzytelniajฤ…ce w jednej klasie konfiguracyjnej lub pliku wล‚aล›ciwoล›ci. Pozwala to uniknฤ…ฤ‡ duplikacji i uproล›ciฤ‡ przeล‚ฤ…czanie ล›rodowisk.
  2. Uลผyj specyfikacji ลผฤ…daล„ i odpowiedzi: Twรณrz obiekty RequestSpecBuilder i ResponseSpecBuilder wielokrotnego uลผytku. Zmniejszajฤ… one liczbฤ™ szablonรณw, gdy wiele testรณw ma wspรณlne nagล‚รณwki lub asercje.
  3. Sprawdลบ poprawnoล›ฤ‡ schematu JSON: Poล‚ฤ…cz REST Assured z moduล‚em json-schema-validator, aby potwierdziฤ‡ zgodnoล›ฤ‡tracintegralnoล›ci. Sprawdzanie schematu wychwytuje zmiany powodujฤ…ce przerwanie dziaล‚ania systemu, zanim dotrฤ… one do odbiorcรณw koล„cowych.
  4. Eksternalizacja danych testowych: Przechowuj ล‚adunki w plikach JSON lub korzystaj z dostawcรณw danych z TestNGZakodowane na staล‚e dane szybko stajฤ… siฤ™ nieaktualne.
  5. Uruchom niezaleลผne testy: Kaลผdy test powinien konfigurowaฤ‡ i usuwaฤ‡ wล‚asne dane. Zestawy zaleลผne od kolejnoล›ci zawodzฤ… w sposรณb nieprzewidywalny podczas rรณwnolegล‚ych uruchomieล„ CI.
  6. Selektywne przechwytywanie dziennikรณw: Uลผywaj log().ifError() w pakietach stabilnych i log().all() podczas debugowania. Szczegรณล‚owe logowanie spowalnia procesy CI i ukrywa rzeczywiste problemy.
  7. Podล‚ฤ…cz do CI/CD: Uruchom pakiety REST Assured za pomocฤ… Maven Surefire lub Failsafe w Jenkins, GitHub Actions lub GitLab. Przeprowadzaj testy dymowe przy kaลผdym zatwierdzeniu i peล‚nฤ… regresjฤ™ w nocy.

Wczesne przyjฤ™cie tych nawykรณw sprawia, ลผe โ€‹โ€‹automatyzacja API staje siฤ™ atutem dล‚ugoterminowym, a nie kruchym wฤ…skim gardล‚em.

FAQ

Tak. Nowoczesne systemy wspomagania AI, takie jak ChatGPT i GitHub Copilot, mogฤ… tworzyฤ‡ szkielety testรณw REST Assured na podstawie specyfikacji API. Inลผynierowie powinni jednak nadal sprawdzaฤ‡ wygenerowany kod pod kฤ…tem asercji, obsล‚ugi danych i przypadkรณw brzegowych przed scaleniem.

Narzฤ™dzia oparte na sztucznej inteligencji analizujฤ… wzorce odpowiedzi i sugerujฤ… samonaprawiajฤ…ce siฤ™ lokalizatory lub asercje. Sygnalizujฤ… odchylenia schematu, rekomendujฤ… refaktoryzacje i automatycznie aktualizujฤ… dane testowe, co zmniejsza koniecznoล›ฤ‡ rฤ™cznej konserwacji w przypadku czฤ™stych zmian interfejsรณw API.

REST Assured to Java biblioteka przeznaczona do automatyzacji sterowanej kodem w procesach CI. Postman to klient GUI do rฤ™cznej eksploracji i szybkiego tworzenia skryptรณw. Zespoล‚y czฤ™sto ล‚ฤ…czฤ… oba te elementy w caล‚ym cyklu testowania.

REST Assured jest zoptymalizowany pod kฤ…tem REST i JSON. Moลผe wysyล‚aฤ‡ surowe dane XML dla SOAP, ale dedykowane narzฤ™dzia, takie jak SoapUI oferujฤ… bogatsze wsparcie dla analizy WSDL i asercji specyficznych dla protokoล‚u SOAP.

REST Assured naturalnie ล‚ฤ…czy siฤ™ z TestNG oraz JUnit do asercji, hakรณw cyklu ลผycia i raportowania. Allure, Extent Reports i Maven Surefire dodatkowo wzbogacajฤ… funkcjonalnoล›ฤ‡ o wizualizacjฤ™ i integracjฤ™ CI.

Podsumuj ten post nastฤ™pujฤ…co: