Samouczek REST Assured dotyczący testowania automatyzacji API (przykład)
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 widok mapy Google i szukasz miejsca, do którego chcesz się udać, od razu widzisz pobliskie restauracje, widzisz opcje dojazdu; od niektórych wiodących dostawców usług turystycznych i zobacz tak wiele opcji na wyciągnięcie ręki. Wszyscy wiemy, że nie są to produkty Google, więc jak Google może to pokazać. Korzystają z ujawnionych interfejsów API tych dostawców. Teraz, jeśli zostaniesz poproszony o przetestowanie tego rodzaju konfiguracji, nawet zanim interfejs użytkownika zostanie zbudowany lub będzie w fazie rozwoju, testowanie interfejsów API staje się niezwykle ważne, a wielokrotne testowanie ich z różnymi kombinacjami danych sprawia, że jest to bardzo odpowiedni przypadek automatyzacji.
Wcześniej używaliśmy dynamicznych języków, takich jak groovy, ruby, aby to osiągnąć, i było to trudne. Dlatego testowanie API nie zostało zbadane w ramach testów funkcjonalnych.
Ale używając Rest Assured, automatyzując testowanie API, wysyłanie prostych żądań https z przyjaznymi dla użytkownika dostosowaniami jest proste, jeśli ktoś ma podstawowe podstawy języka Java. Jest to konieczne, aby zrozumieć testowanie API i testowanie integracyjne, ale po tej automatyzacji Rest Assured daje bardzo dobrą pewność w back-endzie, podczas gdy testowanie front-endu może skupić się tylko na interfejsie użytkownika i operacjach po stronie klienta. Rest Assured jest oprogramowaniem typu open source z wieloma dodatkowymi metodami i bibliotekami, które są dodawane, co czyni je doskonałym wyborem do automatyzacji API.
Jak skonfigurować Rest Assured.io za pomocą Eclipse
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 tutaj.
Konfiguracja jest pewna
- Utwórz projekt Maven w swoim IDE. Używamy Intellij, ale podobną strukturę otrzymasz na każdym IDE, którego używasz.
- Otwórz plik POM.xml
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 jesteś pewien, czy zależności zostały dobrze pobrane,
- Wykonaj kompilację Mavena, aby zaimportować wszystkie zależności. Ponownie znajdziesz pomoc dotyczącą Mavena skonfigurowanego na guru99.
- Mimo to widzisz błędy, następnie wykonaj maven clean, a następnie instalację maven i powinien zostać skompilowany bez żadnych błędów.
- Możesz dodać poniższe linie do swojej klasy Java i zobaczyć, że 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
Składnia:
Składnia Rest Assured.io jest najpiękniejszą częścią, 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, tutaj przekazujesz nagłówki żądania, parametry zapytania i ścieżki, treść, pliki cookie. Jest to opcjonalne, jeśli te elementy nie są potrzebne w żądaniu |
Gdy() | Słowo kluczowe „kiedy” wyznacza założenia Twojego scenariusza. Na przykład „kiedy” coś otrzymasz/opublikujesz/umieścisz, zrób coś innego. |
Metoda() | Zamień to na dowolną operację CRUD (get/post/put/delete) |
Następnie() | Tutaj znajdziesz swoje warunki potwierdzenia i dopasowania |
Teraz, gdy masz już konfigurację i podstawy składni, utwórzmy nasz pierwszy prosty test. Nie ma problemu, jeśli do tej pory struktura wydaje ci się nowa, gdy będziesz kodować dalej interpretując każdą linię, zrozumiesz to.
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.
Jeżeli podczas próby uzyskania odpowiedzi na żądanie w przeglądarce pojawi się błąd,
- Sprawdź, czy użyłeś protokołu Https lub Http. Twoja przeglądarka może mieć ustawienia uniemożliwiające otwieranie niebezpiecznych stron internetowych.
- Sprawdź, czy masz jakiś serwer proxy lub zaporę sieciową blokującą otwieranie stron internetowych przez przeglądarkę.
*Note – nie użyłeś tutaj żadnych nagłówków, żadnej treści ani żadnego pliku cookie. Był to adres URL, a także pobierasz treść z interfejsu API i nie publikujesz ani nie aktualizujesz żadnej istniejącej treści, więc jest to wywołanie GET. Pamiętaj o tym, 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 jak w przypadku struktury podanej wcześniej, kiedy i wtedy, wpisz poniższy kod
dany(). -> Nie są wymagane żadne nagłówki, żadne zapytania ani parametry ścieżki.
Kiedy(). -> Brak określonej konfiguracji warunków
Dostawać('https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1
'). ->należy podać tylko adres URL
Następnie(). -> Nie są wymagane żadne szczególne twierdzenia
dziennik(). all() -> Po pobraniu całej odpowiedzi zapisz odpowiedź, nagłówki, zasadniczo wszystko, co zwróci żądanie.
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 użyty adres URL jest długi i mniej czytelny. Jeśli przyjrzysz się uważnie, zauważysz, że używane są 3 parametry zapytania, które są
- Identyfikator klienta
- Hasło
- Nr konta
Rest Assured pomaga nam przekazać każdą część (zapytanie, ścieżkę, parametr nagłówka) osobno, dzięki czemu kod jest bardziej czytelny i łatwiejszy w utrzymaniu. Ponadto możemy sparametryzować dane z pliku zewnętrznego, jeśli jest to wymagane.
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(); }
**Zauważ, że użyliśmy „ciało” zamiast „wszystko”; pomaga nam to wyodrębnić tylko treść odpowiedzi.
Wyjście:
Uzyskiwanie kodu stanu odpowiedzi
Następną metodą, którą napiszemy, 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 go rejestrować, używamy wbudowanej metody „getStatusCode” firmy Rest Assured w celu pobrania wartości kodu statusu
Krok 4) Aby potwierdzić, że Twój kod statusu to 200, używamy słów kluczowych – AssertThat().statusCode(expectedCode)
**Uwaga – adres URL jest zmienną używaną dla uproszczenia. Adres URL zawiera cały adres URL żądania 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); }
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:
- 200 to pomyślna odpowiedź w tym scenariuszu. Czasami żądanie również musi zakończyć się niepowodzeniem i wtedy możesz użyć 4XX lub 5XX. Spróbuj zmienić kod stanu, podając nieprawidłowe parametry i sprawdź.
- Kiedy potwierdzimy warunek, na konsoli nie będzie drukowania, chyba że wystąpi błąd.
Skrypt pobierający różne części odpowiedzi
Pobieranie treści odpowiedzi i kodu stanu odpowiedzi zostało już omówione w powyższym segmencie. Warto zauważyć, że przy pobieraniu różnych części odpowiedzi bardzo ważne jest słowo kluczowe „wyciąg”.
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 „biven().when()” zostało tutaj pominięte, a linia kodu zaczyna się od get(), ponieważ nie ma tu żadnego warunku wstępnego ani weryfikacji, aby trafić w żądanie i uzyskać odpowiedź. W takich przypadkach opcjonalne jest użycie tego samego.
wyjście:
Potrzeba biznesowa:
Bardzo często konieczne jest użycie tokena autoryzacyjnego lub pliku cookie sesji w celu realizacji kolejnego żądania. Zazwyczaj te dane są 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 czas reakcji, pozwalający zmierzyć wydajność aplikacji. Pamiętaj, że czas potrzebny na połączenie może zająć więcej lub mniej czasu, w zależności od szybkości Twojego Internetu, wydajności interfejsu API w tym czasie, obciążenia serwera i innych czynników mających wpływ na czas.
Typ zawartości
Możesz uzyskać typ treści odpowiedzi zwróconej 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 typu zawartości jest niezbędne, aby upewnić się, że nie ma luk w zabezpieczeniach w przypadku zagrożeń pochodzących z innych źródeł lub po prostu aby mieć pewność, że przekazywana treść jest zgodna ze standardami interfejsu API.
Pobierz indywidualny element JSON
Na podstawie podanej odpowiedzi zostaniesz poproszony o obliczenie łącznej kwoty, musisz pobrać każdą kwotę i ją zsumować.
Kroki:
Krok 1) Pole kwoty znajduje się w tablicy z kluczowymi „wyrażeniami”, która z kolei znajduje się na liście z kluczem „wynik”
Krok 2) Zapewniamy spokój, zapewnia mechanizm umożliwiający osiągnięcie wartości w interfejsie 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 selenie.
Krok 4) Pobierz wszystkie kwoty w kolekcji, a następnie wykonaj pętlę dla wszystkich 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 typu string, konwertujemy ją na liczbę całkowitą i używamy jej do sumowania.
Wyjście:
Podsumowanie
- Rest Assured to grupa bibliotek Java, która umożliwia nam automatyzację Resztowe testowanie API
- Pewność, że jest Java- oparte na wiedzy i rdzeniu Java wystarczy, żeby się tego nauczyć
- Pomaga pobrać wartości żądań i odpowiedzi ze skomplikowanych struktur JSON
- Menu główne API żądanie można dostosować za pomocą różnych nagłówków, zapytań, parametrów ścieżki i dowolnej sesji lub plików cookie do ustawienia.
- Pomaga w ustalaniu stwierdzeń i warunków potwierdzania.
- Chociaż funkcja Rest Assured jest bardzo pomocna, gdy odpowiedź jest typu JSON, jej metody mogą nie działać płynnie, jeśli typ treści ma identyfikator HTML lub zwykły tekst.