Artykuł powstał przy okazji aktualizacji naszych szkoleń narzędziowych z zakresu automatyzacji testów aplikacji webowych z użyciem Playwright. Jeśli jeszcze tego nie zrobiliście, warto:
- zobaczyć, co zmieniło się w szkoleniu Automatyzacja testów aplikacji webowych w JavaScript i Playwright
- sprawdzić agendę naszych nowych warsztatów Automatyzacja testów aplikacji webowych w TypeScript i Playwright
Przy wyborze samego narzędzia Playwright często pada pytanie: jakiej technologii powinniśmy użyć? Pierwszym, niemal naturalnym odruchem będzie wskazanie języków TypeScript / JavaScript. Należy jednak pamiętać, że ważny w tym wyborze jest: kontekst.
Kontekst
Oczywiście wszystko zależy od zespołu, umiejętności czy kontekstu projektu. Jak często przyjęło się mówić: „To zależy…”
- ...w jakim języku pisany jest projekt?
- ...jakie języki programowania zna zespół?
- ...czy znane są ograniczenia związane z użyciem Playwright dla języków innych niż TS/JS?
Kontekst zawsze wyznaczy nam aspekty, na które musimy zwrócić uwagę.
Wiele osób chcących rozpocząć pracę z narzędziem Playwright nie zdaje sobie sprawy z tego, czym poza językiem programowania różnią się implementacje narzędzia między JavaScript/TypeScript, a Python/JAVA/.NET. Różnice te są dość znaczące, zważywszy na to, że wiele projektów musi być realizowanych dynamicznie. Tam, gdzie gotowego szkieletu frameworka testowego oczekujemy w jak najkrótszym czasie, może być bardzo przydatne wykorzystanie pełnych wersji wbudowanych rozwiązań. Jednak to, co oferuje nam dodatkowo Playwright w języku JavaScript/TypeScript, może być trudne w implementacji w innych językach.
playwright/test i implementacja
Instalując Playwright dla projektów wykorzystujących Node.js, standardowo pobieramy pakiet playwright/test, który daje nam dostęp do bardziej zaawansowanych funkcji narzędzia. Pakiet ten nie jest dostępny dla innych języków programowania. Można się zastanawiać, dlaczego warto używać tego rozszerzenia, jeśli dostępne są już podstawowe funkcje Playwright. Trzeba jednak pamiętać, że ‘playwright/test’ oferuje dodatkowe możliwości, które mogą być przydatne, mimo że w innych językach również jest możliwość tworzenia automatycznych testów za pomocą podstawowej wersji narzędzia.
Za naszą decyzją może przemawiać np. wbudowany Test Runner, czyli narzędzie rozszerzające podstawową bibliotekę o implementacje wbudowanego rozwiązania do uruchamiania testów. Tej opcji nie dostajemy out of the box w innych językach.
import { test, expect } from '@playwright/test';
test('basic test', async ({ page }) => {
await page.goto('https://playwright.dev/');
const name = await page.innerText('.navbar__title');
expect(name).toBe('Playwright');
});
Narzędzie playwright/test ma w sobie jeszcze inne przydatne rozwiązania, które w przypadku innych języków często musimy zaimplementować we własnym zakresie.
playwright/test i jego rozszerzone funkcje
- „Parallel run” – testy równoległe możliwe do skonfigurowania na podstawie dostępnych „workerów”. Domyślnie liczba „workerów” jest równa połowie liczby procesorów logicznych
- „Sharding” – uruchomienie testów na kilku maszynach jednocześnie, co jest przydatne w implementacji procesu CI
- „Test reporter” – mechanizm automatycznego generowania raportów.
Standardowo otrzymujemy: podsumowanie wykonanych testów, ogólne informacje o teście (jak np. nazwa/tagi/inne czy log błędu w przypadku niepowodzenia w teście) oraz akcje before/after i inne w widoku pojedynczego testu. Wykorzystując jednak prostą konfigurację otrzymujemy dostęp do nowych możliwości takich jak:- „Trace viewer” – narzędzie do podglądu testu z dostępnymi akcjami, lokatorami, requestami oraz podgląd w formie graficznej dla tych akcji
- możliwość nagrania wideo z przebiegu testów i wykonywania zrzutów ekranu
- „Test retry” – funkcja śledzenia testów ze statusem „fail”, bardzo przydatna przy uruchamianiu testów w wyznaczonym harmonogramie, np. na serwerze CI, gdzie czasem potrzebujemy powtórzyć wykonanie tych testów, które nie zakończyły się sukcesem
- „UI mode” - narzędzie do uruchamiania i debugowania testów z dodatkowym podglądem ruchu sieciowego, wiadomościami na konsoli, kodem testów. Daje to nam możliwość m.in.:
- filtrowania testów przez: text/@tag/lub status oraz po projektach
- możliwość zrobienia kroków do przodu i cofnięcia dla każdej akcji, by zobaczyć, co zostało wykonane.
- „Visual comparisons” – porównywanie zrzutów ekranu testowanej strony lub jej elementów na różnych urządzeniach, z możliwością dołączenia informacji o różnicach do raportu
- „Projects” – domyślnie wykorzystywane do wskazywania urządzeń, na których mają uruchamiać się testy. Można wykorzystać również tę funkcję do stworzenia bardziej zaawansowanych zależności w projekcie, wskazując wiele konfiguracji dla testów
- „Timeouts” – ustawienia globalne i dedykowane czasu odczekania dla testów, asercji czy wykonywanych akcji
- Przechowywanie sesji, stanu przeglądarki - wystarczy zapisać w jednym teście i podłączyć kolejne testy poprzez projekt zależny (eliminuje to potrzebę stosowania fixtures, wstrzykiwania w testach etc.)
- Dodatkowe funkcje customowe - test retires, “fixme(conditional)”, “slow(conditional)”
- Global Setup and Teardown - łatwe w konfiguracji i automatycznie integrowane z globalnymi ustawieniami pliki.
Są to jedynie przykłady możliwości oferowanych przez Playwright przy wykorzystaniu języka JavaScript lub TypeScript. Korzystanie z narzędzia w połączeniu z tymi językami ma swoje plusy i minusy, i choć mogą pojawić się pewne problemy, to nie oznacza to, że są one nie do przezwyciężenia. Dlatego warto rozważyć wszystkie zalety i potencjalne wady przed podjęciem decyzji o wyborze Playwright jako narzędzia do automatyzacji testów w projektach.
Blaski i cienie wykorzystania TypeScript/JavaScript
Przy wyborze podejścia i odpowiedzi na pytanie, czego używamy, powinniśmy wskazać wady i zalety takich rozwiązań.
Blaski:
- wsparcie zespołu. Bardzo często elementy zarówno frontu, jak i backendu pisane są w języku JavaScript albo TypeScript. W takiej sytuacji sami programiści mogą nie tylko nam pomóc w razie problemów z pisaniem kodu, ale również sami są w stanie uczestniczyć w tworzeniu projektu, chociażby poprzez samo dodawanie nowych testów
- test Runner. Domyślnie dostępny jest dla języków TypeScript/JavaScript, co daje ogromną przewagę nad wykorzystaniem w innych językach. Pozwala to szybko stworzyć stabilny szkielet projektu, który może być rozszerzany na wielu poziomach
- community. Oddana narzędziu społeczność wspomaga, jednak największy zastrzyk dodatkowych rozwiązań, wiedzy i ciekawostek dostępny jest w językach TypeScript/JavaScript.
- rozwijany w języku TypeScript. Nowe wersje i poprawki są dostarczane szybciej dla użytkowników korzystających z tego języka. Wersje TypeScript/JavaScript oferują też pełen zakres funkcji narzędzia, które mogą być niedostępne w innych językach.
- wsparcie dodatkowych narzędzi dla Node.js. Dla Node.js mamy dedykowane repozytorium, które zawiera skarbnicę dodatkowych narzędzi, dostępnych do wykorzystania od ręki.
- szybkość wdrożenia i utrzymanie. Brak konieczności tworzenia i integrowania funkcji dostępnych out of the box w językach. TS/JS oraz utrzymania własnych unikalnych rozwiązań
Cienie:
- asynchroniczność. Asynchroniczność kodu TS/JS niestety nie pozwala w locie na wykonywanie akcji, gdy debugger jest zatrzymany. Tego typu problemy nie występują synchronicznych językach, takich jak Java czy Python.
- limitowane wsparcie rozwiązań mobilnych. Wciąż brak pełnego wsparcia dla fizycznych urządzeń mobilnych. Testy w wersji mobilnej mogą być wykonywane stabilnie w formie emulacji. Wykorzystuje się tutaj specjalne parametry dzięki którym następuje symulacja zachowania przeglądarki dla danego urządzenia.
Czas na podsumowanie: JavaScript/TypeScript czy inne języki?
Niewątpliwie wykorzystanie języka TypeScript wiąże się z wieloma korzyściami, które pozytywnie wpływają na budowę i rozwój projektu. Należy jednak pamiętać, że idealne rozwiązania nie istnieją. Każdy projekt posiada swoje unikalne wymagania i to po naszej stronie leży dostosowanie rozwiązania do tych wymagań, więc wracamy płynnie do naszego powiedzenia: „To zależy…”
Jednak zdecydowanie wiele argumentów przemawia za tym, że wykorzystanie TypeScript/JavaScript przyniesie wiele korzyści podczas pracy z wybranym rozwiązaniem technologicznym. Zalety tego rozwiązania obejmują:
- Szybkie tworzenie stabilnego projektu do automatyzacji testów
- Łatwiejszy start dla osób początkujących w automatyzacji z wykorzystaniem Playwright
- Możliwość rozszerzenia umiejętności dla osób, które mają już podstawową znajomość języka JavaScript i chcą rozwijać się w tym obszarze
- Niższe koszty realizacji projektu ze względu na wykorzystanie rozszerzonej wersji playwright/test.
Wszystkie powyższe argumenty jednoznacznie pozwalają udzielić jednoznacznej odpowiedzi: TAK, warto wykorzystać Playwright w połączeniu z językiem TypeScript.
Podsumowanie i nowe warsztaty
Poprzez odświeżone szkolenie Automatyzacja testów aplikacji webowych w JavaScript i Playwright i nowy warsztat dedykowany omawianemu wsparciu języka TypeScript Automatyzacja testów aplikacji webowych w TypeScript i Playwright dowiecie się więcej o tym, jak wykorzystać Playwright i TypeScript/JavaScript do automatyzacji testów swoich aplikacji webowych.
Dla wszystkich chętnych przygotowaliśmy zniżkę na pierwszy termin warsztatów Automatyzacja testów aplikacji webowych w TypeScript i Playwright w dniach 9-10 maja 2024 r.
Już teraz ze szkolenia skorzystacie w promocyjnej cenie 1999,00 PLN netto.
Zapisz się na szkolenie tutaj
Serdecznie zapraszamy!!!