👨‍🏫 Porady

Zalety Playwright Test

Language
date
Mar 6, 2024
slug
zalety-playwright
author
status
Public
tags
Playwright
Porady
Blog
summary
Poznaj najważniejsze zalety Playwright Test i przedyskutuj je w swoim zespole
type
Post
thumbnail
zalety-playwright-test.jpg
updatedAt
Mar 8, 2024 07:49 AM
category
👨‍🏫 Porady
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

notion image
  1. Lokalnie ustawienie workers dzielą nasze testy na wiele wątków (ich liczba zależy od liczby logicznych wątków posiadanego procesora)
  1. Na serwerze Ciągłej integracji ustawienie shards rozprasza testy pomiędzy maszyny
  1. 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)
  1. Kontrola zrównoleglenia poprzez Projects lub Serial Mode - możemy dla danych testów zastrzec, aby nie były zrównoleglane
  1. 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

notion image
  1. Dostępne w asercjach, dzięki czemu działa mechanizm sprawdzania poprawności asercji
  1. Dostępne w lokatorach, Playwright ponawia automatycznie próbę pobrania elementu gdy chcemy wykonać akcję
  1. Możemy sterować czasem wykonania ponowienia sprawdzenia asercji poprzez expect.poll
  1. Można ponawiać testy także za pomocą opcji retries
  1. 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

notion image
  1. Wystarczy proste ustawienie w konfiguracji aby tworzyć raporty HTML
  1. Dostępne są różne rodzaje raportów JSON, minimalistyczny Dot, czy List wygodny dla Ciągłej Integracji
  1. Raporty HTML bez problemu są scalane - zarówno lokalnie z wielu Workers jak i na CI z wielu Shards (tu potrzeba odrobinę kodu)
  1. ⭐ Raporty mogą zwierać grupy testów, tagi, rodzaje wyniku testów (pass, failed, flaky, skipped), wideo, screenshoty, kod testu oraz Traces
 

Debugowanie

notion image
  1. Za pomocą tradycyjnych screenshots, wideo i obserwacji przeglądarki uruchamianej w czasie testów
  1. 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
  1. ⭐ Z UI Mode - narzędzie do uruchamiania, grupowania i śledzenia testów z osadzonym Trace Viewer - 🔗https://playwright.dev/docs/test-ui-mode
  1. ⭐ 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

notion image
  1. Jedno miejsce do ustawienia najważniejszych funkcji projektu z Playwright
  1. Możliwość, tworzenia, rozszerzania i nadpisywania wielu konfiguracji
  1. 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
  1. Jeden standard, który może być w pełni rozumiany przez zespół i przenoszony do kolejnych projektów testowych
 

Projects

notion image
  1. W konfiguracji możemy definiować dowolną liczbę Projects
  1. Mogą one wskazywać własności poszczególnych przeglądarek (emulacja) ich ustawienia, wyświetlany obszar, geolokalizacja, sieć czy też indywidualne ustawienia
  1. 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
  1. Mogą posiadać indywidualne ustawienia dotyczące Timeouts czy Retries
 

Hooks i Fixtures

notion image
  1. 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
  1. Możemy wstrzykiwać gotowe przygotowane obiekty, które mogą posiadać własny kod inicjalizacyjny i sprzątający
  1. ⭐ 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

notion image
  1. Domyślny język dla Playwright Test
  1. Tworzenie bezpiecznego i łatwego w utrzymaniu kodu
  1. Wsparcie przez narzędzia do zarządzania regułami w kodzie (ESLint, Prettier)
  1. Wykorzystanie praktyk takich jak aliasy, type hinting, interfaces
 

Async/Await

notion image
  1. Dzięki wsparciu async/await możliwe jest wykonywanie równoległe akcji
  1. Możemy czekać na odpowiedź API w czasie akcji na GUI
  1. Możemy wykonywać automatyczny kod podczas akcji (handling)
  1. Możemy wykonywać więcej niż jedną akcję na raz
 

Network Intercepting

notion image
  1. Wykorzystanie np. w testach GUI aby je wyizolować od ruchu sieciowego API
  1. Modyfikowanie dowolnego ruchu sieciowego
  1. Zatrzymywanie request, nadpisywanie response, logowanie wybranych własności
 

Visual Comparison

notion image
  1. Porównywanie wybranych elementów graficznych strony do przechowywanych screenshotów
  1. Można porównać wybrane obszary strony
  1. Można ignorować elementy pobieranych screenshots
  1. Można ustawić jak bardzo screenshots muszą być zgodne
  1. Wyniki można wygodnie przeglądać w raportach
 

⭐ Obsługa iframe, tabów, nowych stron, wyskakujących okienek

notion image
  1. Zarządzanie tymi kontekstami
  1. Łatwe przełączanie się pomiędzy kontekstami
 

Rodzaje testów jakie można wykonać w Playwright Tests

notion image
  1. Testy GUI
    1. Zarówno headless jak i z widokiem przeglądarki
    2. Wsparcie Chromium (i pochodnych), Firefox i Safari
    3. Emulacja ustawień aby łatwo testować przeglądarki w różnych warunkach
    4. Możliwość testów w izolacji od API
  1. Testy API
    1. Osobny obiekt do wykonywania testów API
    2. ⭐ Brak potrzeby uruchamiania przeglądarki
    3. ⭐ Podgląd i debugowanie testów za pomocą Trace Viewer z pełną informacją i szczegółami ruchu sieciowego
    4. Testy WebSockets
  1. Testy niefunkcjonalne
    1. Proste w konfiguracji accessibility testing (wtyczka zewnętrzna)
    2. Wsparcie raportów Lighthouse (wtyczka zewnętrzna)
    3. Integracja z 🔗Artillery.IO do testów wydajnościowych (wtyczka zewnętrzna)
  1. Testy komponentów (eksperymentalne🧪)
    1. testy tylko wybranych elementów widoków
 

Zarządzanie sesją i danymi wrażliwymi

notion image
  1. Łatwe przechowywanie i korzystanie z dotenv do zarządzania ustawieniami środowiskowymi: 🔗https://playwright.dev/docs/test-parameterize#env-files
  1. Proste przechowywanie wygenerowanej sesji: 🔗https://playwright.dev/docs/auth#session-storage
  1. Wstrzykiwanie przechowywanej sesji do testów poprzez Projects lub bezpośrednio w testach
 

Dodatkowe

notion image
  1. ⭐ Generowanie testów za pomocą nagrywanych akcji z możliwością nagrania asercji wbudowane w IDE
  1. Proste wstrzykiwanie JS w celu uzyskania dostępu do niestandardowych elementów strony
  1. Dowolna izolacja kodu na poziomie kontekstu (z cookies np. sesją) lub nowej strony (czysta przeglądarka) w obrębie testu lub dowolnej grupy
  1. Widoczność czasu wykonania akcji w kodzie podczas uruchomienia testu z wtyczką VSCode
  1. Możliwość wielokrotnego uruchomienia pojedynczego testu lub grupy z linii poleceń
  1. Ł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 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:
notion image
Pozwolą Ci one poznać wady i zalety tego narzędzia😉 Tym samym, zobaczysz, czy Playwright jest odpowiednim rozwiązaniem dla Ciebie i Twojego projektu🙌