Politechnika Wrocławska



Podobne dokumenty

elektroniczna Platforma Usług Administracji Publicznej

Rozliczenia z NFZ. Ogólne założenia. Spis treści

Procedura działania Punktu Potwierdzającego Profile Zaufane epuap w Urzędzie Miejskim w Gdańsku

Przewodnik AirPrint. Ten dokument obowiązuje dla modeli atramentowych. Wersja A POL

Wdrożenie modułu płatności eservice dla systemu Virtuemart 2.0.x

emszmal 3: Automatyczne księgowanie przelewów w menedżerze sprzedaży BaseLinker (plugin dostępny w wersji ecommerce)

RZECZPOSPOLITA POLSKA MINISTER CYFRYZACJI

PRZETWARZANIE DANYCH OSOBOWYCH

GEO-SYSTEM Sp. z o.o. GEO-RCiWN Rejestr Cen i Wartości Nieruchomości Podręcznik dla uŝytkowników modułu wyszukiwania danych Warszawa 2007

Praca na wielu bazach danych część 2. (Wersja 8.1)

Automatyzacja procesu publikowania w bibliotece cyfrowej

Zaawansowane aplikacje internetowe - laboratorium Architektura Spring.

Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.

epuap Ogólna instrukcja organizacyjna kroków dla realizacji integracji

Zaawansowane Aplikacje Internetowe

emszmal 3: Automatyczne księgowanie przelewów w sklepie internetowym Magento (plugin dostępny w wersji ecommerce)

Dotyczy: Odnowa centrum wsi śegiestów poprzez budowę oświetlenia ulicznego wzdłuŝ drogi powiatowej 1517K w śegiestowie

Symfonia Produkcja Instrukcja instalacji. Wersja 2013

SZABLONY KOMUNIKATÓW SPIS TREŚCI

Procedura nadawania uprawnień do potwierdzania, przedłuŝania waŝności i uniewaŝniania profili zaufanych epuap. Załącznik nr 1

Zdalne odnawianie certyfikatów do SWI

Zamawiający potwierdza, że zapis ten należy rozumieć jako przeprowadzenie audytu z usług Inżyniera.

Instrukcja procesu aktywacji oraz obsługi systemu Banku Internetowego dla BS Mikołajki

Wskazówki dotyczące przygotowania danych do wydruku suplementu

Opis obsługi systemu Ognivo2 w aplikacji Komornik SQL-VAT

Poniżej instrukcja użytkowania platformy

Uniwersytet Rzeszowski

Przekształcenie danych przestrzennych w interaktywne mapy dostępne na stronach www (WARSZTATY, poziom podstawowy)

Procedura działania Punktu Potwierdzającego Profile Zaufane epuap w Urzędzie Gminy Wągrowiec

Zarządzanie Zasobami by CTI. Instrukcja

Instrukcja zapisu do grup

Oprogramowanie klawiatury matrycowej i alfanumerycznego wyświetlacza LCD

System Informatyczny CELAB. Przygotowanie programu do pracy - Ewidencja Czasu Pracy

Spis treści. Rozdział 1 ewyniki. mmedica - INSTR UKC JA UŻYTKO W NIKA

I. POSTANOWIENIE OGÓLNE

Aplikacje internetowe oparte na kluczowych technologiach Java Enterprise(Servlet,JSP,JDBC, )

Zintegrowane Systemy Zarządzania Biblioteką SOWA1 i SOWA2 SKONTRUM

Procedura działania Punktu Potwierdzającego. Profile Zaufane epuap. w Urzędzie Gminy Kampinos

Projektowanie bazy danych

Archiwum Prac Dyplomowych

Miejski System Zarządzania - Katowicka Infrastruktura Informacji Przestrzennej

INSTRUKCJA DO PROGRAMU LICZARKA 2000 v 2.56

Załącznik nr 4 WZÓR - UMOWA NR...

INFORMATOR TECHNICZNY WONDERWARE

Informacje o omawianym programie. Założenia programu omawianego w przykładzie

Procedura nadawania uprawnień do potwierdzania Profili Zaufanych w Urzędzie Gminy w Ryjewie

Instrukcja użytkowania DRIVER. Programator z przewodem sterowniczym. DRIVER 610 lub lub 2 strefy DRIVER

Procedura działania Punktu Potwierdzającego Profile Zaufane epuap w Urzędzie Miejskim w Łabiszynie

Użytkowanie elektronicznego dziennika UONET PLUS.

CitiDirect EB - Mobile

Polityka prywatności strony internetowej wcrims.pl

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Logowanie do mobilnego systemu CUI i autoryzacja kodami SMS

Numer obszaru: 8 E-learning w szkole - wykorzystanie platform edukacyjnych w pracy szkoły

Procedura działania Punktu Potwierdzającego Profile Zaufane epuap w Urzędzie Miejskim w Barcinie

Nowe funkcjonalności

Konfiguracja historii plików

Projekt z dnia 2 listopada 2015 r. z dnia r.

enova Workflow Obieg faktury kosztowej

p o s t a n a w i a m

POLITYKA PRYWATNOŚCI SKLEPU INTERNETOWEGO

OPIS SYSTEMU. Wersja podstawowa:

Logowanie do systemu Faktura elektroniczna

STRONA GŁÓWNA SPIS TREŚCI. Zarządzanie zawartością stron... 2 Tworzenie nowej strony... 4 Zakładka... 4 Prawa kolumna... 9

Procedura działania Punktu Potwierdzającego. Profile Zaufane epuap. w Urzędzie Miejskim w Miłakowie

Przedmiot: Projektowanie dokumentów WWW. Laboratorium 3: Strona domowa cz. III Formularze. Opracował: Maciej Chyliński

Instrukcja obsługi Norton Commander (NC) wersja 4.0. Autor: mgr inż. Tomasz Staniszewski

Systemy mikroprocesorowe - projekt

InsERT GT Własne COM 1.0

INSTRUKCJA WebPTB 1.0

DZIENNIK USTAW RZECZYPOSPOLITEJ POLSKIEJ

INSTRUKCJA TESTOWANIA USŁUG NA PLATFORMIE ELA-ENT

Lublin, Zapytanie ofertowe

Procedura działania Punktu Potwierdzającego Profile Zaufane epuap Urzędzie Gminy w Ułężu

API transakcyjne BitMarket.pl

V. Wymagania dla wsparcia projektu oraz nadzoru eksploatacyjnego... 6

Zarządzenie Nr 0151/18/2006 Wójta Gminy Kornowac z dnia 12 czerwca 2006r.

Zarządzenie Nr 1469/2012

Wtedy wystarczy wybrać właściwego Taga z listy.

INSTRUKCJA Panel administracyjny

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

Centrum Informatyki "ZETO" S.A. w Białymstoku. Instrukcja użytkownika dla urzędników nadających uprawnienia i ograniczenia podmiotom w ST CEIDG

Audyt SEO. Elementy oraz proces przygotowania audytu. strona

Kierownika Oczyszczalni Ścieków w Świeradowie-Zdroju

1. NAUCZANIE JĘZYKÓW NOWOŻYTNYCH (OBOWIĄZKOWYCH) W RAMACH PROGRAMU STUDIÓW STACJONARNYCH (CYKL A I B) I NIESTACJONARNYCH

Ogólna charakterystyka kontraktów terminowych

Aplikacje internetowe i rozproszone - laboratorium

Gdańsk, dnia 13 listopada 2014 r. Poz UCHWAŁA NR L/327/14 RADY POWIATU TCZEWSKIEGO. z dnia 28 października 2014 r. Tczewskiego.

RZECZPOSPOLITA POLSKA. Prezydent Miasta na Prawach Powiatu Zarząd Powiatu. wszystkie

e-kiosk PBS Dokumentacja UŜytkownika

Spring MVC Andrzej Klusiewicz 1/18

Procedura weryfikacji badania czasu przebiegu 1 paczek pocztowych

System do kontroli i analizy wydawanych posiłków

Kancelaris - Zmiany w wersji 2.50

Administrator Konta - osoba wskazana Usługodawcy przez Usługobiorcę, uprawniona w imieniu Usługobiorcy do korzystania z Panelu Monitorującego.

Bazy danych. Andrzej Łachwa, UJ, /15

WZÓR UMOWY. ul. Lubelska 13, Warszawa, NIP , REGON

SPECYFIKACJA ISTOTNYCH WARUNKÓW ZAMÓWIENIA DLA PRZETARGU NIEOGRANICZONEGO CZĘŚĆ II OFERTA PRZETARGOWA

Transkrypt:

Politechnika Wrocławska Wydział Informatyki i Zarządzania Kurs: Projektowanie Oprogramowania Prowadzący: Dr hab. inż. Lech Madeyski Testy funkcjonalne oraz akceptacyjne w środowisku Spring Web-MVC 3.x z wykorzystaniem bibliotek JBehave oraz Selenium Autor: Paweł Kozak Wrocław, 2013

1 Wstęp Definicja testów akceptacyjnych jest wyraźnie określona przez Prawo Polskie w Rozporządzeniu Ministra Nauki i Informatyzacji z dnia 19 października 2005r. w sprawie testów akceptacyjnych oraz badania oprogramowania interfejsowego i weryfikacji tego badania. W myśl tego rozporządzenia, test akceptacyjny polega na formalnym udokumentowaniu następujących badań ( [1] ): 1) wprowadzeniu do oprogramowania testowanego danych wejściowych pochodzących, w zależności od funkcjonalności oprogramowania testowanego, z przypadków testowych albo scenariuszy testowych; 2) przekazaniu do oprogramowania testowego danych, o których mowa w pkt 1; 3) porównaniu danych wyjściowych otrzymanych z oprogramowania testowego z danymi wzorcowymi opisanymi w specyfikacji przypadków testowych albo specyfikacji scenariuszy testowych. Testy funkcjonalne z kolei nie posiadają tak precyzyjnie określonej definicji. Nie wnikają one w budowę oraz szczegóły implementacyjne badanego oprogramowania, stąd też nazywa się je testami czarnej skrzynki (Black-box testing) - zlecają one wykonanie oprogramowaniu operacji wykorzystując przekazane dane, a następnie porównują otrzymane wyniki z oczekiwaniami. Jak widać testy akceptacyjne oraz funkcjonalne opierają się na tej samej zasadzie można więc przeprowadzić je wykorzystując te same narzędzia. Jak jednak wykonać tego typu testy w aplikacji webowej? Skrajnym przypadkiem jest wykorzystanie zwykłej przeglądarki internetowej i manualna analiza otrzymanych wyników w kontekście wprowadzonych danych. Rozwiązanie to ma jednak szereg wad, z których główną jest brak automatyzacji wykonywanych operacji. W celu przeprowadzenia omawianych testów, przygotowana została biblioteka JBehave (http://jbehave.org/), która na podstawie scenariuszy napisanych w języku naturalnym, uruchamia testy. Ponadto, jako że, aplikacja webowa oparta jest na bezstanowym protokole HTTP, którego specyfika opiera się na modelu żądanie-odpowiedź (request-response), wykorzystana zostanie biblioteka Selenium, pozwalająca na łatwe manipulowanie żądaniami, oraz nawigację po uzyskanych odpowiedziach. Testy przedstawione w niniejszym dokumencie przeprowadzone zostaną na fikcyjnej witrynie InternetShop, do której skierowane żądania zaowocować powinny wygenerowaniem strony zawierającej szczegółowe informacje o wybranym produkcie. Zakłada się zaznajomienie czytelnika z podstawami biblioteki JUnit (odsyłam do artykułu Testy jednostkowe w środowisku Spring 3.x z wykorzystaniem bibliotek JUnit oraz EasyMock). Przygotowanie środowiska Pierwszym etapem rozpoczęcia pisania testów jest zaopatrzenie projektu w wymagane biblioteki. W projektach wykorzystujących narzędzie Maven proces ten można zautomatyzować poprzez skonfigurowanie pliku pom.xml. Konfiguracja ta widoczna jest na Listingu 1.

2 <dependencies>... <groupid>org.springframework</groupid> <artifactid>spring-test</artifactid> <version>3.1.2.release</version> <groupid>org.jbehave</groupid> <artifactid>jbehave-spring</artifactid> <version>3.7.1</version> <groupid>org.springframework.integration</groupid> <artifactid>spring-integration-core</artifactid> <version>2.2.0.release</version> <groupid>org.jbehave.web</groupid> <artifactid>jbehave-web-selenium</artifactid> <version>3.5.5</version> </dependencies> Listing 1 Fragment konfiguracji pliku pom.xml narzędzia Maven, służący dołączeniu do projektu bibliotek JBehave oraz Selenium Pisanie scenariuszy Kolejnym etapem stworzenia testów akceptacyjnych, jest napisanie scenariuszy, według których przeprowadzane będą testy. Scenariusze takie napisane są w języku naturalnym domyślnie jest to język angielski, jednak JBehave zezwala na konfigurację dopuszczającą inne języki. W przykładach wykorzystane zostaną ustawienia domyślne. Scenariusze grupowane są w historie zawarte w plikach *.story. Struktura takiego pliku jest relatywnie prosta. Pierwsza linia pliku to krótki opis na temat tego, czego dotyczy historia. Następnie znajduje się narracja historii w postaci In order to As a I want to Kolejny fragment pliku to definicje scenariuszy. Całość przedstawiona została na Listingu 2 Client requests product details page Narrative: In order to gain informations As a client I want to see product details page Scenario: Given client wants to gain information When he requests product page with id 1 Then product Sony Vaio VPCEB1M1E details page is displayed Scenario: Given client wants to gain information When he requests product page with id 2 Then product Asus EEEPC details page is displayed Scenario: Given client wants to gain information When he requests product page with id 3 Then product not found page is displayed Listing 2 Zawartość pliku show_product_scenarios.story

3 Mapowanie kroków w Java logika testu Następny etap to zmapowanie każdego kroku scenariusza do Javy. Odbywa się to poprzez mechanizm adnotacji wykorzystane zostaną trzy adnotacje na poziomie metod: @Given, @When, @Then. Każda z nich odpowiada za kolejny krok scenariusza. Parametrem każdej z omawianych adnotacji jest treść kroku scenariusza którego dotyczy oznaczona nią metoda. Ponadto, dowolny fragment można zastąpić poprzez identyfikator poprzedzony znakiem dolara. Pozwoli to na przekazanie zastąpiąnego fragmentu scenariusza do oznaczonej metody jako parametr o tym samym identyfikatorze. Przykład omawianej klasy zaprezentowany został na Listingu 3. W przykładzie wykorzystana została klasa WebDriver. Jest to element biblioteki Selenium, który pozwala na właściwą manipulację żądaniami oraz analizą odpowiedzi. Klas ata tworzy specjalną instancję programu Firefox, która kontrolowana jest nie przez użytkownika, lecz przez wykonywany kod. public class Steps { private String action; private String form_error; private int productid; private String productname; private WebDriver webdriver; public Steps() { webdriver = new FirefoxDriver(); @Given("client wants to gain information") public void gaininformation() { @When("he requests product page with id $productid") public void requestproductpage(int productid) { this.productid = productid; webdriver.get("http://localhost:8080/internetshop/product/"+productid); @Then("product $productname details page is displayed") public void productdetailspage(string productname) { this.productname = productname; WebElement title = webdriver.findelement(new By.ById("product-name")); assertequals(productname + " - InternetShop.pl", webdriver.gettitle()); assertequals(productname, title.gettext().trim()); @Then("product not found page is displayed") public void productnotfoundpage() { this.productname = ""; assertequals("wybrany produkt nie istnieje - InternetShop.pl", webdriver.gettitle()); Listing 3 Mapowanie kroków scenariusza do klasy Steps Jak widać, w konstruktorze tworzymy nową instancję klasy WebDriver. W tym momencie uruchomione zostanie nowe okno programu Mozilal Firefox. W metodzie requestproductpage(), która odpowiada momentowi zażądania przez klienta

4 wybranego zasobu, każemy załadować zasób dostępny pod wskazanym adresem. Żądanie takie powinno zwrócić stronę zawierającą szczegółowe informacje o produkcie z wskazanym numerem identyfikacyjnym. Ostatnim etapem scenariusza jest sprawdzenie czy zwrócona odpowiedź spełnia nasze oczekiwania. W tym przypadku ograniczono się jedynie do sprawdzenia czy tytuł strony oraz zawartość elementu HTML o identyfikatorze product-name spełniają założenia. Zamieszczony kod pokazuje również przypadek scenariusza kończącego się w nieco inny sposób produkt o wskazanym numerze identyfikacyjnym nie został odnaleziony. Jako że zarówno element @Given, jak i @When niczym się nie różnią, jedynym uzupełnieniem jakie trzeba wykonać jest stworzenie metody productnotfoundpage() oznaczonej adnotacją @Then dla badanego przypadku. Konifgurowanie oraz uruchamianie historii Za uruchomienie testów JBehave odpowiedzialna jest biblioteka JUnit. Należy więc napisać klasę, która pozwoli na odpowiednie zainicjowanie oraz uruchomienie testów. W tym celu pomocne okazują się klasy JUnitStory, JUnitStories oraz JUnitStoryMaps. Kolejne wykorzystane adnotacje na poziomie klasy to: @RunWith adnotacja zdefiniowana w bibliotece JUnit, wskazuje na klasę odpowiedzialną za uruchomienie testów. W przypadku biblioteki JBehave, odpowiednia klasa to SpringAnnotatedEmbedderRunner @ContextConfiguration adnotacja zdefiniowana w framework u Spring, służy do konifguracji kontekstu aplikacji, w jakiej uruchomione zostaną testy. W omawianym przypadku interesujący jest jedynie parametr locations, definiujący ścieżkę do pliku *.xml zawierającego ową konfigurację (definicję fasolek JavaBeans). @UsingEmbedder adnotacja zdefiniowana w bibliotece JBehave, służy wskazaniu oraz konfiguracji klasy Embedder, odpowiedzialenej za integrację biblioteki JBehave z środowiskiem, m.in. IDE. @UsingSpring adnotacja zdefiniowana w bibliotece JBehave, pomocna przy konfigurowaniu środowiska do obsługi aplikacji napisanej w frameworku Spring @UsingSteps adnotacja zdefiniowana w bibliotece JBehave, pomocna przy konfiguracji oraz wskazywaniu Całość konfiguracji przedstawiona została na Listingu 4. Głównym elementem tej konfiguracji jest metoda configuration(). Wykorzystujemy w niej klasę MostUsefullConfiguration (której nazwa idealnie obrazuje jej przeznaczenie) a następnie nadpisujemy ustawienia odpowiedzialne za generowanie raportów. Przygotowane w ten sposób testy są gotowe do uruchomienia traktujemy klasę TestScenarios jako skrypt JUnit, uruchamiając go w trybie testu.

5 @RunWith(SpringAnnotatedEmbedderRunner.class) @ContextConfiguration(locations={"/dispatcher-servlet.xml") @UsingEmbedder(embedder = Embedder.class, generateviewafterstories = true, ignorefailureinstories = true, ignorefailureinview = false, stepsfactory = true) @UsingSpring() @UsingSteps public class TestScenarios extends JUnitStories { @Autowired private ApplicationContext context; public ApplicationContext getcontext() { return context; public void setcontext(applicationcontext context) { this.context = context; @Override public Configuration configuration() { return new MostUsefulConfiguration().useStoryReporterBuilder(new StoryReporterBuilder().withDefaultFormats().withFormats(Format.CONSOLE, Format.HTML)); @Override protected List<String> storypaths() { return Arrays.asList("test/java/acceptance/stories/show_product_scenario.story"); @Override public InjectableStepsFactory stepsfactory() { // varargs, can have more that one steps classes return new InstanceStepsFactory(configuration(), new Steps()); Listing 4 Implementacja klasy konfigurującej oraz uruchamiającej testy Wykorzystane źródła [1] Rozporządzenie Ministra Nauki i Informatyzacji z dnia 19 października 2005r. w sprawie testów akceptacyjnych oraz badania oprogramowania interfejsowego i weryfikacji tego badania (Dz. U. Nr 217 poz.1836 z dnia 31 października 2002 r.) [2] Arndt Rafał, Jaśkowski Mikołaj, Szydłowska Anna, Rodzaje testów oprogramowania, 21.04.2008, Prezentacja wykonana na potrzeby przedmiotu PIO420 2007/2008 <http://www.staff.amu.edu.pl/~ynka/courses/pio2007/piomaterialy/prezentacje.html> [3] http://jbehave.org, 12.01.2012r. [4] http://www.lordofthejars.com/2011/04/are-you-locked-up-in-world-thats-been.html, 12.01.2012r.