Środowisko testowe pod rest-a
DESCRIPTION
Piotr Misiuga - prezentacja z trzeciego spotkania Quality Meetup.TRANSCRIPT
![Page 1: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/1.jpg)
ŚRODOWISKO TESTOWE POD REST’A
Piotr MisiugaTest Developer
![Page 2: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/2.jpg)
AGENDA
1. REST API 2. Framework Rest-Assured 3. Maven – wprowadzenie 4. Embedded Tomcat i Embedded
ElasticSearch 5. SonarQube i pokrycie testów
integracyjnych z JaCoCo
![Page 3: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/3.jpg)
AGENDA
1. REST API 2. Framework Rest-Assured 3. Maven – wprowadzenie 4. Embedded Tomcat i Embedded
ElasticSearch 5. SonarQube i pokrycie testów
integracyjnych z JaCoCo
![Page 4: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/4.jpg)
REST API
Representational State Transfer – styl architektoniczny dla projektowania aplikacji rozproszonych
Założenia: Architektura klient-serwer Bezstanowość (cache) Jednolity interfejs dostępu
Jednolity interfejs: Jednolita identyfikacja / adresacja zasobów Manipulacja zasobami poprzez ich reprezentacje Bezstanowa komunikacja (serwer nie tworzy sesji)
![Page 5: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/5.jpg)
REST API
Styl architektury dla projektowania aplikacji sieciowych
http://www.codeproject.com/Articles/426769/Creating-a-REST-service-using-ASP-NET-Web-API
![Page 6: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/6.jpg)
REST API
Zasoby jako źródła danych URI – nazwa, która identyfikuje zasób
Np. http://myserver/tasks Np. http://myserver/tasks/12345
http://www.codeproject.com/Articles/426769/Creating-a-REST-service-using-ASP-NET-Web-API
![Page 7: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/7.jpg)
REST API
Każdy zasób posiada reprezentację Reprezentacje dodatkowo mogą zawierać
metadane
http://www.codeproject.com/Articles/426769/Creating-a-REST-service-using-ASP-NET-Web-API
![Page 8: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/8.jpg)
ARCHITEKTURA TESTÓW
![Page 9: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/9.jpg)
REST API – JEDNOLITY INTERFEJSMETODY
GET - odczytywanie danych POST - wstawianie/edycja danych PUT – wstawianie/edycja danych DELETE - usuwanie danych
![Page 10: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/10.jpg)
REST API – METODA GET
![Page 11: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/11.jpg)
REST API – METODA GET
![Page 12: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/12.jpg)
REST API – METODA GET
Filtrowanie zapytań
![Page 13: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/13.jpg)
![Page 14: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/14.jpg)
REST API – METODA POST
![Page 15: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/15.jpg)
REST API – METODY CRUD ≠ HTTP?
CRUD HTTP
Create POST
Read GET
Update PUT
Delete DELETE
![Page 16: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/16.jpg)
POST VS. PUT
Idempotentność – koncepcja specyfikacji HTTP.
Requesty, które posiadają tę cechę będą zakończone niezmiennym stanem po stronie serwera, niezależnie od tego ile razy zostaną wykonane.
GET, HEAD, PUT, DELETE są idempotentne
![Page 17: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/17.jpg)
POST VS. PUT OPERACJA CREATE
POST:- zalecana metoda- używamy, gdy nie znamy identyfikatora tworzonego zasobu (generowany jest po stronie serwera)- w odpowiedzi otrzymujemy status „201 Created” oraz położenie(identyfikator) nowostworzonego zasobu
![Page 18: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/18.jpg)
POST VS. PUT OPERACJA CREATE
PUT:- musimy podać identyfikator- używane w systemach, gdzie identyfikator generowany jest po stronie klienta-Wstawia zasób zastępując całkowicie to co istnieje pod danym URL, dlatego wymaga podania wszystkich wartości
![Page 19: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/19.jpg)
POST VS. PUT OPERACJA UPDATE
POST:- w ciele możemy podać wszystkie pola lub tylko niektóre z nich- nie jest idempotentna, bezpieczna
![Page 20: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/20.jpg)
POST VS. PUT OPERACJA UPDATE
PUT:- w ciele musimy podać wszystkie pola(wartości)- jest idempotentna
![Page 21: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/21.jpg)
PODSUMOWANIE
ZasóbPOST
(create)GET
(read)PUT
(update)DELETE(delete)
/customers
201(Created), Zostaje
stworzony nowy klient z
wygenerowanym ID
200(OK),Pobranie listy
klientów
404(Not Found), chyba, że edytujemy całą kolekcję
404(Not Found), chyba, że usuwamy całą kolekcję
/customers/{id}
404(Not Found)Pobranie klienta
o ID {id}
200(OK) lub 204(No
Content). Zwraca klienta jeśli istnieje.
404(Not Found) Jeśli nie istnieje
zwraca błąd
200(OK) usuwa klienta o ID
{id}. 404(Not Found)Jeśli nie istnieje
zwraca błąd.
![Page 22: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/22.jpg)
NARZĘDZIA DO TESTOWANIA REST’A
curl
Python:-urllib2-requests-rester
Java:-Rest-assured + awaitility
![Page 23: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/23.jpg)
AGENDA
1. REST API 2. Framework Rest-Assured 3. Maven – wprowadzenie 4. Embedded Tomcat i Embedded
ElasticSearch 5. SonarQube i pokrycie testów
integracyjnych z JaCoCo
![Page 24: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/24.jpg)
REST-ASSURED
Łatwy w użyciu DSL oparty na Javie Gherkin syntax (given(), when(), then()) Automatyczne mapowanie(JAX-B dla XML jak i
Jackson lub Gson dla JSON) Walidacja Xpath (XMLPath) Walidacja JSONpath (JSONPath) Reużywalność specyfikacji
![Page 25: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/25.jpg)
REST-ASSURED
![Page 26: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/26.jpg)
REST-ASSURED
Wymagania:-JDK >= 1.6-Maven
Instalacja za pomocą maven’a:
![Page 27: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/27.jpg)
KONFIGURACJA REST-ASSURED
![Page 28: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/28.jpg)
WALIDACJA JSON’A
![Page 29: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/29.jpg)
WALIDACJA JSON’A II
![Page 30: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/30.jpg)
WALIDACJA JSON’A VS. JSON SCHEMA
![Page 31: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/31.jpg)
WALIDACJA JSON VS. JSON SCHEMA
![Page 32: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/32.jpg)
GROOVY CLOSURES W JSONPATH
![Page 33: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/33.jpg)
GROOVY CLOSURES W JSONPATH
![Page 34: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/34.jpg)
WALIDACJA XML
![Page 35: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/35.jpg)
WALIDACJA XML – OBSŁUGA XPATH
![Page 36: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/36.jpg)
WALIDACJA XML WYKORZYSTUJĄC XSD SCHEMA
![Page 37: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/37.jpg)
WALIDACJA XML WYKORZYSTUJĄC XSD SCHEMA
![Page 38: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/38.jpg)
WALIDACJA XML WYKORZYSTUJĄC XSD SCHEMA
![Page 39: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/39.jpg)
PRZESYŁANIE PARAMETRÓW, WALIDACJA STATUSU I CONTENT-TYPE
![Page 40: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/40.jpg)
PROSTE UWIERZYTELNIANIE
![Page 41: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/41.jpg)
USTAWIANIE NAGŁÓWKÓW
![Page 42: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/42.jpg)
TESTOWANIE NAGŁÓWKÓW
![Page 43: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/43.jpg)
TESTOWANIE DOSTĘPU PRZY UŻYCIU COOKIES
![Page 44: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/44.jpg)
WALIDACJA ZA POMOCĄ COOKIES
![Page 45: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/45.jpg)
WIELOKROTNE WYKORZYSTANIE SPECYFIKACJI
![Page 46: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/46.jpg)
AWAITILITY – BIBLIOTEKA DO TESTOWANIA ASYNCHRONICZNYCH SYSTEMÓW
![Page 47: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/47.jpg)
AWAITILITY – BIBLIOTEKA DO TESTOWANIA ASYNCHRONICZNYCH SYSTEMÓW
Instalacja
Przykład użycia
![Page 48: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/48.jpg)
AWAITILITY + REST-ASSURED
![Page 49: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/49.jpg)
AGENDA
1. REST API 2. Framework Rest-Assured 3. Maven – wprowadzenie 4. Embedded Tomcat i Embedded
ElasticSearch 5. SonarQube i pokrycie testów
integracyjnych z JaCoCo
![Page 50: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/50.jpg)
MAVEN – WPROWADZENIE
Budowanie oprogramowania przy użyciu maven’a ma zakończyć się osiągnięciem wybranego celu
Cele definiowane są przez wtyczki (plugins) Cele mogą być wywoływane w różnych
fazach cyklu życia projektu Projekt mavenowy definiuje się poprzez
stworzenie i utrzymywanie pliku pom.xml (Project Object Model)
POM zawiera elementy definiujące projekt, jego strukturę, sposób budowania i zależności
![Page 51: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/51.jpg)
PRZYKŁADOWY POM.XML
![Page 52: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/52.jpg)
DOMYŚLNY CYKL ŻYCIA PROJEKTU Fazy domyślnego cyklu życia projektu:
- validate - sprawdza poprawność projektu
- compile - kompiluje kod źródłowy;
- test - wykonuje testy jednostkowe;
- package - pakuje skompilowany kod w paczki dystrybucyjne (np. Jar, war);
- integration-test – deployuje paczkę w środowisku testów integracyjnych;
- verify - sprawdza poprawność paczki;
- install - umieszcza paczkę w lokalnym repozytorium aby mogła być używana przez inne moduły;
- deploy - umieszcza (publikuje) paczkę w zdalnym repozytorium.
![Page 53: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/53.jpg)
DODATKOWE CYKLE ŻYCIA
clean – czyści wynik działania wcześniejszych buildów (folder target)
site – generuje dokumentację projektu
![Page 54: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/54.jpg)
PLUGINY
Wywołanie celów zdefiniowanych w pluginach za pomocą komendy mvn [plugin]:[goal]
mvn compile:compile
![Page 55: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/55.jpg)
ZALEŻNOŚCI
![Page 56: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/56.jpg)
MAVEN - DZIAŁANIE
![Page 57: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/57.jpg)
POWIĄZANIA POMIĘDZY POM-AMI
1. Dziedziczenie projektów
Co jest dziedziczone?- zależności- pluginy- konfiguracje
2. Agregacja – projekty wielomodułowe
![Page 58: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/58.jpg)
DEFINIOWANIE USTAWIEŃ
Możliwość definiowania zmiennych lub zarządzania zmiennymi:- projektu ${project.version}
- środowiskowymi ${env.JAVA_HOME} - systemowymi ${java.version}
![Page 59: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/59.jpg)
PROFILE
Umożliwiają zbudowanie projektu w różnych środowiskach np. QA, DEV, PROD
![Page 60: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/60.jpg)
PROFILE
Aktywacja profilu mvn [plugin]:[goal]-P[profil]
![Page 61: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/61.jpg)
AGENDA
1. REST API 2. Framework Rest-Assured 3. Maven – wprowadzenie 4. Embedded Tomcat i Embedded
ElasticSearch 5. SonarQube i pokrycie testów
integracyjnych z JaCoCo
![Page 62: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/62.jpg)
INTEGRACYJNE TESTY NA EMBEDOWANYM TOMCACIE
Cel jaki chcemy uzyskać to:1. Uruchomić aplikację, którą chcemy testować na wtyczce Apache Maven Tomcat 72. Uruchomić testy posiadające przyrostek IntegrationTest3. Po testach wyłączyć serwer
![Page 63: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/63.jpg)
INTEGRACYJNE TESTY NA EMBEDOWANYM TOMCACIE
Wtyczka Surefire odpowiada za uruchomienie testów JUnit w fazie test
Musimy wyłączyć testy integracyjne z tej fazy
![Page 64: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/64.jpg)
INTEGRACYJNE TESTY NA EMBEDOWANYM TOMCACIE
Wtyczka Failsafe odpowiada za uruchomienie testów integracyjnych JUnit w fazie integration-test
Dodajemy testy integracyjne i aktywujemy plugin
![Page 65: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/65.jpg)
INTEGRACYJNE TESTY NA EMBEDOWANYM TOMCACIE
![Page 66: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/66.jpg)
WIELOMODUŁOWY PROJEKT NA EMBEDDED TOMCAT
Problem: Celem jest przetestowanie aplikacji zanim trafi do repozytorium
![Page 67: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/67.jpg)
WIELOMODUŁOWY PROJEKT NA EMBEDDED TOMCAT
Rozwiązanie: -ustawienie zmiennych w parent pom.xml
![Page 68: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/68.jpg)
WIELOMODUŁOWY PROJEKT NA EMBEDDED TOMCAT
Ustawienie ścieżek do projektów z zasobami w child-pomach
Moduł z testami aplikacji moduleA
Moduł z testami aplikacji moduleB
![Page 69: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/69.jpg)
ELASTICSEARCH – KTÓRTKIE WPROWADZENIE
Czym jest ES? Bazą danych dokumentów rozproszonych
Darmowym (open-source) silnikiem wyszukiwania w czasie rzeczywistym
Narzędziem do analizy
RESTowym serwisem
Nie przejmuje się schemą
![Page 70: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/70.jpg)
ELASTICSEARCH – JAKO BAZA NOSQL
MySQL ElasticSearch
Baza danych Index
Tabela Typ (Type)
Wiersz Dokument (Document)
Kolumna Pole (Field)
Schema Mapowanie (Mapping)
Index Wszystko jest indeksowane
SQL DSL zapytań
SELECT * FROM table… GET http://
UPDATE table SET … PUT http://
![Page 71: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/71.jpg)
EMBEDDED ELASTICSEARCH – POTRZEBNA TERMINOLOGIA
Node – instancja elasticsearch (proces javowy), zwykle jeden node uruchomiony jest na jednej maszynie. Odpowiada za przechowanie danych, dodawanie i usuwanie indeksów
Cluster – grupa node’ów z tym samym cluster.name, które współdzielą dane i zapewniają działanie i skalolwalność. Pojedynczy node może tworzyć cluster
Mapping – proces definiowania struktury typu w indeksie.
Client– klient javy, który umożliwia wysyłanie requestów do node’a w clusterze.
![Page 72: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/72.jpg)
INTEGRACYJNE TESTY W OPARCIU O EMBEDDED ELASTICSEARCH PROCEDURA
Tworzymy node’a Tworzymy indeks i definiujemy mapowanie Dodajemy dokumenty o danym typie Uruchamiamy naszego embedded
elasticsearch’a przed uruchomieniem testów
![Page 73: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/73.jpg)
EMBEDDED ELASTICSEARCH – TWORZENIE NODE’A
![Page 74: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/74.jpg)
PRZYKŁADOWY MAPPING
![Page 75: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/75.jpg)
EMBEDDED ELASTICSEARCH – DODAWANIE MAPPINGU, TWORZENIE INDEXU
![Page 76: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/76.jpg)
EMBEDDED ELASTICSEARCH – DODAWANIE DOKUMENTÓW
![Page 77: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/77.jpg)
INTEGRACYJNE TESTY W OPARCIU O EMBEDDED ELASTICSEARCH
Piszemy prosty mavenowy plugin dla embedded elasticsearch’a.
![Page 78: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/78.jpg)
AGENDA
1. REST API 2. Framework Rest-Assured 3. Maven – wprowadzenie 4. Embedded Tomcat i Embedded
ElasticSearch 5. SonarQube i pokrycie testów
integracyjnych z JaCoCo
![Page 79: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/79.jpg)
SONARQUBE – NARZĘDZIE DO ZARZĄDZANIA JAKOŚCIĄ KODU
Sonar analizuje kod w siedmiu wymiarach:
duplikacja kodu standardy kodowania (konwencje) testy jednostkowe kompleksowość potencjalne błędy komentarze architektura
![Page 80: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/80.jpg)
SONARQUBE - DASHBOARD
![Page 81: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/81.jpg)
POKRYCIE KODU
Co to jest pokrycie kodu?
Miara wykorzystywana przy testowaniu oprogramowania
Opisuje w jakim stopniu program został sprawdzony przez testy
Zazwyczaj wykorzystywane przy określaniu ‘skuteczności’ testów jednostkowych (integracyjnych)
Dla większości języków istnieją zestawy narzędzia do testowania / pomiaru pokrycia
Pokrycie możemy mierzyć według różnych kryteriów
![Page 82: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/82.jpg)
JACOCO – NARZĘDZIE UMOŻLIWIAJĄCE POMIAR POKRYCIA KODU W ŚRODOWISKACH JVM
JaCoCo
Analizuje pokrycie instrukcji (C0), gałęzi (C1), linii, metod, typów, powtarzalności kodu
Wspiera różne języki JVM Zintegrowane z wieloma popularnymi
narzędziami w tym SonarQube, Maven Przeprowadza instrumentacje bajt kodu „w locie”
(tym wyróżnia się spośród konkurencji) http://www.eclemma.org/jacoco/
![Page 83: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/83.jpg)
ANALIZA POKRYCIA KODU PRZEZ TESTY INTEGRACYJNE – SONAR I JACOCO
1. Konfiguracja agenta JaCoCo i przypisanie go do JVM, na której uruchamiane są testy integracyjne. Konfiguracja możliwa jest poprzez linię komend lub poprzez JaCoCo Maven plugin
2. Uruchomienie integracyjnych testów. Na koniec agent JaCoCo generuje raport pokrycia kodu w miejscu, które ustawiliśmy w kroku 1.
3. Konfiguracja SonarQube, by używał wygenerowanego raportu
4. Po uruchomieniu analizy Sonar’a generuje się pokrycie kodu przez testy integracyjne
![Page 84: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/84.jpg)
KONFIGURACJA AGENTA JACOCO – JACOCO MAVEN PLUGIN
Dodajemy jacoco-maven-plugin do naszego projektu
Konfigurujemy plugin
![Page 85: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/85.jpg)
![Page 86: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/86.jpg)
KONFIGURACJA FAILSAFE-PLUGIN
Konfigurujemy failsafe plugin, gdyż to on jest odpowiedzialny za uruchomienie testów integracyjnych
![Page 87: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/87.jpg)
KONFIGURACJA SONARQUBE
W pliku sonar-project.properties
sonar.jacoco.itReportPath=target/jacoco-it.exec
W sonar-maven-plugin
<sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin> <sonar.jacoco.itReportPath>target/jacoco-it.exec</
sonar.jacoco.itReportPath>
![Page 88: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/88.jpg)
ANALIZA POKRYCIA KODU PRZEZ TESTY INTEGRACYJNE – SONAR I JACOCO
Problem – Embedded Tomcat
Niestety wtyczka tomcat7-maven-plugin nie potrafi „skonsumować” / skorzystać z argLine’a, z którego korzysta failsafe plugin (Jetty potrafi)
Rozwiązanie:
Przekazanie argumentów VM do konfiguracji build’a
![Page 89: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/89.jpg)
ANALIZA POKRYCIA KODU PRZEZ TESTY INTEGRACYJNE – SONAR I JACOCO
![Page 90: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/90.jpg)
ANALIZA POKRYCIA KODU PRZEZ TESTY INTEGRACYJNE – SONAR I JACOCO
Wynik po uruchomieniu testów integracyjnych, a następnie analizy SonarQube’a
![Page 91: Środowisko testowe pod REST-a](https://reader033.vdocuments.net/reader033/viewer/2022042700/558c482fd8b42ae5768b45b3/html5/thumbnails/91.jpg)
DZIĘKUJĘ ZA UWAGĘ!