360 likes | 490 Vues
Warsztat: "Automatyzacja testów (JAVA) - od podstaw". Marcin Dziedzic, Wiktor Żołnowski. Agenda. Omówienie celu szkolenia Od testera do QA Inżyniera Wstęp do Automatyzacji Po co Automatyzować? Co Automatyzować? Jak Automatyzować? Warsztat Inżyniera testów
E N D
Warsztat: "Automatyzacja testów (JAVA) - od podstaw" Marcin Dziedzic, Wiktor Żołnowski
Agenda • Omówienie celu szkolenia • Od testera do QA Inżyniera • Wstęp do Automatyzacji • Po co Automatyzować? • Co Automatyzować? • Jak Automatyzować? • Warsztat Inżyniera testów • Narzędzia, których będziemy używać • Repozytorium • Narzędzia programistyczne (IDE) • Java • Bazy danych • Narzędzia/Frameworki do testowania • Contionous Integration • Metodyki i procesy - dobre praktyki
Cel szkolenia "Od testera do QA Inżyniera" • Rzeczywistość • QA - definicja • QA a testowanie • Po co to szkolenie?
Rzeczywistość • Wytarzane systemy są coraz bardziej skomplikowane • Coś, co kiedyś mogła robić jedna osoba teraz wymaga sztabu specjalistów i odpowiedniego zarządzania nimi • Niestety często jest to niemożliwe • Odpowiedź: Automatyzacja • Coraz popularniejsze "Zwinne metodyki wytwarzania oprogramowania" • Od testerów wymaga się znacznie więcej • Potrzeba bliskiej współpracy testerów z developerami • Testerzy i developerzy muszą używać wspólnego języka • Nowe możliwości • Powstają nowe narzędzia, które dają większą swobodę i łatwość automatyzacji tego co dotychczas robił człowiek.
Quality Assurance • Software Quality Assurance to dziedzina szeroko rozumianego wytwarzania oprogramowania zajmująca się zapewnianiem wysokiej jakości tegoż oprogramowania. Sposobów na zapewnienie jakości jest wiele. • Koszty błędów są niższe, gdy błędy wykrywane są we wczesnych fazach procesu wytwarzania oprogramowania. • Kosztów poprawy błędów nie ma wcale, gdy nie dopuścimy w ogóle do ich powstania. • Można to osiągnąć poprzez zastosowanie odpowiednich procesów i praktyk, które pozwalają na lepszą kontrolę i wstrzykiwanie jakości na każdym etapie.
QA a testowanie • Testowanie oprogramowania jest jednym z wielu elementów Quality Assurance. • Testowanie to tylko Quality Control/Veryfication, koszty poprawy błędów nadal są dosyć wysokie. • Skoro koszty testowania są nadal dosyć wysokie naturalną jest potrzeba zautomatyzowania. • Testowanie to dostarczanie informacji zwrotnej o tym czy oprogramowanie działa i jak działa. • Im szybsza informacja zwrotna tym cenniejsza.
Trzy powody dla których testerzy powinni programować • Narzędzia - komputery i programy komputerowe powstają po to by ułatwiać ludziom wykonywanie różnych zadań w tym także testowania oprogramowania. • Sens - Ucząc się programować rozumiemy jak działają testowane aplikacje, jak działa komputer etc. Dzięki temu możemy zadawać bardziej trafne pytania. • Komunikacja - Programując nie tylko dowiadujemy się jak aplikacja działa ale także rozumiemy to jak skomplikowana jest. Ucząc się programowania łatwiej jest nam zrozumieć programistów. Budujemy wspólny język.
Co dostaniecie? • Umiejętności potrzebne do samodzielnego utworzenia własnego warsztatu pracy inżyniera testów. • Umiejętności potrzebne do wdrożenie praktyk automatyzacji testów w Waszej organizacji. • Możliwość nawiązania rozmowy z programistami w ich języku. • Dobry start (kopniak na początek) w długotrwałym procesie stawania się ekspertem w QA. • Podstawowe umiejętności tworzenia testów automatycznych na kilku poziomach: • Testy jednostkowe • Testy funkcjonalne • Testy interfejsu użytkownika • Testy akceptacyjne
A czego Wam nie damy? • Nikt łopatą wiedzy do głowy nie nawkłada... • To dopiero początek drogi do tego byście sami mogli się dalej rozwijać... • Nie nauczymy Was programować... • Nie zrobimy z Was QA Inżynierów (wbrew tytułowi) - do tego oprócz szkolenia będziecie potrzebować jeszcze trochę praktyki i setek popełnionych błędów, z których się wiele nauczycie...
Po co automatyzować? • Jeśli nie wiadomo o co chodzi to chodzi o... pieniądze • Automatyzacji upraszcza wykonywanie powtarzalnych czynności a co za tym idzie zmniejsza koszt wykonywania tychże czynności • Coraz większa komplikacja wytwarzanych systemów oznacza coraz trudniejsze testowanie i obsługę • Tylko dzięki automatyzacji możemy zapewnić wystarczające pokrycie regresji • Zarządzanie systemami składającymi się z dużej ilości modułów jest niemożliwe bez zautomatyzowania tego procesu. • Informacja zwrotna
Co automatyzować? • Każda czynność często powtarzana podczas procesu wytwarzania oprogramowania powinna zostać zautomatyzowana w celu optymalizacji kosztów. • Informacja zwrotna dostarcza największej wartości w procesie wytwarzania oprogramowania, im szybciej ta informacja zostanie dostarczona tym większy zysk osiągniemy. • Należy automatyzować wszystko to co związane z dostarczaniem informacji zwrotnej.
Jak automatyzować? O tym właśnie są te warsztaty... • Automatyzacja testów • jednostkowych • funkcjonalnych/integracyjnych • akceptacyjnych • Continous integration jako sposób na dostarczanie szybkiej informacji zwrotnej
Warsztat inżyniera testów Podręczna skrzynka z narzędziami
Integrated Development Environment (IDE) "Zintegrowane środowisko programistyczne (ang. Integrated Development Environment, IDE) jest to aplikacja lub zespół aplikacji (środowisko) służących do tworzenia, modyfikowania, testowania i konserwacji oprogramowania. Aplikacje będące zintegrowanymi środowiskami programistycznymi charakteryzują się tym, że udostępniają złożoną, wieloraką funkcjonalność obejmującą edycję kodu źródłowego, kompilowanie kodu źródłowego, tworzenie zasobów programu (tzn. formatek / ekranów / okien dialogowych, menu, raportów, elementów graficznych takich jak ikony, obrazy itp.), tworzenie baz danych, komponentów i innych." Źródło: Wikipedia • Dobre poznanie narzędzia, w którym będziemy się poruszać znacząco ułatwi nam dalszą pracę.
Repozytorium kodu źródłowego Repozytoria kodu źródłowego dzielimy na dwa rodzaje: • scentralizowane (np. Subversion) • rozproszone (np. GIT) Będziemy używać SVN http://tortoisesvn.tigris.org/
Java Kilka słów o Javie...
Bazy danych Większość aplikacji webowych korzysta z różnych baz danych dlatego warto też o nich wspomnieć. Z tematem baz danych wiąże się także konieczność przygotowywania odpowiednich danych wykorzystywanych później w testach - fixtures.
Narzędzia do testowania • Selenium • JUnit • JBehave
Selenium Wstęp do używania narzędzia
Selenium - opis Selenium to narzędzie służące do testów automatycznych aplikacji webowych. Selenium to: • Selenium IDE • Selenium WebDriver • Selenium RC + Selenium Server My skupimy się na Selenium IDE i Selenium WebDriver.
Selenium Core • Framework • Może być używane jako samodzielna biblioteka (JavaScript/html)
Selenium RC Selenium Remote Control Server to aplikacja napisana w javie służąca do uruchamiania skryptów testowych w przeglądarkach.
Selenium RC • Sterownik wysyła requesty do RC. • RC uruchamia Selenium Core w przeglądarce. • Core uruchamia przeglądarke z testowaną aplikacją. • Core wykonuje akcje, których wywołania są przesyłane za pomocą http z RC.
Selenium WebDriver Selenium WebDriver to aplikacja pozwalająca na odtwarzanie skryptów testowych w najpopularniejszych przeglądarkach internetowych przy użyciu API tych przeglądarek. Zalety WebDriver: • Szybkość • Obiektowość • Radzi sobie z generycznymi elementami • Mniejsza inwazyjność Wady: • Niestety nie wszystko co było w Selenium RC ma bezpośrednie przełożenie na funkcjonalność WebDriver.
Selenium IDE Selenium IDE to plugin do FireFoxa pozwalający na nagrywanie i odtwarzanie skryptów testowych za pomocą przeglądarki. Selenium IDE zapisuje skrypty w pseudojęzyku przypominającym xml - selenese. Przechowywanie i utrzymywanie przypadków testowych napisanych w selenese jest nieefektywne. Selenium IDE pozwala na eksport przypadków testowych do wielu popularnych języków programowania (java, php, python, ruby, perl. .Net)
Selenium comand | target | value • comand - komenda, która ma zostać wykonana • target - element, na którym wykonana będzie komenda • value - wartość, parametr akcji jeśli konieczny
Komendy => 3 x A • Actions • Symulacje działań użyszkodnika • Acessors • Sprawdzanie i przechowywanie stanów aplikacji • Assertions • Weryfikacja rezultatu otrzymanego z oczekiwanym
Asercje • assert • gdy assert = false test jest przerywany • verify • gdy verify = false test jest kontynuowany a fail zapisywany do logu • waitFor • kiedy waitFor = false (po timeout) test jest przerywany
Element Locator Element locator to sposób w jaki odnajdziemy interesujący nas element w strukturze DOM dokumentu HTML. • identifier • id • name • xpath • link • css
Firebug Firebug to kolejny plugin do FireFoxa, który ułatwi nam poszukiwanie i przekglądanie elementów html.
Dosyć teorii Instalacja - FF - Selenium IDE - Firebug TESTUJEMY!
Continous Integration • Ciągła integracja nowego kodu z już istniejącym produkcyjnym • Jak najczęstsze integrowanie kodu z produkcją i wypuszczanie nowych wersji. • Im wcześniej produkt będzie na produkcji tym wcześniej będzie zarabiał • Wywodzi się z Agile/XP. • Z powodzeniem jej elementy można stosować w innych metodykach.
CI - zasady • Trzymaj kod w repozytorium. • Automatyzuj buildy • TDD • Częsta integracja • Commit odpala build • Build jest szybki • Odpowiednie środowisko • Automatyczny deployment • Dostęp do produkcyjnego wydania produktu • Wyniki buildów widoczne dla każdego
CI - narzędzia Jenkins (Hudson) to narzędzie umożliwiające zarządzanie automatycznymi buildami odpalającymi testy i nie tylko.