際際滷

際際滷Share a Scribd company logo
www.proskar.pl
Testy integracyjne
Warsztaty PROSKAR
www.proskar.pl
Plan prezentacji
1. Czym s testy integracyjne?
2. Przedstawienie frameworku Arquillian.
3. Implementacja test坦w integracyjnych
Arquilliana wykonywanych na zdalnym
serwerze WildFly.
4. Konfiguracja Arquilliana.
5. Przeprowadzanie test坦w integracyjnych.
www.proskar.pl 2 / 47
Czym s testy integracyjne?
 Testy integracyjne su甜 testowaniu integracji
pomidzy dwoma moduami aplikacji, bd添
aplikacj a zewntrzn usug.
 Testy integracyjne powinny by uruchamiane
na specjalnie przygotowywanym rodowisku
testowym, kt坦re maksymalnie
odwzorowywaoby rodowisko produkcyjne.
www.proskar.pl 3 / 47
Framework Arquillian
 Arquillian to framework do przeprowadzenia
szeregu test坦w, r坦wnie甜 test坦w
integracyjnych, w symulowanym rodowisku
produkcyjnym.
 G坦wnym celem, jest przygotowanie
testowanego kodu do postaci archiwum
i wykonanie test坦w na wybranym kontenerze
aplikacyjnym, kt坦ry mo甜e by obsugiwany
w jednym z trzech tryb坦w.
www.proskar.pl 4 / 47
Tryby kontenera aplikacyjnego
 Wbudowany (embedded)  Arquillian sam
uruchomi proces kontenera aplikacji w tym
samym rodowisku, co uruchamiane testy.
Po wykonaniu test坦w kontener zostanie
wyczony.
www.proskar.pl 5 / 47
Tryby kontenera aplikacyjnego
 Zarzdzany (managed)  Arquillian uruchomi
proces kontenera aplikacji jako oddzielny
proces na oddzielnej instancji JVM.
Po wykonaniu test坦w kontener zostanie
wyczony.
www.proskar.pl 6 / 47
Tryby kontenera aplikacyjnego
 Zdalny (remote)  Arquillian wymaga
uruchomionej instancji kontenera pod
adresem wskazanym w konfiguracji, aby m坦c
wysa testowany kod na serwer w celu
wykonania test坦w, po czym odbiera wyniki ich
wykonania. W tym trybie Arquillian w 甜aden
spos坦b nie zarzdza cyklem 甜ycia kontenera.
Testowanie w tym trybie najlepiej symuluje
rodowisko produkcyjne.
www.proskar.pl 7 / 47
Schemat przeprowadzania test坦w
 Testowanie rozpoczyna si od uruchomienia
metody statycznej oznaczonej adnotacj
@Deployment, kt坦ra dostarcza archiwum
z testowanym rodowiskiem.
 Wygenerowane przez autora testu archiwum
wysyane jest nastpnie do kontenera, gdzie
wykonywane s testy w tej klasie a ich wynik jest
odbierany po ich wykonaniu.
 Nastpnie po wykonaniu test坦w archiwum jest
odczane od kontenera.
www.proskar.pl 8 / 47
Schemat przeprowadzania test坦w
 Ka甜dy plik testowy wymaga wasnej adnotacji
@Deployment i wi甜e si z wygenerowaniem
oddzielnego archiwum, kt坦re zostanie
sekwencyjnie wdro甜one na serwer testowy.
W jednej chwili na raz testowana jest tylko
jedna klasa.
www.proskar.pl 9 / 47
Implementacja test坦w integracyjnych
Arquilliana wykonywanych na zdalnym
serwerze WildFly
www.proskar.pl 10 / 47
Wymagane zale甜noci Maven
 Wszystkie zale甜noci dodawane s w tagu
<dependencyManagement> g坦wnego POM'a,
gdzie okrela si wersje wszystkich
komponent坦w. W plikach POM modu坦w
definiuje si ju甜 tylko wymagane komponenty
bez definiowania wersji. Dziki takiemu
podejciu modyfikacja wersji frameworka jest
znacznie prostsza.
www.proskar.pl 11 / 47
Wymagane zale甜noci Maven
 Podstaw Arquilliana jest BOM.
www.proskar.pl 12 / 47
Wymagane zale甜noci Maven
 Wersjonowanie zale甜noci mo甜na rozwiza
poprzez parametry definiowane w POM'ie, co
dodatkowo pomo甜e uproci zarzdzanie
wersjami. ${arquillian-version} zdefiniowany
jest w czci properties:
www.proskar.pl 13 / 47
Wymagane zale甜noci Maven
 Kolejnym wa甜nym krokiem jest zdefiniowanie
zale甜noci do kontenera.
www.proskar.pl 14 / 47
Wymagane zale甜noci Maven
 Aby m坦c testowa integracj z baz danych,
nale甜y doda zale甜no do transakcyjnoci
Arquilliana.
www.proskar.pl 15 / 47
Wa甜ne!
Przedstawiona na poprzednim slajdzie musi by
umieszczona nad zale甜noci BOM'a Arquilliana.
Wynika to ze sposobu rozwizywania zale甜noci
przez Maven'a. W skr坦cie: je甜eli jaki artefakt
zostanie zdefiniowany w BOM'ie to zale甜no ta
zostanie zapamitana i p坦添niejsze wersje bd
pominite. U甜ywanie BOM'坦w niesie ze sob to
niebezpieczestwo, 甜e czasami do poprawnego
dziaania potrzebujemy zale甜noci w innych
wersjach ni甜 te, zdefiniowane w BOM'ie. Dlatego
nale甜y zdefiniowa je nad BOM'em.
www.proskar.pl 16 / 47
Wymagane zale甜noci Maven
 Skoro g坦wny POM odpowiedzialny jest za
zarzdzanie wersjami zale甜noci, mo甜na te甜
zdefiniowa tam wersje plugin坦w
wykorzystywanych do budowania aplikacji.
 Dziki tym definicjom ka甜dy z modu坦w
budowany bdzie w okrelony przez nas spos坦b.
 Opr坦cz om坦wionych wczeniej zale甜noci nale甜y
doda pozostae, u甜yte w projekcie oraz w testach
(TestNG, PostgreSQL JodaTime i inne).
www.proskar.pl 17 / 47
Wymagane zale甜noci Maven
W testowanym module nale甜y w sekcji <dependencies>
doda zale甜nosci, kt坦re s u甜ywane w projekcie. Warto
zwr坦ci uwag na zasig (scope), kt坦ry wskazuje na
spos坦b dostarczenia zale甜noci przez kontener,
na kt坦rym uruchomiona ostanie nasza aplikacja.
www.proskar.pl 18 / 47
Wymagane zale甜noci Maven
 Dodajemy moduy u甜ywane w projekcie.
www.proskar.pl 19 / 47
Wymagane zale甜noci Maven
 Kolejny element to resolver ShrinkWrapa, aby
m坦c wygodnie budowa archiwa.
 <scope>test</scope> gwarantuje, 甜e artefakt
dostpny bdzie tylko w trakcie test坦w i nie
zostanie doczony do archiwum aplikacji po
zbudowaniu.
www.proskar.pl 20 / 47
Wymagane zale甜noci Maven
 Przysza kolej na zale甜noci, kt坦re dodaj
framework TestNG oraz rozszerzenie
Arquillianowe (wymagane do wykonywania
test坦w przy u甜yciu Arquilliana).
www.proskar.pl 21 / 47
Wymagane zale甜noci Maven
 Dodajemy definicj kontenera, na kt坦rym
bdziemy wykonywa testy. W tym wypadku
jest to zdalny serwer .
www.proskar.pl 22 / 47
Wymagane zale甜noci Maven
 Zale甜no umo甜liwiajca dodawanie
transakcyjnoci w testach Archqillianowych.
www.proskar.pl 23 / 47
Wymagane zale甜noci Maven
 Na koniec nale甜y w sekcji <build> zdefiniowa
plugin do wykonywania test坦w.
www.proskar.pl 24 / 47
Konfiguracja Arquilliana
www.proskar.pl 25 / 47
Plik konfiguracyjny
 Plik, w kt坦rym jest umieszczana konfiguracja
Arquilliana nosi nazw arquillian.xml.
 Powinien si on znajdowa w zasobach
testowych (Other Test Sources) w przypadku,
gdy wymagane jest nadpisanie domylnego
zachowania.
 W przypadku testowania na serwerze zdalnym
wymagane jest zdefiniowanie informacji
o tym甜e serwerze.
www.proskar.pl 26 / 47
Plik konfiguracyjny
www.proskar.pl 27 / 47
Plik konfiguracyjny
 W listingu na poprzednim slajdzie
zamieszczono trzy istotne informacje:
 defaultProtocol - opisuje jaki protok坦 ma by
u甜yty do wdra甜ania.
 DeploymentExportPath  bez tej opcji ShrinkWrap
bdzie umieszcza testowe archiwa
w systemowym folderze tymczasowym, skd
zostan usunite po wykonaniu test坦w
 Container wildfly-remote  okrela parametry
poczenia z serwerem zdalnym.
www.proskar.pl 28 / 47
Wa甜ne!
Po dodaniu zale甜noci i pliku konfiguracyjnego
Arquilliana projekt powinien si budowa, cho
nie bd wykonywane 甜adne testy. Je甜eli projekt
nie buduje si na tym etapie oznacza to mo甜e
nieprawidowoci w definiowaniu zale甜noci
bd添 konfiguracji Arquilliana. Nale甜y zwr坦ci
uwag r坦wnie甜, czy serwer zdalny jest dostpny
(uruchomiony).
www.proskar.pl 29 / 47
Testy integracyjne
www.proskar.pl 30 / 47
Tworzenie testu Arquilliana
 Aby wykona testy w danej klasie niezbdne
jest:
 Rozszerzenie klasy org.jboss.arquillian.testng.Arquillian,
 Zdefiniowanie w tej klasie publicznej metody statycznej,
kt坦ra zwraca obiekt dziedziczcy po Archive,
 Opatrzenie tej klasy adnotacj
org.jboss.arquillian.container.test.api.Deployment.
www.proskar.pl 31 / 47
Deployment przy pomocy
 Zwracanie obiektu w przedstawionej wczeniej
metodzie jest mo甜liwe dziki zastosowaniu
biblioteki ShrinkWrap.
www.proskar.pl 32 / 47
Deployment przy pomocy
 Aby generowa rozbudowane Archiwum
testowe mo甜na przygotowa klas, kt坦r
bdzie mo甜na u甜ywa w wielu testach.
www.proskar.pl 33 / 47
Przykad metody tworzcej archiwum
www.proskar.pl 34 / 47
Wymagania dotyczce bazy danych
W trakcie test坦w nale甜y zapewni poczenie do
bazy testowej. Mo甜e to by 添r坦do zar坦wno JTA,
jak i lokalne. Nale甜y jednak zapewni, aby
czyo si do bazy w ten sam spos坦b co 添r坦do
produkcyjne. Testowa baza danych powinna by
utworzona na tej samej bazie danych.
W przeciwnym wypadku testy integracyjne nie
bd w peni prawidowo testowa integracji
z baz danych.
www.proskar.pl 35 / 47
Metoda resolveProjectClasses(archive)
 Metoda resolveProjectClasses(archive)
odpowiedzialna jest za dodanie testowanego
kodu.
www.proskar.pl 36 / 47
Metoda resolveDependencies(archive)
 Odpowiada za dodanie zale甜noci z POM'a.
www.proskar.pl 37 / 47
Pisanie test坦w Arquilliana
 Testy Arquilliana polegaj w g坦wnej mierze na
wykonywaniu testowanej metody oraz
por坦wnywaniu otrzymanego wyniku
z wartoci oczekiwan.
www.proskar.pl 38 / 47
Pisanie test坦w Arquilliana
 Aby przetestowa obiekt Dao nale甜y go
wstrzykn tak jak poni甜ej:
www.proskar.pl 39 / 47
Pisanie test坦w Arquilliana
 Kod wykonywany przed i po testach powinien
by umieszczony w publicznie dostpnych
metodach oznaczonych adnotacjami
@BeforeTest i @AfterTest.
www.proskar.pl 40 / 47
Przykadowy test
www.proskar.pl 41 / 47
Klasa abstrakcyjna test坦w NG
 Implementacje Arquilliana mo甜na
z powodzeniem ukry przy pomocy klasy
abstrakcyjnej, kt坦r rozszerzayby wszystkie
testy integracyjne i funkcjonalne.
 W tym celu mo甜na stworzy klas
abstrakcyjn, kt坦ra rozszerza klas Arquillian.
www.proskar.pl 42 / 47
Metodyka przeprowadzania test坦w
integracyjnych z baz danych
 Aby prawidowo przeprowadzi testy
integracyjne z baz danych testy powinny
sprawdza jak dziaaj wszystkie metody
obiekt坦w.
www.proskar.pl 43 / 47
Co nale甜y sprawdzi?
 Manipulacja na danych. Czy cay CRUD dziaa prawidowo?
 Walidacja p坦l unikalnych. Czy na pewno nie mo甜na doda
dw坦ch obiekt坦w o takiej samej wartoci?
 Walidacja wartoci generowanych po stronie bazy. Je甜eli
metoda wykonuje akcj DML na obiekcie i w trakcie tej akcji
baza danych powinna modyfikowa jak warto obiektu,
to nale甜y sprawdzi, czy ta warto jest dostpna.
 Test walidacji p坦l. Je甜eli w dano pole mo甜na wpisa tylko
warto o cile okrelonej semantyce, nale甜y sprawdzi czy
poprawna semantycznie warto mo甜e zosta zapisana oraz
czy nie istnieje jaka warto niepoprawna, kt坦ra mo甜e
zosta zapisana.
www.proskar.pl 44 / 47
Co nale甜y sprawdzi?
 Je甜eli w projekcie istnieje DML wdro甜eniowy nale甜y sprawdzi, czy
wartoci znajduj si w bazie i s dostpne. Mo甜na sprawdzi ich
wartoci oraz liczno.
 Je甜eli baza danych posiada jakie funkcje generujce wartoci nale甜y
sprawdzi, czy zwracane wartoci s poprawne semantycznie i s
zgodne z zao甜eniami projektowymi.
 Je甜eli pole jest unikalne tylko w pewnym kontekcie, nale甜y
sprawdzi, czy unikalno jest tylko w tym kontekcie i nie
uniemo甜liwia nadawanie tych wartoci w innych kontekstach.
 Je甜eli do pola testowego zapisywana jest jaka enumeracja, nale甜y
walidowa wprowadzanie wszystkich wartoci oraz wartoci spoza
enumeracji oczekujc bdu wstawienia.
www.proskar.pl 45 / 47
Wa甜ne!
 Po ka甜dym tecie nastpuje wycofanie
transakcji.
 Kolejno test坦w nie ma znaczenia.
www.proskar.pl 46 / 47
Dzikuj za uwag
www.proskar.pl 47 / 47

More Related Content

What's hot (6)

Automation of functional tests using JMeter (in Polish)
Automation of functional tests using JMeter (in Polish)Automation of functional tests using JMeter (in Polish)
Automation of functional tests using JMeter (in Polish)
Tieto Corporation
JMeter narzdzie testera
JMeter  narzdzie testeraJMeter  narzdzie testera
JMeter narzdzie testera
Stowarzyszenie Jakoci System坦w Informatycznych (SJSI)
Narzedzia zarzdzania testowaniem.Wyniki.
Narzedzia zarzdzania testowaniem.Wyniki.Narzedzia zarzdzania testowaniem.Wyniki.
Narzedzia zarzdzania testowaniem.Wyniki.
Radoslaw Smilgin
Benchmarking
Benchmarking Benchmarking
Benchmarking
Wojciech Oczkowski
Narzdzia zarzadzania testowaniem - analiza rynku
Narzdzia zarzadzania testowaniem - analiza rynkuNarzdzia zarzadzania testowaniem - analiza rynku
Narzdzia zarzadzania testowaniem - analiza rynku
Radoslaw Smilgin
JMeter - narzdzie testera - notatki
JMeter - narzdzie testera - notatkiJMeter - narzdzie testera - notatki
JMeter - narzdzie testera - notatki
Stowarzyszenie Jakoci System坦w Informatycznych (SJSI)

Similar to Testy integracyjne (20)

Testy funkcjonalne
Testy funkcjonalneTesty funkcjonalne
Testy funkcjonalne
PROSKAR
Selenium
SeleniumSelenium
Selenium
PROSKAR
rodowisko testowe pod REST-a
rodowisko testowe pod REST-arodowisko testowe pod REST-a
rodowisko testowe pod REST-a
Future Processing
Olga 纏do - Robot Framework
Olga 纏do - Robot FrameworkOlga 纏do - Robot Framework
Olga 纏do - Robot Framework
Tr坦jmiejska Grupa Testerska
Perl. Testowanie. Zapiski programisty
Perl. Testowanie. Zapiski programistyPerl. Testowanie. Zapiski programisty
Perl. Testowanie. Zapiski programisty
Wydawnictwo Helion
Tech cafe Microservices
Tech cafe MicroservicesTech cafe Microservices
Tech cafe Microservices
Konrad Kr坦l
Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?
tkryskiewicz
JavaScript, Moduy
JavaScript, ModuyJavaScript, Moduy
JavaScript, Moduy
Mariusz Nowak
SCAP standaryzacja format坦w wymiany danych w zakresie bezpieczestwa IT
SCAP  standaryzacja format坦w wymiany danych w zakresie bezpieczestwa ITSCAP  standaryzacja format坦w wymiany danych w zakresie bezpieczestwa IT
SCAP standaryzacja format坦w wymiany danych w zakresie bezpieczestwa IT
Redge Technologies
Laravel Pozna Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...
Laravel Pozna Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...Laravel Pozna Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...
Laravel Pozna Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...
HighSolutions Sp. z o.o.
EloquentSequence - historia pewnej biblioteki Open Source
EloquentSequence - historia pewnej biblioteki Open SourceEloquentSequence - historia pewnej biblioteki Open Source
EloquentSequence - historia pewnej biblioteki Open Source
Laravel Poland MeetUp
Core Java Servlets i JavaServer Pages. Tom II. Wydanie II
Core Java Servlets i JavaServer Pages. Tom II. Wydanie IICore Java Servlets i JavaServer Pages. Tom II. Wydanie II
Core Java Servlets i JavaServer Pages. Tom II. Wydanie II
Wydawnictwo Helion
Maciej Rudnicki: Zautomatyzowane rodowisko deweloperskie.
Maciej Rudnicki: Zautomatyzowane rodowisko deweloperskie.Maciej Rudnicki: Zautomatyzowane rodowisko deweloperskie.
Maciej Rudnicki: Zautomatyzowane rodowisko deweloperskie.
Meet Magento Poland
Jak przyspieszyem aplikacj produkcyjn o ponad 40%
Jak przyspieszyem aplikacj produkcyjn o ponad 40%Jak przyspieszyem aplikacj produkcyjn o ponad 40%
Jak przyspieszyem aplikacj produkcyjn o ponad 40%
Laravel Poland MeetUp
[TestWarez 2017] Architektura test坦w automatycznych dla wielomoduowej aplika...
[TestWarez 2017] Architektura test坦w automatycznych dla wielomoduowej aplika...[TestWarez 2017] Architektura test坦w automatycznych dla wielomoduowej aplika...
[TestWarez 2017] Architektura test坦w automatycznych dla wielomoduowej aplika...
Stowarzyszenie Jakoci System坦w Informatycznych (SJSI)
KraQA #22, Filip Cynarski - Selenium Grid w chmurze Amazon Web Services
KraQA #22, Filip Cynarski -  Selenium Grid w chmurze Amazon Web ServicesKraQA #22, Filip Cynarski -  Selenium Grid w chmurze Amazon Web Services
KraQA #22, Filip Cynarski - Selenium Grid w chmurze Amazon Web Services
kraqa
Cige Dostarcznie - Wprowadzenie
Cige Dostarcznie - WprowadzenieCige Dostarcznie - Wprowadzenie
Cige Dostarcznie - Wprowadzenie
Artur Radosz
Wprowadzenie do test坦w wydajnociowych w k6
Wprowadzenie do test坦w wydajnociowych w k6Wprowadzenie do test坦w wydajnociowych w k6
Wprowadzenie do test坦w wydajnociowych w k6
The Software House
Integracja liquibase ze stron internetow dla zarzdzania bazami danych[舒于仂...
Integracja liquibase ze stron internetow dla zarzdzania bazami danych[舒于仂...Integracja liquibase ze stron internetow dla zarzdzania bazami danych[舒于仂...
Integracja liquibase ze stron internetow dla zarzdzania bazami danych[舒于仂...
Sofiia Lahoda
Integracja liquibase ze stron internetow dla zarzdzania mapami
Integracja liquibase ze stron internetow dla zarzdzania mapami Integracja liquibase ze stron internetow dla zarzdzania mapami
Integracja liquibase ze stron internetow dla zarzdzania mapami
Sofiia Lahoda
Testy funkcjonalne
Testy funkcjonalneTesty funkcjonalne
Testy funkcjonalne
PROSKAR
Selenium
SeleniumSelenium
Selenium
PROSKAR
rodowisko testowe pod REST-a
rodowisko testowe pod REST-arodowisko testowe pod REST-a
rodowisko testowe pod REST-a
Future Processing
Perl. Testowanie. Zapiski programisty
Perl. Testowanie. Zapiski programistyPerl. Testowanie. Zapiski programisty
Perl. Testowanie. Zapiski programisty
Wydawnictwo Helion
Tech cafe Microservices
Tech cafe MicroservicesTech cafe Microservices
Tech cafe Microservices
Konrad Kr坦l
Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?Co nowego w ASP.NET MVC 4?
Co nowego w ASP.NET MVC 4?
tkryskiewicz
JavaScript, Moduy
JavaScript, ModuyJavaScript, Moduy
JavaScript, Moduy
Mariusz Nowak
SCAP standaryzacja format坦w wymiany danych w zakresie bezpieczestwa IT
SCAP  standaryzacja format坦w wymiany danych w zakresie bezpieczestwa ITSCAP  standaryzacja format坦w wymiany danych w zakresie bezpieczestwa IT
SCAP standaryzacja format坦w wymiany danych w zakresie bezpieczestwa IT
Redge Technologies
Laravel Pozna Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...
Laravel Pozna Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...Laravel Pozna Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...
Laravel Pozna Meetup #4 - EloquentSequence - Historia pewnej biblioteki Open...
HighSolutions Sp. z o.o.
EloquentSequence - historia pewnej biblioteki Open Source
EloquentSequence - historia pewnej biblioteki Open SourceEloquentSequence - historia pewnej biblioteki Open Source
EloquentSequence - historia pewnej biblioteki Open Source
Laravel Poland MeetUp
Core Java Servlets i JavaServer Pages. Tom II. Wydanie II
Core Java Servlets i JavaServer Pages. Tom II. Wydanie IICore Java Servlets i JavaServer Pages. Tom II. Wydanie II
Core Java Servlets i JavaServer Pages. Tom II. Wydanie II
Wydawnictwo Helion
Maciej Rudnicki: Zautomatyzowane rodowisko deweloperskie.
Maciej Rudnicki: Zautomatyzowane rodowisko deweloperskie.Maciej Rudnicki: Zautomatyzowane rodowisko deweloperskie.
Maciej Rudnicki: Zautomatyzowane rodowisko deweloperskie.
Meet Magento Poland
Jak przyspieszyem aplikacj produkcyjn o ponad 40%
Jak przyspieszyem aplikacj produkcyjn o ponad 40%Jak przyspieszyem aplikacj produkcyjn o ponad 40%
Jak przyspieszyem aplikacj produkcyjn o ponad 40%
Laravel Poland MeetUp
KraQA #22, Filip Cynarski - Selenium Grid w chmurze Amazon Web Services
KraQA #22, Filip Cynarski -  Selenium Grid w chmurze Amazon Web ServicesKraQA #22, Filip Cynarski -  Selenium Grid w chmurze Amazon Web Services
KraQA #22, Filip Cynarski - Selenium Grid w chmurze Amazon Web Services
kraqa
Cige Dostarcznie - Wprowadzenie
Cige Dostarcznie - WprowadzenieCige Dostarcznie - Wprowadzenie
Cige Dostarcznie - Wprowadzenie
Artur Radosz
Wprowadzenie do test坦w wydajnociowych w k6
Wprowadzenie do test坦w wydajnociowych w k6Wprowadzenie do test坦w wydajnociowych w k6
Wprowadzenie do test坦w wydajnociowych w k6
The Software House
Integracja liquibase ze stron internetow dla zarzdzania bazami danych[舒于仂...
Integracja liquibase ze stron internetow dla zarzdzania bazami danych[舒于仂...Integracja liquibase ze stron internetow dla zarzdzania bazami danych[舒于仂...
Integracja liquibase ze stron internetow dla zarzdzania bazami danych[舒于仂...
Sofiia Lahoda
Integracja liquibase ze stron internetow dla zarzdzania mapami
Integracja liquibase ze stron internetow dla zarzdzania mapami Integracja liquibase ze stron internetow dla zarzdzania mapami
Integracja liquibase ze stron internetow dla zarzdzania mapami
Sofiia Lahoda

More from PROSKAR (12)

Wysyanie wiadomoci email z u甜yciem serwera wildfly
Wysyanie wiadomoci email z u甜yciem serwera wildflyWysyanie wiadomoci email z u甜yciem serwera wildfly
Wysyanie wiadomoci email z u甜yciem serwera wildfly
PROSKAR
Walidacja po stronie klienta za pomoc jquery oraz angular js
Walidacja po stronie klienta za pomoc jquery oraz angular jsWalidacja po stronie klienta za pomoc jquery oraz angular js
Walidacja po stronie klienta za pomoc jquery oraz angular js
PROSKAR
Tworzenie klienta web service za pomoca cxf
Tworzenie klienta web service za pomoca cxfTworzenie klienta web service za pomoca cxf
Tworzenie klienta web service za pomoca cxf
PROSKAR
Standard tworzenia aplikacji JSF
Standard tworzenia aplikacji JSFStandard tworzenia aplikacji JSF
Standard tworzenia aplikacji JSF
PROSKAR
rodowisko android studio - podstawy
rodowisko android studio - podstawyrodowisko android studio - podstawy
rodowisko android studio - podstawy
PROSKAR
Primefaces - walidacja po stronie klienta
Primefaces - walidacja po stronie klientaPrimefaces - walidacja po stronie klienta
Primefaces - walidacja po stronie klienta
PROSKAR
Podstawy java server faces
Podstawy java server facesPodstawy java server faces
Podstawy java server faces
PROSKAR
Logowanie przez facebook i gmail w java
Logowanie przez facebook i gmail w javaLogowanie przez facebook i gmail w java
Logowanie przez facebook i gmail w java
PROSKAR
JMS java messaging service
JMS java messaging serviceJMS java messaging service
JMS java messaging service
PROSKAR
Java authentication and authorization service
Java authentication and authorization serviceJava authentication and authorization service
Java authentication and authorization service
PROSKAR
Flow scope w JSF
Flow scope w JSFFlow scope w JSF
Flow scope w JSF
PROSKAR
Blokada wykonywania wielu akcji z jednego widoku
Blokada wykonywania wielu akcji z jednego widokuBlokada wykonywania wielu akcji z jednego widoku
Blokada wykonywania wielu akcji z jednego widoku
PROSKAR
Wysyanie wiadomoci email z u甜yciem serwera wildfly
Wysyanie wiadomoci email z u甜yciem serwera wildflyWysyanie wiadomoci email z u甜yciem serwera wildfly
Wysyanie wiadomoci email z u甜yciem serwera wildfly
PROSKAR
Walidacja po stronie klienta za pomoc jquery oraz angular js
Walidacja po stronie klienta za pomoc jquery oraz angular jsWalidacja po stronie klienta za pomoc jquery oraz angular js
Walidacja po stronie klienta za pomoc jquery oraz angular js
PROSKAR
Tworzenie klienta web service za pomoca cxf
Tworzenie klienta web service za pomoca cxfTworzenie klienta web service za pomoca cxf
Tworzenie klienta web service za pomoca cxf
PROSKAR
Standard tworzenia aplikacji JSF
Standard tworzenia aplikacji JSFStandard tworzenia aplikacji JSF
Standard tworzenia aplikacji JSF
PROSKAR
rodowisko android studio - podstawy
rodowisko android studio - podstawyrodowisko android studio - podstawy
rodowisko android studio - podstawy
PROSKAR
Primefaces - walidacja po stronie klienta
Primefaces - walidacja po stronie klientaPrimefaces - walidacja po stronie klienta
Primefaces - walidacja po stronie klienta
PROSKAR
Podstawy java server faces
Podstawy java server facesPodstawy java server faces
Podstawy java server faces
PROSKAR
Logowanie przez facebook i gmail w java
Logowanie przez facebook i gmail w javaLogowanie przez facebook i gmail w java
Logowanie przez facebook i gmail w java
PROSKAR
JMS java messaging service
JMS java messaging serviceJMS java messaging service
JMS java messaging service
PROSKAR
Java authentication and authorization service
Java authentication and authorization serviceJava authentication and authorization service
Java authentication and authorization service
PROSKAR
Flow scope w JSF
Flow scope w JSFFlow scope w JSF
Flow scope w JSF
PROSKAR
Blokada wykonywania wielu akcji z jednego widoku
Blokada wykonywania wielu akcji z jednego widokuBlokada wykonywania wielu akcji z jednego widoku
Blokada wykonywania wielu akcji z jednego widoku
PROSKAR

Testy integracyjne

  • 2. Plan prezentacji 1. Czym s testy integracyjne? 2. Przedstawienie frameworku Arquillian. 3. Implementacja test坦w integracyjnych Arquilliana wykonywanych na zdalnym serwerze WildFly. 4. Konfiguracja Arquilliana. 5. Przeprowadzanie test坦w integracyjnych. www.proskar.pl 2 / 47
  • 3. Czym s testy integracyjne? Testy integracyjne su甜 testowaniu integracji pomidzy dwoma moduami aplikacji, bd添 aplikacj a zewntrzn usug. Testy integracyjne powinny by uruchamiane na specjalnie przygotowywanym rodowisku testowym, kt坦re maksymalnie odwzorowywaoby rodowisko produkcyjne. www.proskar.pl 3 / 47
  • 4. Framework Arquillian Arquillian to framework do przeprowadzenia szeregu test坦w, r坦wnie甜 test坦w integracyjnych, w symulowanym rodowisku produkcyjnym. G坦wnym celem, jest przygotowanie testowanego kodu do postaci archiwum i wykonanie test坦w na wybranym kontenerze aplikacyjnym, kt坦ry mo甜e by obsugiwany w jednym z trzech tryb坦w. www.proskar.pl 4 / 47
  • 5. Tryby kontenera aplikacyjnego Wbudowany (embedded) Arquillian sam uruchomi proces kontenera aplikacji w tym samym rodowisku, co uruchamiane testy. Po wykonaniu test坦w kontener zostanie wyczony. www.proskar.pl 5 / 47
  • 6. Tryby kontenera aplikacyjnego Zarzdzany (managed) Arquillian uruchomi proces kontenera aplikacji jako oddzielny proces na oddzielnej instancji JVM. Po wykonaniu test坦w kontener zostanie wyczony. www.proskar.pl 6 / 47
  • 7. Tryby kontenera aplikacyjnego Zdalny (remote) Arquillian wymaga uruchomionej instancji kontenera pod adresem wskazanym w konfiguracji, aby m坦c wysa testowany kod na serwer w celu wykonania test坦w, po czym odbiera wyniki ich wykonania. W tym trybie Arquillian w 甜aden spos坦b nie zarzdza cyklem 甜ycia kontenera. Testowanie w tym trybie najlepiej symuluje rodowisko produkcyjne. www.proskar.pl 7 / 47
  • 8. Schemat przeprowadzania test坦w Testowanie rozpoczyna si od uruchomienia metody statycznej oznaczonej adnotacj @Deployment, kt坦ra dostarcza archiwum z testowanym rodowiskiem. Wygenerowane przez autora testu archiwum wysyane jest nastpnie do kontenera, gdzie wykonywane s testy w tej klasie a ich wynik jest odbierany po ich wykonaniu. Nastpnie po wykonaniu test坦w archiwum jest odczane od kontenera. www.proskar.pl 8 / 47
  • 9. Schemat przeprowadzania test坦w Ka甜dy plik testowy wymaga wasnej adnotacji @Deployment i wi甜e si z wygenerowaniem oddzielnego archiwum, kt坦re zostanie sekwencyjnie wdro甜one na serwer testowy. W jednej chwili na raz testowana jest tylko jedna klasa. www.proskar.pl 9 / 47
  • 10. Implementacja test坦w integracyjnych Arquilliana wykonywanych na zdalnym serwerze WildFly www.proskar.pl 10 / 47
  • 11. Wymagane zale甜noci Maven Wszystkie zale甜noci dodawane s w tagu <dependencyManagement> g坦wnego POM'a, gdzie okrela si wersje wszystkich komponent坦w. W plikach POM modu坦w definiuje si ju甜 tylko wymagane komponenty bez definiowania wersji. Dziki takiemu podejciu modyfikacja wersji frameworka jest znacznie prostsza. www.proskar.pl 11 / 47
  • 12. Wymagane zale甜noci Maven Podstaw Arquilliana jest BOM. www.proskar.pl 12 / 47
  • 13. Wymagane zale甜noci Maven Wersjonowanie zale甜noci mo甜na rozwiza poprzez parametry definiowane w POM'ie, co dodatkowo pomo甜e uproci zarzdzanie wersjami. ${arquillian-version} zdefiniowany jest w czci properties: www.proskar.pl 13 / 47
  • 14. Wymagane zale甜noci Maven Kolejnym wa甜nym krokiem jest zdefiniowanie zale甜noci do kontenera. www.proskar.pl 14 / 47
  • 15. Wymagane zale甜noci Maven Aby m坦c testowa integracj z baz danych, nale甜y doda zale甜no do transakcyjnoci Arquilliana. www.proskar.pl 15 / 47
  • 16. Wa甜ne! Przedstawiona na poprzednim slajdzie musi by umieszczona nad zale甜noci BOM'a Arquilliana. Wynika to ze sposobu rozwizywania zale甜noci przez Maven'a. W skr坦cie: je甜eli jaki artefakt zostanie zdefiniowany w BOM'ie to zale甜no ta zostanie zapamitana i p坦添niejsze wersje bd pominite. U甜ywanie BOM'坦w niesie ze sob to niebezpieczestwo, 甜e czasami do poprawnego dziaania potrzebujemy zale甜noci w innych wersjach ni甜 te, zdefiniowane w BOM'ie. Dlatego nale甜y zdefiniowa je nad BOM'em. www.proskar.pl 16 / 47
  • 17. Wymagane zale甜noci Maven Skoro g坦wny POM odpowiedzialny jest za zarzdzanie wersjami zale甜noci, mo甜na te甜 zdefiniowa tam wersje plugin坦w wykorzystywanych do budowania aplikacji. Dziki tym definicjom ka甜dy z modu坦w budowany bdzie w okrelony przez nas spos坦b. Opr坦cz om坦wionych wczeniej zale甜noci nale甜y doda pozostae, u甜yte w projekcie oraz w testach (TestNG, PostgreSQL JodaTime i inne). www.proskar.pl 17 / 47
  • 18. Wymagane zale甜noci Maven W testowanym module nale甜y w sekcji <dependencies> doda zale甜nosci, kt坦re s u甜ywane w projekcie. Warto zwr坦ci uwag na zasig (scope), kt坦ry wskazuje na spos坦b dostarczenia zale甜noci przez kontener, na kt坦rym uruchomiona ostanie nasza aplikacja. www.proskar.pl 18 / 47
  • 19. Wymagane zale甜noci Maven Dodajemy moduy u甜ywane w projekcie. www.proskar.pl 19 / 47
  • 20. Wymagane zale甜noci Maven Kolejny element to resolver ShrinkWrapa, aby m坦c wygodnie budowa archiwa. <scope>test</scope> gwarantuje, 甜e artefakt dostpny bdzie tylko w trakcie test坦w i nie zostanie doczony do archiwum aplikacji po zbudowaniu. www.proskar.pl 20 / 47
  • 21. Wymagane zale甜noci Maven Przysza kolej na zale甜noci, kt坦re dodaj framework TestNG oraz rozszerzenie Arquillianowe (wymagane do wykonywania test坦w przy u甜yciu Arquilliana). www.proskar.pl 21 / 47
  • 22. Wymagane zale甜noci Maven Dodajemy definicj kontenera, na kt坦rym bdziemy wykonywa testy. W tym wypadku jest to zdalny serwer . www.proskar.pl 22 / 47
  • 23. Wymagane zale甜noci Maven Zale甜no umo甜liwiajca dodawanie transakcyjnoci w testach Archqillianowych. www.proskar.pl 23 / 47
  • 24. Wymagane zale甜noci Maven Na koniec nale甜y w sekcji <build> zdefiniowa plugin do wykonywania test坦w. www.proskar.pl 24 / 47
  • 26. Plik konfiguracyjny Plik, w kt坦rym jest umieszczana konfiguracja Arquilliana nosi nazw arquillian.xml. Powinien si on znajdowa w zasobach testowych (Other Test Sources) w przypadku, gdy wymagane jest nadpisanie domylnego zachowania. W przypadku testowania na serwerze zdalnym wymagane jest zdefiniowanie informacji o tym甜e serwerze. www.proskar.pl 26 / 47
  • 28. Plik konfiguracyjny W listingu na poprzednim slajdzie zamieszczono trzy istotne informacje: defaultProtocol - opisuje jaki protok坦 ma by u甜yty do wdra甜ania. DeploymentExportPath bez tej opcji ShrinkWrap bdzie umieszcza testowe archiwa w systemowym folderze tymczasowym, skd zostan usunite po wykonaniu test坦w Container wildfly-remote okrela parametry poczenia z serwerem zdalnym. www.proskar.pl 28 / 47
  • 29. Wa甜ne! Po dodaniu zale甜noci i pliku konfiguracyjnego Arquilliana projekt powinien si budowa, cho nie bd wykonywane 甜adne testy. Je甜eli projekt nie buduje si na tym etapie oznacza to mo甜e nieprawidowoci w definiowaniu zale甜noci bd添 konfiguracji Arquilliana. Nale甜y zwr坦ci uwag r坦wnie甜, czy serwer zdalny jest dostpny (uruchomiony). www.proskar.pl 29 / 47
  • 31. Tworzenie testu Arquilliana Aby wykona testy w danej klasie niezbdne jest: Rozszerzenie klasy org.jboss.arquillian.testng.Arquillian, Zdefiniowanie w tej klasie publicznej metody statycznej, kt坦ra zwraca obiekt dziedziczcy po Archive, Opatrzenie tej klasy adnotacj org.jboss.arquillian.container.test.api.Deployment. www.proskar.pl 31 / 47
  • 32. Deployment przy pomocy Zwracanie obiektu w przedstawionej wczeniej metodzie jest mo甜liwe dziki zastosowaniu biblioteki ShrinkWrap. www.proskar.pl 32 / 47
  • 33. Deployment przy pomocy Aby generowa rozbudowane Archiwum testowe mo甜na przygotowa klas, kt坦r bdzie mo甜na u甜ywa w wielu testach. www.proskar.pl 33 / 47
  • 34. Przykad metody tworzcej archiwum www.proskar.pl 34 / 47
  • 35. Wymagania dotyczce bazy danych W trakcie test坦w nale甜y zapewni poczenie do bazy testowej. Mo甜e to by 添r坦do zar坦wno JTA, jak i lokalne. Nale甜y jednak zapewni, aby czyo si do bazy w ten sam spos坦b co 添r坦do produkcyjne. Testowa baza danych powinna by utworzona na tej samej bazie danych. W przeciwnym wypadku testy integracyjne nie bd w peni prawidowo testowa integracji z baz danych. www.proskar.pl 35 / 47
  • 36. Metoda resolveProjectClasses(archive) Metoda resolveProjectClasses(archive) odpowiedzialna jest za dodanie testowanego kodu. www.proskar.pl 36 / 47
  • 37. Metoda resolveDependencies(archive) Odpowiada za dodanie zale甜noci z POM'a. www.proskar.pl 37 / 47
  • 38. Pisanie test坦w Arquilliana Testy Arquilliana polegaj w g坦wnej mierze na wykonywaniu testowanej metody oraz por坦wnywaniu otrzymanego wyniku z wartoci oczekiwan. www.proskar.pl 38 / 47
  • 39. Pisanie test坦w Arquilliana Aby przetestowa obiekt Dao nale甜y go wstrzykn tak jak poni甜ej: www.proskar.pl 39 / 47
  • 40. Pisanie test坦w Arquilliana Kod wykonywany przed i po testach powinien by umieszczony w publicznie dostpnych metodach oznaczonych adnotacjami @BeforeTest i @AfterTest. www.proskar.pl 40 / 47
  • 42. Klasa abstrakcyjna test坦w NG Implementacje Arquilliana mo甜na z powodzeniem ukry przy pomocy klasy abstrakcyjnej, kt坦r rozszerzayby wszystkie testy integracyjne i funkcjonalne. W tym celu mo甜na stworzy klas abstrakcyjn, kt坦ra rozszerza klas Arquillian. www.proskar.pl 42 / 47
  • 43. Metodyka przeprowadzania test坦w integracyjnych z baz danych Aby prawidowo przeprowadzi testy integracyjne z baz danych testy powinny sprawdza jak dziaaj wszystkie metody obiekt坦w. www.proskar.pl 43 / 47
  • 44. Co nale甜y sprawdzi? Manipulacja na danych. Czy cay CRUD dziaa prawidowo? Walidacja p坦l unikalnych. Czy na pewno nie mo甜na doda dw坦ch obiekt坦w o takiej samej wartoci? Walidacja wartoci generowanych po stronie bazy. Je甜eli metoda wykonuje akcj DML na obiekcie i w trakcie tej akcji baza danych powinna modyfikowa jak warto obiektu, to nale甜y sprawdzi, czy ta warto jest dostpna. Test walidacji p坦l. Je甜eli w dano pole mo甜na wpisa tylko warto o cile okrelonej semantyce, nale甜y sprawdzi czy poprawna semantycznie warto mo甜e zosta zapisana oraz czy nie istnieje jaka warto niepoprawna, kt坦ra mo甜e zosta zapisana. www.proskar.pl 44 / 47
  • 45. Co nale甜y sprawdzi? Je甜eli w projekcie istnieje DML wdro甜eniowy nale甜y sprawdzi, czy wartoci znajduj si w bazie i s dostpne. Mo甜na sprawdzi ich wartoci oraz liczno. Je甜eli baza danych posiada jakie funkcje generujce wartoci nale甜y sprawdzi, czy zwracane wartoci s poprawne semantycznie i s zgodne z zao甜eniami projektowymi. Je甜eli pole jest unikalne tylko w pewnym kontekcie, nale甜y sprawdzi, czy unikalno jest tylko w tym kontekcie i nie uniemo甜liwia nadawanie tych wartoci w innych kontekstach. Je甜eli do pola testowego zapisywana jest jaka enumeracja, nale甜y walidowa wprowadzanie wszystkich wartoci oraz wartoci spoza enumeracji oczekujc bdu wstawienia. www.proskar.pl 45 / 47
  • 46. Wa甜ne! Po ka甜dym tecie nastpuje wycofanie transakcji. Kolejno test坦w nie ma znaczenia. www.proskar.pl 46 / 47