Źródło: Wikipedia

Download Report

Transcript Źródło: Wikipedia

Warsztat: "Automatyzacja
testów (JAVA) - od podstaw"
Marcin Dziedzic, Wiktor Żołnowski
Agenda
1. Omówienie celu szkolenia
1.Od testera do QA Inżyniera
2. Wstęp do Automatyzacji
1.Po co Automatyzować?
2.Co Automatyzować?
3.Jak Automatyzować?
3. Warsztat Inżyniera testów
1.Narzędzia, których będziemy używać
1.Repozytorium
2.Narzędzia programistyczne (IDE)
3.Java
4.Bazy danych
5.Narzędzia/Frameworki do testowania
6.Contionous Integration
7.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
o Coś, co kiedyś mogła robić jedna osoba teraz wymaga
sztabu specjalistów i odpowiedniego zarządzania nimi
o Niestety często jest to niemożliwe
o Odpowiedź: Automatyzacja
• Coraz popularniejsze "Zwinne metodyki wytwarzania
oprogramowania"
o Od testerów wymaga się znacznie więcej
• Potrzeba bliskiej współpracy testerów z developerami
o Testerzy i developerzy muszą używać wspólnego języka
• Nowe możliwości
o 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.
o 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.
Po co tu przyszliście
?
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:
o Testy jednostkowe
o Testy funkcjonalne
o Testy interfejsu użytkownika
o 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...
Wstęp do automatyzacji
Po co automatyzować?
• Jeśli nie wiadomo o co chodzi to chodzi o... pieniądze
o 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ę
o Tylko dzięki automatyzacji możemy zapewnić
wystarczające pokrycie regresji
o 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.
o 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
o jednostkowych
o funkcjonalnych/integracyjnych
o 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."

• Dobre poznanie narzędzia, w którym będziemy się poruszać
znacząco ułatwi nam dalszą pracę.
Źródło: Wikipedia
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
o Symulacje działań użyszkodnika
• Acessors
o Sprawdzanie i przechowywanie stanów aplikacji
• Assertions
o Weryfikacja rezultatu otrzymanego z oczekiwanym
Asercje
• assert
o gdy assert = false test jest przerywany
• verify
o gdy verify = false test jest kontynuowany a fail
zapisywany do logu
• waitFor
o 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.