Transcript Introduction to Java. Part I
InMoST
Wielkopolska sieć współpracy w zakresie innowacyjnych metod wytwarzania oprogramowania Termin realizacji: 01.08.2005 – 31.07.2007
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ń Projekt Kodowanie Testy akceptacyjne Testy integracyjne Testy jednostkowe
Model V
Specyfikacja wymagań Projekt Kodowanie Testy akceptacyjne Klient Testy integracyjne Testy jednostkowe
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
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 2. Wybierz pozycję piątą 3. Kliknij klawisz "Dodaj do koszyka" 4. Kliknij klawisz "Twój koszyk" 5. Wprowadź wartość "2" w polu "Liczba", kliknij klawisz "Przelicz" 6. Kliknij klawisz usuń Wyświetlona zostaje lista pasujących książek Wyświetlona zostaje strona z opisem książki Wyświetlona zostaje ponownie lista z umieszczoną książką w koszyku Wyświetlona zostaje zawartość koszyka z jedną pozycją Wartość zakupu wynosi dwa razy więcej Wyświetlony zostaje pusty koszyk
Testowanie aplikacji internetowych
HttpUnit, jWebUnit Klient HTTP
HTML
Serwer WWW
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
http://jwebunit.sourceforge.net/
Architektura HttpUnit/jWebUnit
Żądanie HttpUnit TestCase HTML
Web Server
Odpowiedź Parser HTML
Przypadek testowy jWebUnit
Klient Wskazanie adresu aplikacji
YYYTest.java
+ setUp() + testXXX() + tearDown()
getTestContext().setBaseUrl( URL aplikacji ) beginAt( dokładny URL );
Przypadek testowy jWebUnit
Klient Nawigacja i asercje
FormTest.java
+ setUp() + testXXX() + tearDown()
clickLinkWithText( "Formularz" ); setFormElement( "imie" , "Janek" ); submit(); assertTextPresent( "Wiek: 20 lat"); assertLinkWithTextPresent( "Powrót" );
Asercje jWebUnit
FORMULARZE
assertFormPresent ( ID )
OGÓLNE
assertFormElementPresent ( ID ) assertFramePresent ( ID )
assertFormElementPresentWithLabel( etykieta )
TABELE
oczekiwany , faktyczny ) assertTitleEquals(
assertCheckboxSelected( ID ) assertTextPresent( tekst )
assertButtonPresent( ID ) )
assertLinkPresent( ID )
assertRadioOptionPresent( ID )
assertOptionsEqual( nazwa , wzorce[] ) assertLinkPresentWithImage( ID ) , oczekiwana )
HttpUnit
Złożona biblioteka do testów akceptacyjnych aplikacji internetowych
Wbudowany parser HTML
Wbudowane wsparcie dla JavaScript (rhino)
Integracja z jWebUnit
http://httpunit.sourceforge.net/
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( "http://www.merlin.com.pl"); 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
WebLink getLinkWithText() link.click() HTML Do formularza WebRequest link.getRequest()
http://httpunit.sf.net
http://jwebunit.sf.net
link.mouseOver()
Nawigacja: Tabele
WebTable[] getTables() table.getCellAsText(row, col) HTML ala 34 table.getRowCount()
http://httpunit.sf.net
http://jwebunit.sf.net
table.getColumnCount()
Nawigacja: Formularze
WebForms[] getForms() HTML Imię: form.setParameter()
http://httpunit.sf.net
http://jwebunit.sf.net
Wyślij
form.getMethod() form.getAction() form.submit()
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ć