👨🏫 Porady
Zalety Playwright Test
W tym wpisie przybliżam główne zalety Playwright Test i miejsca gdzie można się o nich dowiedzieć więcej.
Filozofia Playwright Test
Playwright Test ma w sobie bardzo dużo narzędzi i opcji, dzięki temu nie musisz dbać o setki integracji i ustawień. Możesz korzystać z bogatego zasobu funkcji, jednocześnie skupiając się na najważniejszym - pisaniu testów i dbaniu o jakość aplikacji😉
Więcej o różnych wersjach Playwright i samym Playwright Test mówiliśmy podczas naszej prelekcji na Bug Hunt Fest: 🔗https://playwright.info/bughuntfest-playwright
W odpowiedzi na prośby czytelników dodaliśmy ikonkę ⭐ przy funkcjach Playwright, które nie występują w głównej bibliotece Cypress (darmowej wersji). Warto jednak zauważyć, że wiele z tych funkcji można uzyskać w Cypress przy pomocy zewnętrznych pluginów (utrzymywanych przez niezależnych dostawców). Za pomocą ⭐ podkreślamy elementy wbudowane w pobieraną bibliotekę do natychmiastowego użycia.
Najważniejsze funkcje z Playwright Test
⭐ Zrównoleglenie na wielu poziomach
- Lokalnie ustawienie
workers
dzielą nasze testy na wiele wątków (ich liczba zależy od liczby logicznych wątków posiadanego procesora)
- Na serwerze Ciągłej integracji ustawienie
shards
rozprasza testy pomiędzy maszyny
- Ustawienie
fullyParallel
pozwala określić czy nasze testy mają zostać podzielone w zakresie plików czy też jako poszczególne testy (wtedy na różne workery trafią testy z tego samego pliku)
- Kontrola zrównoleglenia poprzez
Projects
lubSerial Mode
- możemy dla danych testów zastrzec, aby nie były zrównoleglane
- Testy są równolegle wykonywane zarówno dla testów jak i różnych przeglądarek (a właściwie emulacji)
Automatyczne czekanie i Timeouts
- Dostępne w asercjach, dzięki czemu działa mechanizm sprawdzania poprawności asercji
- Dostępne w lokatorach, Playwright ponawia automatycznie próbę pobrania elementu gdy chcemy wykonać akcję
- Możemy sterować czasem wykonania ponowienia sprawdzenia asercji poprzez
expect.poll
- Można ponawiać testy także za pomocą opcji
retries
- Timeouts dla testów, akcji lub asercji możemy ustawić globalnie lub niezależnie dla grupy lub indywidualnego testu (a nawet pojedynczej akcji lub asercji)
Raporty
- Wystarczy proste ustawienie w konfiguracji aby tworzyć raporty HTML
- Dostępne są różne rodzaje raportów JSON, minimalistyczny Dot, czy List wygodny dla Ciągłej Integracji
- Raporty HTML bez problemu są scalane - zarówno lokalnie z wielu Workers jak i na CI z wielu Shards (tu potrzeba odrobinę kodu)
- ⭐ Raporty mogą zwierać grupy testów, tagi, rodzaje wyniku testów (pass, failed, flaky, skipped), wideo, screenshoty, kod testu oraz Traces
Debugowanie
- Za pomocą tradycyjnych screenshots, wideo i obserwacji przeglądarki uruchamianej w czasie testów
- Za pomocą Trace Viewer narzędzia interaktywnego do śledzenia historii wykonania testu, ze screenshotami przed, w czasie i po akcji, pełnym ruchem sieciowym, kodem testu, artefaktami (screenshots) oraz wszystkimi akcjami narzędzia Playwright wraz z informacjami związanymi z konfiguracją - 🔗https://playwright.dev/docs/trace-viewer
- ⭐ Z UI Mode - narzędzie do uruchamiania, grupowania i śledzenia testów z osadzonym Trace Viewer - 🔗https://playwright.dev/docs/test-ui-mode
- ⭐ Z pomocą wtyczki Playwright VSCode Extension - do uruchamiania w trybie debug i szybkiego włączania opcji (browser, headless, Traces) - 🔗https://marketplace.visualstudio.com/items?itemName=ms-playwright.playwright
Konfiguracja
- Jedno miejsce do ustawienia najważniejszych funkcji projektu z Playwright
- Możliwość, tworzenia, rozszerzania i nadpisywania wielu konfiguracji
- Ustawienie timeouts, lokalizacji testów, adresu strony, własności przeglądarki, zależności pomiędzy grupami testów, globalnych ustawień przed i po testach, raportów, uruchomienia testowanej aplikacji etc
- Jeden standard, który może być w pełni rozumiany przez zespół i przenoszony do kolejnych projektów testowych
⭐ Projects
- W konfiguracji możemy definiować dowolną liczbę Projects
- Mogą one wskazywać własności poszczególnych przeglądarek (emulacja) ich ustawienia, wyświetlany obszar, geolokalizacja, sieć czy też indywidualne ustawienia
- Projects mogą zależeć od siebie a ich artefakty mogą być przekazywane, na przykład sesja wytworzona w jednym Project może być użyta w innych
- Mogą posiadać indywidualne ustawienia dotyczące Timeouts czy Retries
Hooks i Fixtures
Fixtures: 🔗https://playwright.dev/docs/test-fixtures
- Możemy tworzyć kod niezbędny dla testów na bardzo różnych poziomach: przed każdym testem, raz przed grupą testów, i tak samo po testach - dzięki temu testy mogą zawierać kod wyłącznie niezbędny do testu
- Możemy wstrzykiwać gotowe przygotowane obiekty, które mogą posiadać własny kod inicjalizacyjny i sprzątający
- ⭐ Możemy grupować testy i nadawać grupom różne własności związane ze zrównolegleniem, powtarzaniem testów bądź opóźnieniem, czy innymi indywidualnymi ustawieniami
TypeScript
- Domyślny język dla Playwright Test
- Tworzenie bezpiecznego i łatwego w utrzymaniu kodu
- Wsparcie przez narzędzia do zarządzania regułami w kodzie (ESLint, Prettier)
- Wykorzystanie praktyk takich jak aliasy, type hinting, interfaces
⭐ Async/Await
- Dzięki wsparciu async/await możliwe jest wykonywanie równoległe akcji
- Możemy czekać na odpowiedź API w czasie akcji na GUI
- Możemy wykonywać automatyczny kod podczas akcji (handling)
- Możemy wykonywać więcej niż jedną akcję na raz
Network Intercepting
- Wykorzystanie np. w testach GUI aby je wyizolować od ruchu sieciowego API
- Modyfikowanie dowolnego ruchu sieciowego
- Zatrzymywanie request, nadpisywanie response, logowanie wybranych własności
⭐ Visual Comparison
- Porównywanie wybranych elementów graficznych strony do przechowywanych screenshotów
- Można porównać wybrane obszary strony
- Można ignorować elementy pobieranych screenshots
- Można ustawić jak bardzo screenshots muszą być zgodne
- Wyniki można wygodnie przeglądać w raportach
⭐ Obsługa iframe, tabów, nowych stron, wyskakujących okienek
- Zarządzanie tymi kontekstami
- Łatwe przełączanie się pomiędzy kontekstami
Rodzaje testów jakie można wykonać w Playwright Tests
- Testy GUI
- Zarówno headless jak i z widokiem przeglądarki
- Wsparcie Chromium (i pochodnych), Firefox i Safari
- Emulacja ustawień aby łatwo testować przeglądarki w różnych warunkach
- Możliwość testów w izolacji od API
- Testy API
- Osobny obiekt do wykonywania testów API
- ⭐ Brak potrzeby uruchamiania przeglądarki
- ⭐ Podgląd i debugowanie testów za pomocą Trace Viewer z pełną informacją i szczegółami ruchu sieciowego
- Testy WebSockets
- Testy niefunkcjonalne
- Proste w konfiguracji accessibility testing (wtyczka zewnętrzna)
- Wsparcie raportów Lighthouse (wtyczka zewnętrzna)
- Integracja z 🔗Artillery.IO do testów wydajnościowych (wtyczka zewnętrzna)
- Testy komponentów (eksperymentalne🧪)
- testy tylko wybranych elementów widoków
Zarządzanie sesją i danymi wrażliwymi
- Łatwe przechowywanie i korzystanie z
dotenv
do zarządzania ustawieniami środowiskowymi: 🔗https://playwright.dev/docs/test-parameterize#env-files
- Proste przechowywanie wygenerowanej
sesji
: 🔗https://playwright.dev/docs/auth#session-storage
- Wstrzykiwanie przechowywanej sesji do testów poprzez Projects lub bezpośrednio w testach
Dodatkowe
- ⭐ Generowanie testów za pomocą nagrywanych akcji z możliwością nagrania asercji wbudowane w IDE
- Proste wstrzykiwanie JS w celu uzyskania dostępu do niestandardowych elementów strony
- Dowolna izolacja kodu na poziomie kontekstu (z cookies np. sesją) lub nowej strony (czysta przeglądarka) w obrębie testu lub dowolnej grupy
- Widoczność czasu wykonania akcji w kodzie podczas uruchomienia testu z wtyczką VSCode
- Możliwość wielokrotnego uruchomienia pojedynczego testu lub grupy z linii poleceń
- Łatwa integracja z zewnętrznymi bibliotekami JS/TS jak Faker (generowanie danych losowych), Winston (logger), Dotenv (zarządzanie danymi wrażliwymi)
Niektóre z tych zalet są dostępne tylko dla Playwright Test, z kolei inne znajdziemy w wielu znanych frameworkach. Warto eksplorować i sprawdzać dane funkcje, aby usprawniać swoje testy😉
Na koniec główne wady
- Brak wsparcia dla mobilnych urządzeń (w szczególności iOS bo Android jest w fazie eksperymentalnej - 🔗https://playwright.dev/docs/api/class-androiddevice)
- Brak pełnego wsparcia dla BDD (biblioteka zewnętrzna - 🔗https://github.com/vitalets/playwright-bdd)
- Brak możliwości mockowania WebSockets - 🔗https://github.com/microsoft/playwright/issues/4488
- Brak obsługi starszych wersji przeglądarek
- Playwright Test jest dostępny tylko dla JavaScript i TypeScript (w odróżnieniu od biblioteki Playwright)
Podsumowanie
Playwright Test ma wiele ciekawych funkcji a wymieniłem tylko najważniejsze. Można jeszcze wiele się dowiedzieć dlatego warto śledzić nasze wpisy i kolejne releases: 🔗https://playwright.dev/docs/release-notes
Jeśli planujesz wprowadzić Playwright do swojego projektu lub chcesz poszerzyć swoje kompetencje z tego frameworka, to zapoznaj się z następującymi materiałami:
- Kompleksowy 🔗Program Testy Automatyczne z Playwright
- Mega darmowe materiały na YouTube wprowadzające do Playwright: 🔗https://www.youtube.com/watch?v=JqEp2cjnzAo&list=PLfKhn9AcZ-cD2TCB__K7NP5XARaCzZYn7&index=2
Pozwolą Ci one poznać wady i zalety tego narzędzia😉 Tym samym, zobaczysz, czy Playwright jest odpowiednim rozwiązaniem dla Ciebie i Twojego projektu🙌