rest api testing with cucumber using bdd approach
Ten samouczek wyjaśnia testowanie interfejsu API REST z ogórkiem przy użyciu podejścia BDD. Obejmuje instalację oprogramowania, konfigurację projektu, wykonanie TestScript i raporty.
W tym artykule zobaczymy, jak rozpocząć testowanie REST API w stylu BDD z frameworkiem Cucumber.
Zanim zagłębimy się w ten temat, zrozumiemy ważne pojęcia z nim związane.
Zaczynajmy!!
Czego się nauczysz:
- Ważne pojęcia w REST API
- Jak działa ogórek?
- Konfigurowanie struktury testów ogórków w systemie Windows
- Wniosek
- rekomendowane lektury
Ważne pojęcia w REST API
ODPOCZYNEK
To jest styl architektoniczny oprogramowania. Pełna forma REST jest reprezentacyjnym transferem państwowym . Definiuje zestaw ograniczeń, które mają być używane do tworzenia usług internetowych. Usługi WWW zgodne ze stylem architektonicznym REST nazywane są usługami WWW RESTful.
Testowanie REST API
Testowanie REST API to testowanie API przy użyciu 4 głównych metod, tj. POST, GET, PUT i DELETE.
Szablon REST
RestTemplate to sprężynowa klasa open source, która zapewnia wygodny sposób testowania uspokajających usług sieci Web opartych na protokole HTTP, zapewniając przeciążone metody dla metod HTTP.
Uwaga : Aby dowiedzieć się więcej o koncepcji testowania interfejsu API REST, możesz zapoznać się z naszym wcześniejszym samouczkiem „ Testowanie REST API za pomocą Spring RestTemplate i TestNG ”Gdzie omówiliśmy, jak ręcznie wykonywać testy REST API wraz z koncepcją JSON.
BDD
BDD to podejście do rozwoju opartego na zachowaniu. Jest to jedna z technik tworzenia oprogramowania, która wyłoniła się z rozwoju sterowanego testami, tj. W stylu TDD.
Zasada testowania BDD polega na tym, że przypadki testowe są pisane w języku naturalnym, który jest łatwy do odczytania również przez osoby niebędące programistami.
Ogórek
Cucumber to narzędzie wspierające rozwój oparty na zachowaniu
Jak działa ogórek?
Zobaczmy, jak działa Cucumber.
Ogórek składa się z plików funkcji, plików definicji kroku i klasy Runner.
Pliki funkcji
Pliki funkcji są pisane przez Twojego analityka biznesowego lub być może Twojego sponsora. Są one napisane w formacie języka naturalnego z opisanymi specyfikacjami i potwierdzają, że aplikacja działa zgodnie ze specyfikacjami.
Te specyfikacje mają wiele scenariuszy lub przykładów, które są w nich wymienione. Każdy scenariusz to lista określonych kroków, przez które musi przejść Ogórek.
Rozważmy scenariusz, w którym użytkownik chce zalogować się do systemu.
Aby sprawdzić, czy to działa zgodnie ze specyfikacjami, należy opisać ten scenariusz. Oto kroki, które należy wykonać wraz z pożądanym wynikiem, zgodnie ze specyfikacjami.
najpopularniejsze systemy operacyjne dla komputerów osobistych
Żeby mieć pomysł, tak będzie wyglądał przykładowy scenariusz:
Scenario: Login to the system Given User launches Login screen When User enters username, password and submit Then Login Successful message appears
Jak widać, każdy scenariusz jest rodzajem listy kroków, przez które musi przejść Ogórek. Aby Cucumber zrozumiał scenariusze, musi przestrzegać kilku podstawowych reguł składni, tzw Korniszon .
Pliki definicji kroku
Pliki definicji kroków mapują każdy krok Gherkin wspomniany w pliku funkcji na kod implementacji. Dzięki temu Cucumber może wykonać akcję, która jest wymagana do wykonania kroku.
Framework Cucumber obsługuje wiele języków programowania do pisania definicji Step, takich jak Java, .net i Ruby.
Uwaga : W artykule ' Testowanie REST API za pomocą Spring RestTemplate i TestNG ”, Opracowaliśmy projekt testowy TestNG przy użyciu szablonu Spring.
Teraz opracujemy platformę testową dla tej samej usługi REST i RestTemplate, ale przy użyciu Cucumber do testowania opartego na zachowaniu.
Zacznijmy od konfiguracji naszej platformy testów automatyzacji w Cucumber!
Konfigurowanie struktury testów ogórków w systemie Windows
# 1) Instalacja
(ja) Będziemy używać języka Java do tworzenia definicji kroków. Więc najpierw pobierz instalator JDK dla systemu Windows z Wyrocznia i zainstaluj Javę na swoim komputerze.
(ii) IDE (zintegrowane środowisko programistyczne) : Użyłem Eclipse jako IDE do tworzenia pakietu Automation Test Suite. Możesz go pobrać z Zaćmienie
(iii) Pobierz wtyczkę Eclipse dla Cucumber:
Wykonaj następujące kroki w Eclipse:
- Wybierz Pomoc -> Zainstaluj nowe oprogramowanie z opcji menu.
- Wchodzić „Cucumber Eclipse” w polu tekstowym wyszukiwania.
- Kliknij na zainstalować przycisk.
Instalacja wtyczki Cucumber w Eclipse
- Klikaj przycisk Dalej, aż dojdziesz do Przejrzyj licencję ekran.
Na koniec kliknij pole wyboru, aby zaakceptować Umowę licencyjną, i kliknij koniec przycisk. To zakończy instalację. Teraz uruchom ponownie środowisko Eclipse IDE. Jest to wymagane, aby instalacja wtyczki została uruchomiona.
(iv) Wiosenne słoiki: Ponieważ zamierzamy używać klasy RestTemplate należącej do frameworka wiosennego, musimy mieć słoiki struktury spring. Możesz pobrać słoiki wiosenne z Spring Framework i zapisz go w folderze lokalnym. Na przykład, C: / projectJar
(v) Jars JSON-Simple: Musimy przeprowadzić analizę JSON. Dlatego użyjemy lekkiego interfejsu API prostego w JSON. Więc pobierz JSON-simple-1.1.jar i zapisz go w C: / projectJar
(vi) Słoiki ogórkowe:
Do uruchomienia projektu Cucumber potrzebne byłyby następujące słoiki z ogórkami:
- ogórek
- ogórek-java
- ogórek-JUnit
- ogórek-JVM-deps
- raportowanie ogórków
- korniszon
- JUnit
- mockito-all
- pokrycie
- cucumber-HTML (dla raportów w html)
Możesz pobrać te pliki za pomocą pliku pom.xml. Ale najprostszym sposobem jest pobranie tych plików jar z pliku Centralne repozytorium i zapisz te pliki jar w folderze lokalnym, Na przykład, C: / projectJar
Teraz dzięki temu zakończyliśmy wszystkie niezbędne instalacje. Stwórzmy więc nasz projekt BDD Test Automation.
# 2) Konfiguracja projektu
- Utwórz plik -> Nowy -> Projekt Java -> Nazwij go jako „ CRUD_Cucumber ”.
- Teraz utwórz nowy pakiet Java próbny.
- Skonfiguruj BuildPath projektu:
- Jak widzieliście we wcześniejszej sekcji, zainstalowaliśmy wtyczkę Cucumber, pobraliśmy sprężynę i proste słoiki JSON. Nadszedł więc czas, aby dodać ścieżkę kompilacji do naszego projektu, aby je wykorzystać. W tym celu utwórz plik lib folder w Folder CRUD_Cucumber ” a teraz skopiuj wszystkie słoiki z C: / projectJar do lib / Ogórek, lib / Wiosna teczka.
- Kliknij prawym przyciskiem myszy „ CRUD_Cucumber ” -> Ścieżka budowania -> Konfiguruj ścieżkę budowania.
- Kliknij na Biblioteki patka.
- Kliknij Dodaj słoiki przycisk-> Wybierz wszystkie słoiki z lib / Cucumber folder i lib / Spring teczka. Spowoduje to dodanie wszystkich słoików z ogórkami, słoików wiosennych i prostych słoików JSON do ścieżki tworzenia projektu.
Struktura Twojego projektu zostanie wyświetlona w Eksploratorze pakietów Eclipse w następujący sposób.
Struktura pakietu projektu testowego
# 3) Plik funkcji
Teraz zbudujmy nasz plik funkcji DemoFeature.feature posiadające funkcję Wykonywanie operacji CRUD na obsłudze pracowników.
W naszym przykładzie użyłem jednej przykładowej usługi REST http://dummy.restapiexample.com/api.
Ten plik funkcji opisuje scenariusze wykonywania operacji CRUD, tj. W celu pokrycia CRUD (Utwórz-Odczyt-Aktualizuj-Usuń).
- Zdefiniujmy najpierw funkcję, w naszym przypadku jest to testowanie metod CRUD, które można opisać w następujący sposób.
Feature: Test CRUD methods in Sample Employee REST API testing
- Teraz ma to różne scenariusze, takie jak tworzenie, aktualizowanie, odczytywanie i usuwanie rekordu pracownika. Spójrz więc na scenariusz POST:
Scenario: Add Employee record
- Opisz warunek wstępny testu, jakim jest ustawienie adresu URL usługi pracowniczej.
Given I Set POST employee service api endpoint
- Określ rzeczywisty krok testowy wysyłania prośby o wpis.
When I Set request HEADER And Send a POST HTTP request
- Teraz opisz weryfikację treści odpowiedzi.
Then I receive valid Response
Tak więc w naszym pliku funkcji Scenariusz będzie wyglądał następująco:
Scenario: Add Employee record Given I Set POST employee service api endpoint When I Set request HEADER And Send a POST HTTP request Then I receive valid Response
Podobnie możesz napisać pozostałe Scenariusze, jak pokazano poniżej.
DemoFeature.feature
# 4) Wdrażanie definicji kroków
W przypadku kroków funkcji używanych w powyższych scenariuszach musisz napisać implementacje programistyczne, w tym przypadku jest to Java.
Definicja kroku to metoda napisana w Javie, zawierająca wyrażenie. Łączy swoją metodę z jednym lub wieloma krokami. Tak więc, gdy Cucumber wykonuje kroki opisane w scenariuszu pliku funkcji, najpierw szuka dopasowania definicja kroku wykonać.
Na przykład, kiedy definicję kroku dla Dodaj pracownika za pomocą POST można zapisać w następujący sposób.
Dla danego kroku implementacja jest zapisana w następujący sposób:
@Given('^I Set POST employee service api endpoint$') public void setPostEndpoint(){ addURI = 'http://dummy.restapiexample.com/api/v1/create'; System.out.println('Add URL :'+addURI); }
Podobnie w przypadku kroku When, poniżej przedstawiono metodę definiowania:
@When ('^Send a POST HTTP request$') public void sendPostRequest(){ doublename_id = Math.random(); emp_name = 'zozo_'+name_id;//Just to avoid Duplicate Name entry String jsonBody'{'name':''+emp_name+'','salary':'123','age':'23'}'; System.out.println('
' + jsonBody); HttpEntityentity = new HttpEntity(jsonBody, headers); //POST Method to Add New Employee restTemplate = newRestTemplate (); response = restTemplate.postForEntity(addURI, entity, String.class); }
Teraz tutaj jest część kroku weryfikacji, czyli implementacja kroku To:
@Then ('^I receive valid Response$') Public void verifyPostResponse(){ responseBodyPOST = response.getBody(); // Write response to file responseBody = response.getBody().toString(); System.out.println('responseBody --->' + responseBody); // Get ID from the Response object employeeId = getEmpIdFromResponse(responseBody); System.out.println('empId is :' + employeeId); // Check if the added Employee is present in the response body. Assert.hasText(responseBody,employeeId); // Check if the status code is 201 Assert.isTrue(response.getStatusCode()==HttpStatus.OK); System.out.println('Employee is Added successfully employeeId:'+employeeId); }
Uwaga: Tutaj używamy metody RestTemplate do wysyłania żądania. To jest to samo, co metoda stosowana w „ Testowanie REST API za pomocą Spring RestTemplate i TestNG ' . Aby dowiedzieć się więcej o metodach Rest Template, możesz zapoznać się z samouczkiem.
W związku z tym definicja kroku będzie wyglądać następująco.
StepDefinition.java
Możesz wdrożyć definicje kroków dla pozostałych scenariuszy Aktualizuj, Odczytaj i Usuń pracownika w ten sam sposób.
# 5) Przeprowadzanie testów
Skończyliśmy już zadanie tworzenia scenariusza i skryptu krokowego, więc uruchommy nasze testy. W tym celu musimy napisać klasę biegacza JUnit.
publicclassRunner { }
Tutaj musisz dodać następujące adnotacje nad nazwą klasy:
@RunWith (Cucumber.class): Aby uruchomić klasę testową dla Cucumber.
@CucumberOptions: Tutaj określasz lokalizację pliku funkcji i lokalizację pliku definicji kroku, na które platforma Cucumber ma zajrzeć podczas wykonywania.
features='' glue=''
Podłącz: Służy do określania różnych opcji formatowania raportu, który jest generowany jako wynik.
Dlatego Twoja klasa biegaczy będzie wyglądać tak.
TestRunner.java
Wystarczy kliknąć prawym przyciskiem myszy TestRunner.java i wybierz opcję „ Uruchom jako test JUnit ” . Spowoduje to wyświetlenie wyniku wykonania testu w następujący sposób.
Wyjście karty Junit
darmowa kopiarka DVD dla systemu Windows 10
Na konsoli zobaczysz następujące komunikaty.
Wyjście konsoli
# 6) Raporty
Wynik widzieliśmy na konsoli. Jednak Cucumber zapewnia wyniki testów w bardziej reprezentatywnym formacie HTML, który można udostępnić zainteresowanym stronom.
otwarty cel -> raporty z ogórków w przeglądarce.
Uwaga : Pamiętasz CucmberOptions z klasy biegacza Junit?
@CucumberOptions (features='Features',glue={'demo'},plugin={'pretty', 'html:target/cucumber-reports'})
Tutaj wtyczka to opcja, którą określamy dla raportów w formacie HTML wraz z folderem.
target/cucumber-reports
Teraz otwórz stronę docelową cucumber-reports index.html. Strona raportu to strona HTML, na której można zobaczyć nazwę funkcji wraz ze scenariuszami, które zostały pomyślnie wykonane.
Twój raport będzie więc wyglądał następująco.
Wynik testu ogórka w formacie HTML
Wniosek
Na zakończenie tego samouczka podsumujmy, czego się do tej pory nauczyliśmy.
Od samego początku widzieliśmy wszystkie kroki, aby skonfigurować strukturę automatyzacji testów interfejsu API BDD Cucumber REST.
W tym procesie nauczyliśmy się następujących rzeczy:
- Do automatyzacji testów jako język programowania wybraliśmy Javę.
- Wybraliśmy Cucumber jako platformę testową do tworzenia zestawu testów w sposób testowy Behavior Driven Development.
- Do wysyłania rzeczywistych żądań HTTP do serwera wykorzystaliśmy klasę Spring Framework RestTemplate.
- Aby korzystać z tych interfejsów API, zainstalowaliśmy wtyczkę Cucumber, pobraliśmy pliki jar zależności Cucumber, Spring Jars i JSON-simple jar for parser API.
- Stworzyliśmy plik Feature, aby opisywać scenariusze w prostym języku angielskim, plik Step Definition do mapowania Steps i klasę JUnit Runner do uruchamiania pliku Feature.
- Na koniec uruchomiliśmy klasę Test Runner i zobaczyliśmy wynik na konsoli w bardziej reprezentatywnym i czytelnym formacie HTML.
Krótko mówiąc, w tym artykule wyjaśniono, jak rozpocząć automatyzację testów interfejsu API REST za pomocą Cucumber. Omówiliśmy konfigurację naszego środowiska automatyzacji testów, od instalacji całego niezbędnego oprogramowania, konfiguracji projektu, rozwoju TestScript aż do wykonania testu i przeglądania wygenerowanych raportów.
Jest to wystarczające, aby każda kontrola jakości automatyzacji mogła zacząć korzystać ze struktury automatyzacji testów. Ale jeśli ktoś chce szczegółowo zrozumieć, jak działa wewnętrznie Ogórek, jak działa język Korniszon, może to zbadać na Ogórek.
Mam nadzieję, że jesteś gotowy, aby rozpocząć testowanie REST API w stylu BDD z ogórkiem !!
rekomendowane lektury
- 10 najlepszych narzędzi do testowania API w 2021 roku (narzędzia testowe SOAP i REST API)
- Najlepsze narzędzia do testowania oprogramowania 2021 (Narzędzia do automatyzacji testów QA)
- Testowanie REST API z Spring RestTemplate i TestNG
- Testing Primer Pobierz eBook
- 20 najważniejszych pytań i odpowiedzi do wywiadów dotyczących testowania API
- Testowanie SaaS: wyzwania, narzędzia i podejście do testowania
- Upraszczanie testowania API w Katalon Studio
- Testowanie automatyzacji przy użyciu narzędzia Cucumber i selenu - samouczek dotyczący selenu nr 30