Introduction to Java. Part I

Download Report

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ć

Q&A