32
www.proskar.pl Testy funkcjonalne Warsztaty PROSKAR www.proskar.pl

Testy funkcjonalne

  • Upload
    proskar

  • View
    994

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Testy funkcjonalne

www.proskar.pl

Testy funkcjonalne

Warsztaty PROSKAR

www.proskar.pl

Page 2: Testy funkcjonalne

Plan prezentacji

• Wprowadzenie do testów funkcjonalnych

– Po co robimy testy funkcjonalne?

– Jak powinny wyglądać takie testy?

• Arquilian czyli testy aplikacji WWW

• Drone i Graphene – wisienki na torcie

• Przykładowy projekt

• Tworzenie oraz uruchamianie testów

2 / 32 www.proskar.pl

Page 3: Testy funkcjonalne

3 / 32 www.proskar.pl

Testy funkcjonalne zwane są również testami CZARNEJ SKRZYNKI. Co to oznacza w praktyce? • Testowanie odbywa się często poprzez osoby z zewnątrz a nie samych programistów

• Spojrzenie na aplikację z perspektywy użytkownika końcowego

• Nie skupianie się na szczegółach technicznych tylko na tym jak aplikacja ma działać;

badania pod kątem funkcjonalności

Wady • Nie dostarczają precyzyjnej informacji na temat wystąpienia błędu

Czym są test funkcjonalne?

Page 4: Testy funkcjonalne

Co dają nam testy?

4 / 32 www.proskar.pl

• Testy funkcjonalne pokazują, czy aplikacja zachowuje się tak jak tego oczekujemy

• Umożliwiają sprawdzenie zachowanie aplikacji w różnych sytuacjach (np. podany

błędny adres e-mail lub zły numer karty kredytowej)

Page 5: Testy funkcjonalne

Jak i co testujemy?

5 / 32 www.proskar.pl

• Testujemy tak, aby jak najwięcej przypadków zostało sprawdzonych

• Należy dobrze przemyśleć oraz przygotować przypadki

testowe

• W aplikacji webowej możemy testować np. działanie

formularza logowania po wprowadzeniu do pól login i hasło prawidłowych oraz błędnych danych

Page 6: Testy funkcjonalne

A może automatyzacja?

6 / 32 www.proskar.pl

• Istnieje wiele narzędzi wspomagających testy

• Jednymi z nich są Selenium oraz Arquilian

• Selenium pozwala na symulowanie działania przeglądarki oraz wykonywanie

testów w czasie rzeczywistym (np. użytkownik widzi wprowadzane wartości do pól formularza)

• Arquilian stawia na automatyzację i wykonywanie testów funkcjonalnych obok

innych testów

Page 7: Testy funkcjonalne

7 / 32 www.proskar.pl

Arquilian czyli testy funkcjonalne w Javie Czym jest Arquilian i do czego służy? • Framework’iem do wykonywania różnego rodzaju testów

• Umożliwia wykonywanie oraz automatyzację testów integracyjnych (JPA,

Hibernate, EJB)

• Z wykorzystaniem odpowiednich wtyczek takich jak Drone oraz Graphene, pozwala również na wykonywanie testów funkcjonalnych

Page 8: Testy funkcjonalne

www.proskar.pl 8 / 32

Drone i Graphene – let’s begin!

Drone - wtyczka umożliwiająca testowanie aplikacji WWW we współpracy z Arquilianem • Zarządza cyklem życia przeglądarki

• Dzięki Selenium dostajemy możliwość np.

automatycznego wypełniania pól formularzy, ich walidację jak również nawigację po stronach

• Obsługiwane przeglądarki: Chrome, Firefox, Internet Explorer, Safari, Opera, PhantomJS oraz HTMLUnit

Page 9: Testy funkcjonalne

www.proskar.pl 9 / 32

Zalety Drone’a

• Integracja z Arquilianem

• Konfiguracja w jednym pliku poza kodem Javy

• Użycie kilku przeglądarek w jednym teście

Page 10: Testy funkcjonalne

www.proskar.pl 10 / 32

Graphene czyli złoty środek

Graphene wprowadza podejście obiektowe. • Koncepcja Page Objects oraz Page Fragments

• Testowanie stron wykorzystujących technologię AJAX

• Wsparcie dla wstrzykiwania stron

• Zależność od Drone’a

• Synchronizacja żądań

Page 11: Testy funkcjonalne

www.proskar.pl 11 / 32

Tyle teorii – przejdźmy do praktyki!

Page 12: Testy funkcjonalne

www.proskar.pl 12 / 32

Przykładowy projekt

Jednym z głównym narzędzi używanych podczas tworzenia projektu jest Maven. Aby móc wykorzystać zalety Arquiliana należy do pliku pom.xml dodać zależności jak przedstawiono na rysunku 1.

Rys. 1. Podstawowa zależność Arquiliana tzw. BoM – Bill of Material

Pojęcie BoM (Bill of Material) pozwala na zmniejszenie ilości zależności dostarczanych do aplikacji, ponieważ wszystkie znajdują się w jednej „paczce”

Page 13: Testy funkcjonalne

www.proskar.pl 13 / 32

Przykładowy projekt c.d

Dalej, potrzebujemy jeszcze zależności dostarczające do aplikacji wtyczki Drone, Graphene oraz Selenium co obrazuje rysunek 2.

Rys. 2. Definicja zależności dla Drone, Graphene oraz Selenium

Page 14: Testy funkcjonalne

www.proskar.pl 14 / 32

Przykładowy projekt c.d

W tagach properties istnieje możliwość zdefiniowania wersji poszczególnych zależności jak na rysunku 3.

Rys. 3. Definicja wersji dla zależności

Page 15: Testy funkcjonalne

www.proskar.pl 15 / 32

Pożądaną cechą jest możliwość definiowania wersji przeglądarki dzięki profilom jak pokazano na rysunku 4.

Przykładowy projekt c.d

Rys. 4. Definicja profili przeglądarek

Page 16: Testy funkcjonalne

www.proskar.pl 16 / 32

Przykładowy projekt c.d

W naszym przypadku testowanie będzie odbywało się przy użyciu domyślnej przeglądarki HtmlUnit, która nie posiada interfejsu graficznego oraz pozwala na szybkie wykonywanie testów, również w systemach ciągłej integracji (CI) takich jak Jenkins. W przypadku innej przeglądarki musimy ją odpowiednio skonfigurować m. in. zdefiniować ścieżkę systemową w której znajduje się przeglądarka oraz w przypadku przeglądarki Chrome odpowiedni sterownik o nazwie ChromeDriver. W naszym przypadku w pom'ie nadrzędnym pomiędzy tagami properties umieszczamy następującą linię jak na rysunku 5

Rys. 5. Definicja przeglądarki używanej do

testów

Page 17: Testy funkcjonalne

www.proskar.pl 17 / 32

Przykładowy projekt c.d

Ostatnią rzeczą jaką musimy zrobić, jest dodanie w pliku arquilian.xml stanowiącym podstawową konfigurację Arquiliana definicji sterownika przeglądarki pobraną z pom.xml jak na rysunku 6.

Rys. 6. Definicja sterownika przeglądarki w pliku konfiguracyjnym Arquiliana

Page 18: Testy funkcjonalne

www.proskar.pl 18 / 32

Przykładowa klasa testowa

Po skonfigurowaniu niezbędnych komponentów, możemy przystąpić do wykonywania testów. Fragment przykładowej klasy testowej LogonPageTest znajdującej się w pakiecie test został przedstawiony na rysunku 7. Klasa LogonPageTest rozszerza klasę Arquilian co oznacza, że do testów wykorzystywany jest framework TestNG.

Rys. 7. Fragment klasy testowej Arquiliana

Page 19: Testy funkcjonalne

www.proskar.pl 19 / 32

• Adnotacja @Drone przy obiekcie klasy WebDriver sygnalizuje, że będziemy używać wtyczki Arquilian' owej Drone umożliwiającej kontrolowanie cyklu życia przeglądarki

• Następna adnotacja @ArquilianResource pozwala w tym przypadku pobrać adres

URL pod którym nasza strona jest wdrożona

Przykładowa klasa testowa c.d.

Page 20: Testy funkcjonalne

www.proskar.pl 20 / 32

Przykładowa klasa testowa c.d.

• Adnotacja @Page pozwala na zdefiniowanie Page Object'u czyli obiektu przechowującego zawartość strony. Jest to wielka zaleta rozszerzenia Graphene, ponieważ pozwala tworzyć abstrakcje oddzielone od testów oraz je wstrzykiwać

• Dodatkowo, istnieje również wzorzec Page Fragments pozwalający na wydzielenie

poszczególnych części strony np. formularzy do oddzielnych plików. Dzięki temu możemy wykorzystywać te abstrakcje wielokrotnie oraz zachować poprawną strukturę testów

Page 21: Testy funkcjonalne

www.proskar.pl 21 / 32

Page Objects czyli strony jako obiekty

Fragment klasy LoginPage będącej Page Object'em został przedstawiony na rysunku 8.

Rys. 8. Fragment klasy LoginPage

Page 22: Testy funkcjonalne

www.proskar.pl 22 / 32

Page Objects czyli strony jako obiekty c.d.

• Klasa będąca Page Object'em opatrzona jest adnotacją @Location wskazującą na nazwę strony z rozszerzeniem .xhtml.

• Aby wstrzyknąć żądany element (np. przycisk zatwierdzenia formularza)

korzystamy z obiektu klasy WebElement dostarczanego przez Selenium (umożliwiającego wykonywanie operacji na elementach drzewa DOM) wraz z adnotacją @FindBy.

• W klasach będących Page Object'ami definiujemy logikę odpowiedzialną za interakcję z elementami formularza (wypełnianie pól czy klikanie przycisku), zaś w klasach testowych odnosimy się do elementów, których stan lub zawartość chcemy przetestować.

Page 23: Testy funkcjonalne

www.proskar.pl 23 / 32

Page Objects czyli strony jako obiekty c.d.

Istnieje wiele strategii wyszukiwania elementów, w powyższej klasie zostały wykorzystane: • wyszukiwanie po id elementu (np. loginInput) • wyszukiwanie po selektorze CSS (np. input[type=password]) • wyszukiwanie po nazwie tagu HTML (np. span) • wyszukiwanie po nazwie klasy (np. loginButtonPost)

Istnieje również adnotacja @FindByJQuery umożliwiająca wyszukiwanie elementów na podstawie selektorów JQuery np. @FindByJQuery("p:visible").

Page 24: Testy funkcjonalne

www.proskar.pl 24 / 32

Synchronizacja żądań

• Poniżej definicji elementów znajdują się dwie metody wstawiające przykładowe dane do zdefiniowanych pól tekstowych oraz wywołująca zdarzenie kliknięcia przycisku.

• Ważne są w tym przypadku metoda statyczna guardHttp. Jest ona tak zwanym

synchronizatorem żądań.

• Graphene i metody guardHttp oraz guardAjax zapewniają, że żądanie POST lub AJAX zostanie wykonane (np. strona na której znajduje się testowany przez nas element zostanie załadowana).

• Istnieją różne opcje konfiguracji timeout'ów metod synchronizatorów.

Page 25: Testy funkcjonalne

www.proskar.pl 25 / 32

Tworzenie archiwum testowego

• Aby testy mogły być wykonane, Arquilian wymusza utworzenie specjalnego archiwum zawierającego m. in. widoki, które chcemy przetestować oraz skompilowane klasy.

• Sama metodyka tworzenia archiwum testowego została przedstawiona w dokumencie poświęconym testom integracyjnym. W przypadku testów funkcjonalnych, metoda tworząca bazowe archiwum została przedstawiona na rysunku 9.

Rys. 9. Metoda tworząca archiwum

Page 26: Testy funkcjonalne

www.proskar.pl 26 / 32

Tworzenie archiwum testowego c.d.

W przypadku testów funkcjonalnych, w archiwum muszą się znajdować następujące elementy: • pliki xhtml zawierające widoki

• plik beans.xml wymagany przez JSF

• plik faces-config.xml wymagany przez JSF

• pliki class klas komponentów np. (bean' ów, modeli) bez klas testowych, którymi

zarządza Arquilian

Page 27: Testy funkcjonalne

www.proskar.pl 27 / 32

Tworzenie archiwum testowego c.d.

Metoda tworząca archiwum z niezbędnymi plikami została przedstawiona na rysunku 10. Korzysta ona z klasy ArchiveBuilder przestawionej wcześniej.

Aby uruchomić tryb klienta do metody tworzącej archiwum należy dodać adnotację @Deployment (testable=false). Istnieje możliwość wykonywania w dwóch rodzajów testów jednocześnie. W tym celu należy usunąć parametr testable adnotacji @Deployment, a metodę która ma się wykonać w trybie klienta opatrzyć adnotacją @RunAsClient.

Rys. 10. Metoda tworząca archiwum testowe

Page 28: Testy funkcjonalne

www.proskar.pl 28 / 32

• Wszystkie testy z użyciem Drone'a muszą być wykonywane w trybie klienta. W odróżnieniu od trybu in-container, klient nie ma dostępu do żadnych zasobów aplikacji np. komponentów EJB czy persistenceContext używanych podczas wykonywania testów integracyjnych. Otrzymane archiwum jest wdrażane na serwerze oraz wykonywane są testy.

• Tryb klienta zaś nie korzysta z żadnych zasobów. • Archiwum jest wdrażane na serwerze, a test wykonywany na maszynie wirtualnej

klienta w roli klienta kontenera. Takie testy są zwane testami czarnej skrzynki.

Wykonywanie testów w trybie klienta

Page 29: Testy funkcjonalne

www.proskar.pl 29 / 32

Przykładowe testy

Przykładowe testy znajdujące się w klasie LogonPageTest.java zostały przedstawione na rysunku 11. Metody testowe udekorowane są adnotacją @Test.

Rys. 11. Przykładowa klasa testowa

• Metoda droneShouldNotBeNull sprawdza, czy sterownik przeglądarki opatrzony adnotacją @Drone został prawidłowo wstrzyknięty (zainicjalizowany).

• Druga metoda nazwana shouldBeLoginSuccessfullyWithGreetingDisplayed pobiera adres żądanej strony, zaś poprzez wstrzyknięcie Page Object'u mamy dostęp do metody wykonującej sekwencję czynności na formularzu (w tym przypadku jest to wpisanie wartości do pól login i hasło a następnie kliknięcie przycisku powodującego przejście do strony z komunikatem o pomyślnym zalogowaniu).

Page 30: Testy funkcjonalne

www.proskar.pl 30 / 32

Uruchamianie testów

Aby wykonać testy zdefiniowane w klasie testowej należy kliknąć prawym przyciskiem myszy na klasie testowej oraz kliknąć Run 'LogonPageTest' (na przykładzie środowiska IntelliJ IDEA) jak pokazano na rysunku 12.

Rys. 12 Uruchamianie testów

Page 31: Testy funkcjonalne

www.proskar.pl 31 / 32

Uruchamianie testów c.d.

Gdy testy wykonają się pomyślnie, powinniśmy ujrzeć w oknie konsoli następujący rezultat jak na rysunku 13.

Jak widzimy wszystkie testy zostały wykonane poprawnie.

Rys. 13. Wyniki testów

Page 32: Testy funkcjonalne

www.proskar.pl 32 / 32

Dziękuję za uwagę