Selenium czyli jak zautomatyzować proces końcowego testowania aplikacji webowej.

Siemanko

W dzisiejszym poście pragnę nieco przybliżyć temat automatycznych testów end2end i pokazać przykładowy teścik.

Jak wszyscy pracujący m.in. przy webie wiemy, że ostateczne testy wykonują zazwyczaj ludzie klikając myszką i stukając w klawiaturę. Bez względu na fakt pokrycia kodu testami jednostkowymi, które przed release’em mienią się na zielono. Jeśli Twoim lub Twojej firmy mottem nie jest hasło „Testujemy na produkcji!” to na pewno Wasz dział testerski (o ile go macie) lub Wy sami musicie klikać jak małpka te same user stories i interpretować co się dzieje. Jeśli release’y są np. co pół roku to spoko – duże wydarzenie więc wszystkie ręce na pokład testerskiego okrętu. Jednak jeśli release’y są co np. tydzień (hot fixy itp.) to aby być pewnym, że zmiany w nadchodzącym release’ie nie popsuły niczego w aktualnym trzeba wszystko od początku do końca przeklikać co przy zaawansowanych aplikacjach może zająć b. długo. O kosztach takiego postępowania (pieniężnych i emocjonalnych) chyba nie muszę pisać. Czy jest coś co możemy z tym zrobić? Owszem, jest.

User story w teście jednostkowym

Selenium umożliwia przetestowanie działania aplikacji internetowej z poziomu testu jednostkowego. Udostępnia ono „drivery” do większości przeglądarek inetrnetowych i tak jak „Karma” (jeśli pracujesz przy froncie to wiesz o co kaman) otwiera okno przeglądarki i klika, wpisuje, przesuwa, robi dokładnie to co zakodujesz w teście, a że jest SDK dla .NETu to jesze wynik wyświetli Ci się na czerwono lub zielono w Test Explorer’ze w VS.

Test case

Na pokaz zróbmy taki test SEO w google. Chcemy sprawdzić czy po wpisaniu „Selenium” w google główna strona selenium będzie pierwszym wynikiem.

test1

Klikamy Run Test. Selenium otworzy przeglądarkę (w tym przypadku Chrome), wpisze „Selenium” i kliknie szukaj. Następnie pobierze adres strony pierwszego wyniku i zostanie on przyrównany do oczekiwanego.

ezgif-3-2306a82b10

Ok, poszło. Ale my jesteśmy programistami i nie mamy takich pomysłów co można dziwnego zrobić z aplikacją jak testerzy. Wspomniani natomiast patrząc na ciąg tych znaczków w XPath też mogą nie kumać czaczy i Oni kolejnych testów nie napiszą. Dlatego w tym momencie do akcji wchodzi POM (nie, nie powolny objazd miasta) – Page Object Model.

Page Object Model

bumblebee_logo

To pattern umożliwiający testerom nie posiadającym wiedzy programistycznej na skuteczne i bezproblemowe pisanie testów w Selenium. Ten pattern można stosować dzięki BumbleBee. Udostępnia ona wiele implementacji tagów html’owych, które posiadają user, a raczej tester friendly API.

POM dla głownej strony wyszukiwania.

page1

POM dla strony z wynikami wyszukiwania

page2

Za POM odpowiedzialny jest programista i ma w nim dostarczyć testerowi dokładnie to co user może kliknąć na stronie. W naszym uproszczonym przypadku wyłuskałem przy użyciu BumbleBee tylko pole wyszukiwania, submit button oraz pierwszą stronę wyników. Teraz tester, gdy ma dostarczony taki POM, po krótkim przeszkoleniu może pisać test case’y jako testy jednostkowe bo pole wyszukiwania ma metodę AppendText(), a button ma metodę Submit(). Trzeba tylko znać angielski aby sie połapać.

test2

Podsumowanie

To oczywiście tylko drobna zajawka, gdyż sam całkiem niedawno dopiero się dowiedziałem o istnieniu tego cuda. Po więcej odsyłam do Selenium i BumbleBee. Kodzik stworzony na potrzeby posta jak zwykle na moim github’ie

Pjona!

Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s