Prelekcja będzie przeglądem wzorców oraz anty-wzorców projektowych stosowanych w automatyzacji aplikacji webowych
Agenda:
Wzorce i anty-wzorce – definicja
Po co nam wzorce?
Omówienie kilku antywzorców i złych praktyk:
spaghetti pattern
big ball of mud
Omówienie wzorców projektowych:
DRY pattern
hermetic pattern
default values pattern
action wrapper pattern
BDD
page object pattern
black hole proxy pattern
Porównanie wzorców
Możliwości łączenia wzorców
2. Natalia Krawczyk
• Kilkuletnie doświadczenie w testowaniu manualnym i
automatycznym
• Team Leader zespołu testerów automatycznych
• Prelegentka WrotQA
• Uczestniczka Testing Cup
2015-10-15
6. Główna zasada:
• Własne metody akcji
• Oczekiwania na zdarzenia
w metodzie
Możliwe pułapki:
• Niekończące się „waity”
• Fałszywie negatywne wyniki
Plusy:
• Stabilniejsze testy
• Nie trzeba pamiętać o
„waitach”
Minusy:
• Zmiana przyzwyczajeń
• Konieczność poznania
wszystkich akcji
STABILNOŚĆ / Action Wrapper Pattern
2015-10-15 6
7. Główna zasada:
• Test sam zapewnia sobie dane
testowe
• Nie dba o stan aplikacji
Możliwe pułapki:
• Zbyt „czyste” środowisko
• Selektywne pokrycie
Plusy:
• Bardziej deterministyczne
wyniki
• Możliwość równoległego
uruchamiania testów
Minusy:
• Dłuższy czas trwania testów
• Nie odzwierciedlają
rzeczywistości
STABILNOŚĆ / Hermetic Test Pattern
Stabilność 2015-10-15 7
8. STABILNOŚĆ / Black Hole Proxy Pattern
Główna zasada:
• Ucinamy wszystkie zapytania do
pobocznych usług/serwisów
2015-10-15 8
Plusy:
• Bardziej deterministyczne
wyniki
• Szybsze testy
Minusy:
• Nie odzwierciedlają
rzeczywistości
11. UTRZYMANIE / Dobre praktyki w inżynierii oprogramowania
DRY (Don’t Repeat Yourself)
KISS (Keep it simple, stupid!)
YAGNI (You ain’t gonna need it)
2015-10-15 11
12. Główna zasada:
• 1 strona = 1 klasa
• Klasa = Definicje elementów +
operacje na stronie
Możliwe pułapki:
• Za duży poziom zagnieźdzenia
• Niepoprawna organizacja
struktury projektu
Plusy:
• Porządek
• Łatwiejsze tworzenie
nowych testów
Minusy:
• Dodatkowy wysiłek na
starcie
UTRZYMANIE / Page Object Pattern
Stabilność 2015-10-15 12
13. Module Object Pattern
• 1 moduł = 1 klasa
• Klasa = definicje elementów +
operacje na module
• Page = moduły + definicje
unikalnych elementów +
unikalne operacje na stronie
Base Pages:
• Metody wspólne dla
wszystkich stron
definiujemy w Base Page
UTRZYMANIE / Extended Page Object Pattern
Stabilność 2015-10-15 13
14. Fluent interface
• Metoda zwraca instancję
klasy
• Lepsza czytelność
UTRZYMANIE / Extended Page Object Pattern
2015-10-15 14
15. Główna zasada:
• Testy korzystają z domyślnych
danych
• Pliki konfiguracyjne
• Generatory danych
Możliwe pułapki:
• Zbyt skomplikowane generatory
danych
• Wiele źródeł danych testowych
Plusy:
• Czytelniejsze testy
• Szybka zmiana danych
Minusy:
• Jednorodne dane
• Cięzko określić pokrycie
UTRZYMANIE / Default values pattern
Stabilność 2015-10-15 15
16. Główna zasada:
• Scenariusz = przykład
działania
• Reużywalne kroki
Możliwe pułapki:
• Zbyt szczegółowe scenariusze
• Zbyt długie scenariusze
• Pisane z myślą o ich
implementacji
Plusy:
• Czytelność
• „Żywa dokumentacja”
• Współpraca przy tworzeniu
scenariuszy
Minusy:
• Dodatkowy framework
UTRZYMANIE / Behaviour Driven Development
Stabilność 2015-10-15 16
17. UTRZYMANIE
• Testy automatyczne to też aplikacja
• Porządek w kodzie poprzez Page Object Pattern
• Test korzysta z domyślnych danych, które konfigurowane są
w jednym miejscu
• Porządek w scenariuszach testowych poprzez zastosowanie BDD
2015-10-15 17
19. Główna zasada:
• Test wykorzystuje dane
utworzone w poprzednim
teście
• Testy uruchamiane są w
konkretnej kolejności
Możliwe pułapki:
• Złe dane testowe
• Bardzo długi „łańcuch”
Plusy:
• Szybsze testy
• Bardziej rzeczywiste
Minusy:
• Trudne debugowanie
• Brak możliwości uruchamiania
testów równolegle
• Testy zależne od stanu aplikacji
ANTYWZORCE / Chain linked pattern
Stabilność 2015-10-15 19
20. Główna zasada:
• Duża ilość instrukcji
warunkowych
• Zagnieżdzenia
Możliwe pułapki:
• Częsta duplikacja kodu
Plusy:
• Szybki start
• Szybki efekt
Minusy:
• Trudne debugowanie
• Brak możliwości uruchamiania
testów równolegle
• Testy zależne od stanu aplikacji
ANTYWZORCE / Spaghetti code
Stabilność 2015-10-15 20
22. STABILNOŚĆ
• Własne metody akcji
zawierające
oczekiwania na
zdarzenia
• Test nie zależy od
danych znajdujących
się w aplikacji
UTRZYMANIE
• Porządek w kodzie
poprzez Page Object
Pattern
• Porządek w danych
testowych
Podsumowanie
UWAŻAJ NA
• Lokatory
• Try/catch
• Nazewnictwo
• Asercje
2015-10-15 22