InMoST Wielkopolska sieć współpracy w zakresie innowacyjnych metod wytwarzania oprogramowania Termin realizacji: – Testowanie akceptacyjne Bartosz Walter Marcin Werla Szkolenie finansowane ze środków Europejskiego Funduszu Społecznego (75%) i budżetu państwa (25%) w ramach Zintegrowanego Programu Operacyjnego Rozwoju Regionalnego
Model V Specyfikacja wymagań Kodowanie Projekt Testy integracyjne Testy akceptacyjne Testy jednostkowe
Model V Specyfikacja wymagań Testy akceptacyjne Projekt Testy integracyjne Kodowanie Testy jednostkowe Klient
Programowanie Ekstremalne Programowanie sterowane testami Testy akceptacyjne: klient Automatyczne testy akceptacyjne: klient + tester Pomiary postępu bazujące na testach akceptacyjnych
Programowanie Ekstremalne Testy akceptacyjne jako miara postępów
Rodzaje testów Sum=0; for (i=0; i<n; i++) Sum+= a[i]; White box testing (testowanie szklanej skrzynki) Black box testing (testowanie czarnej skrzynki)
Testy akceptacyjne Testy akceptacyjne są wykonywane przez klienta lub w jego imieniu przed akceptacją oprogramowania Testy akceptacyjne nie mają na celu znalezienia błędów w oprogramowaniu Służą do udowodnienia, że aplikacja działa w założony sposób
Na czym polega automatyzacja testowania? To proste! 1. Kup automat testujący 2. Nagraj testy. 3. Odtwarzaj je, kiedykolwiek będziesz miał ochotę. „Just as there is more to software design than knowing a programming language, there is more to automating testing than knowing a testing tool.” -- M. Fewster & D. Graham
Testy ręczne czy automatyczne? Pracochłonność automatyzacji testów: 2 – 10 razy tyle co ręczne wykonanie testów (!)
Automatyzacja wykonywania testów Skrypty automatyczne nie są podobne do skryptów ręcznych Nie automatyzuj testowania przez proste nagrywanie testów Automatyczne wykonywanie z ‘ręczną’ weryfikacją? Ile porównywać (wszystko czy tylko część)? Dynamiczne porównywanie i porównywanie po wykonaniu Wyniki porównania automatycznego muszą być ręcznie sprawdzane Testy uruchomione drugi raz – zawodzą
Czynności testowania Zidentyfikuj warunki testowania (‘co’ testować) i priorytety Zaprojektuj scenariusze testowe (‘jak’ testować) Zbuduj przypadki testowe (skrypty, dane etc.) Przeprowadź testy Porównaj faktyczne wyniki z oczekiwanymi
Przykład scenariusza testowego 1. Wprowadź frazę "Zbigniew Herbert" do pola wyszukiwania Wyświetlona zostaje lista pasujących książek 2. Wybierz pozycję piątąWyświetlona zostaje strona z opisem książki 3. Kliknij klawisz "Dodaj do koszyka" Wyświetlona zostaje ponownie lista z umieszczoną książką w koszyku 4. Kliknij klawisz "Twój koszyk"Wyświetlona zostaje zawartość koszyka z jedną pozycją 5. Wprowadź wartość "2" w polu "Liczba", kliknij klawisz "Przelicz" Wartość zakupu wynosi dwa razy więcej 6. Kliknij klawisz usuńWyświetlony zostaje pusty koszyk
Testowanie aplikacji internetowych Serwer WWW HTML Klient HTTP HttpUnit, jWebUnit Klient odwołuje się jedynie do interfejsu WWW
jWebUnit Wysokopoziomowa biblioteka służąca do testowania aplikacji internetowych po stronie klienta Uproszczone API w stosunku do HTTPUnit Możliwość wykorzystania HTTPUnit Testy nie zależą od implementacji serwera Interfejsem komunikacyjnym jest HTTP
Architektura HttpUnit/jWebUnit Web Server HTML Klient HTTP Parser HTML TestCase Odpowiedź Żądanie HttpUnit
Przypadek testowy jWebUnit YYYTest.java + testXXX() + tearDown () + setUp () Klient getTestContext().setBaseUrl(URL aplikacji) beginAt(dokładny URL); Wskazanie adresu aplikacji
Przypadek testowy jWebUnit FormTest.java + testXXX() + tearDown () + setUp () Klient clickLinkWithText("Formularz"); setFormElement("imie", "Janek"); submit(); assertTextPresent("Wiek: 20 lat"); assertLinkWithTextPresent("Powrót"); Nawigacja i asercje
assertFramePresent (ID) assertWindowPresent (ID) assertTitleEquals(oczekiwany) assertTextPresent(tekst) assertLinkPresent(ID) assertLinkPresentWithText(ID) assertLinkPresentWithImage(ID) OGÓLNE Asercje jWebUnit assertFormPresent (ID) assertFormElementPresent (ID) assertFormElementPresentWithLabel(etykieta) assertFormElementEquals(oczekiwany, faktyczny) assertCheckboxSelected(ID) assertButtonPresent(ID) assertRadioOptionPresent(ID) assertOptionsEqual(nazwa, wzorce[]) FORMULARZETABELE assertTablePresent (ID) assertTableEquals(ID, tabela[][]) assertTextInTable (ID, tekst) assertTableRowsEqual(ID, wierszPoczątkowy, oczekiwana)
HttpUnit Złożona biblioteka do testów akceptacyjnych aplikacji internetowych Wbudowany parser HTML Wbudowane wsparcie dla JavaScript (rhino) Integracja z jWebUnit
WebRequest, WebResponse WebRequest Obiekt reprezentujący żądanie HTTP Specyficzne podklasy obsługują metody GET, POST & PUT WebResponse Obiekt reprezentujący odpowiedź HTTP Można go przetwarzać zarówno jako zwykły tekst lub DOM WebConversation wc = new WebConversation(); WebRequest request = new GetMethodWebRequest( " WebResponse response = wc.getResponse(request);
Wybrane metody klasy WebRequest WebRequest void setParameter (String name, String value) void setParameter (parameterName, UploadFileSpec[] files) void setHeaderField(String name, String value) java.util.Dictionary getHeaders() void selectFile(String name, File file) java.net.URL getUrl()
Wybrane metody klasy WebResponse WebResponse String getContentType() org.w3c.dom.Document getDOM() HTMLElement[] getElementsWithName(String name) HTMLElement getElementWithId(String id) WebForm getFirstMatchingForm (HTMLElementPredicate predicate, Object criteria) WebLink getFirstMatchingLink (HTMLElementPredicate predicate, Object criteria) WebTable getFirstMatchingTable (HTMLElementPredicate predicate, Object criteria)
Nawigacja: Linki HTML WebLink getLinkWithText() link.click() link.mouseOver() Do formularza WebRequest link.getRequest()
Nawigacja: Tabele HTML WebTable[] getTables() table.getCellAsText(row, col) table.getRowCount() table.getColumnCount() ala34
Nawigacja: Formularze HTML WebForms[] getForms() Imię: form.getMethod() Wyślij form.submit() form.getAction() form.setParameter()
Księgarnia elektroniczna
Zadanie Napisz testy akceptacyjne z wykorzystaniem bibliotek jWebUnit i HttpUnit, które zweryfikują podany przykład scenariusza Zakup książki 1. Klient wyszukuje książki dostępne w księgarni. 2. Klient wkłada do koszyka wybraną książkę. 3. Klient przegląda zawartość koszyka i zwiększa liczbę egzemplarzy 4. System aktualizuje cenę zakupu 5. Klient zwiększa liczbę egzemplarzy, tak aby kwota przekroczyła 150 PLN 6. System wyświetla informację o gratisowej dostawie 7. Klient klika klawisz "Do kasy" 8. System przekierowuje formularz na bezpieczne połączenie https Wyjątki 3a. Klient chce rozważyć możliwość zakupu jeszcze jednej książki. 3a1. Następuje powrót do kroku 1. 3b. Klient chce zrezygnować z zakupu książki, którą ma w koszyku. 3b1. Klient usuwa książkę z koszyka
Podsumowanie Testy akceptacyjne są tworzone pod dyktando klienta Testy akceptacyjne są b.dobrym miernikiem postępów Testy akceptacyjne pasują do przypadków użycia Testy akceptacyjne można automatyzować, ale trzeba uważać
Q&A