👨‍🏫 Porady

Czy Cypress umiera i czas na Playwright?

Language
date
Aug 1, 2023
slug
cypress-dying-so-use-playwright
author
status
Public
tags
Playwright
Cypress
Porady
summary
Czy Cypress umiera i czas na Playwright? Zobacz co może za tym przemawiać oraz trendy popularności obu narzędzi 📈
type
Post
thumbnail
cypress-dying-so-use-playwright.jpg
updatedAt
Oct 18, 2023 06:41 AM
category
👨‍🏫 Porady
Cypress znikna z rynku, a jego miejsce zajmie Playwright.
Taka opinia (w wolnym tłumaczeniu) pojawiła się m.in na Reddit w 2023 Q2 i krążyła po internecie.
notion image
 
Czy jest się czego obawiać?
Jak ją interpretować?
Poniżej znajdziesz moje przemyślenia oraz rady😉
 
Poniższe wnioski bazują na mojej wiedzy, doświadczeniu i obserwacjach. Z Cypressem i Playwrightem mam styczność od kilku lat. Używam ich w kilku różnej wielkości projektach komercyjnych. Również analizowałem, projektowałem oraz wykonywałem migrację testów z CY → PW w dużym projekcie😉
 

Cypress oraz jego wady i zalety

Cypress ma swoje wady i zalety. Wynikają one głównie z podejścia i architektury, jaką obrali jego Twórcy. Uważam, że Cypress wciąż całkiem nieźle się sprawdzi w wielu projektach .
 
✅ Zalety:
  • prostota kodu - opakowanie asynchroniczności i brak async/await
  • szybkości pisania prostych testów
  • Cypress App - narzędzie do analizy i debugowania testów. Zapewnia ono podgląd testów na żywo, informacje o akcjach użytkownika, wyszukiwanie, uruchamianie i debugging testów
  • możliwość testowania UI oraz API
  • rozwinięte funkcjonalności do Component Testing
  • bardzo dobra dokumentacja
  • duże community, materiały w sieci, tutoriale i popularność w projektach
  • płatny Cypress Dashboard do uruchamiania i analizy testów w chmurze z wieloma zaawansowanymi funkcjami
 
❌ Minusy:
  • niektóre podstawowe funkcje są płatne (zrównoleglanie testów)
  • wydajność - wraz z liczbą testów Cypress zaczyna być coraz wolniejszy i jesteśmy zmuszeni uruchamiać wszystkie testy sekwencyjnie
  • ograniczenie do jednego języka - JavaScript/TypeScript
  • czasem skomplikowana integracja z modułami lub istniejącym frameworkiem
  • trudniejsze pisanie bardziej złożonych testów e2e (operacje na plikach, korzystanie z API etc)
  • trudne operacje na dużej liczbie danych odczytanych z UI / API
  • trudniejsze uruchomienie na raz wielu przeglądarek i testów
  • brak wsparcia async await i operacji na tym poziomie co rodzi problemy związane z rozbudowanymi konstrukcjami tak zwanym callback hell
  • wiele kluczowych funkcji jest w fazie eksperymentalnej lub utrzymywane jako wtyczki przez niezależnych dostawców (brak pewności co do utrzymania i wsparcia w przyszłości) jak np. obsługa iframe
 
Również warto pamiętać o różnych wydarzeniach:
  • pojawiają się głosy, że płatne usługi cieszą się niewielkim zainteresowaniem, ale nie znaleźliśmy nigdzie żadnego oficjalnego potwierdzenia tych informacji
  • Gleb Bahmutov (jeden z twórców Cypressa) wyraził swoje niezadowolenie z obecnego stanu i planów zespołu odpowiedzialnego za Cypressa - 🔗https://twitter.com/bahmutov/status/1681271097344380928
    • Dodatkowo Gleb odpowiedział nam osobiście w tym komentarzu: linkedin.com (musisz być zalogowany do tej platformy, aby zobaczyć komentarz)
    • notion image
notion image
 
notion image
notion image
 
 
Niektóre z tych wydarzeń są pozytywne, inne negatywne, a inne ciężko zweryfikować.
 
🔥
[Update 10.2023] Wprowadzeniu blokowania wtyczek przez Cypressa może negatywnie wpłynąć na społeczność i popularność tego narzędzia. Osobiście uważam, że są przed nami różne scenariusze:
  • jeśli protest community będzie bardzo silny i zdecydowany - twórcy mogą zmienić politykę (jak niedawno w przypadku Unity 3D)
  • Cypress będzie tracił na popularności, a zyskiwać będą inne narzędzia - Playwright i Selenium
Uważam, że pomijając powyższe opcje - negatywne odczucia mogą pozostać z nami na długo.
 
Uważam, że powyższe punkty (wady, zalety, wydarzenia) nie wskazują, żeby Cypress miał szybko zniknąć z rynku😉
Bazuję tutaj również na moim doświadczeniu z różnych projektów, gdzie konsultowałem, automatyzowałem i projektowałem podejścia do automatyzacji. Sam koszt przesiadki na inny framework bywa bardzo duży (szczególnie, że architektura zaproponowana przez Cypressa mocno różni się od konkurencji).
 
Jednak przyjrzyjmy się “największemu zagrożeniu” (jak to jest opisywane w różnych postach) dla Cypressa.
 
Mowa tutaj o Playwright🎭
 

Nowy gracz - Playwright

Moim zdaniem, jeśli szukamy narzędzia do testów do pokrycia wszystkich poziomów piramidy (API, UI, e2e) obecnie warto dobrze się przyjrzeć Playwrightowi.
✅ Playwright posiada wiele zalet (niektóre dostępne tylko w Playwright Test dla JS/TS):
  • wbudowane zrównoleganie testów lokalne oraz na CI
  • TraceViewer - narzędzie, które pozwala analizować przebieg pojedynczego testu: akcje na UI, zapytania po API, logi w konsoli, kod testu, interaktywne zrzuty stanu strony, timeline z przebiegiem testu zdolny do prezentacji równolegle uruchomionych okien (iframe, nowe zakładki). Dany trace zapisywany jako łatwy do współdzielenia artefakt trace.zip.
  • UI mode - narzędzie do analizy, uruchamiania, śledzenia a nawet debugowania wszystkich testów z projektu. Możemy wybierać w nim zakresy testów np. przeglądarek, zależnych projektów. Dodatkowo otrzymujemy trace oraz timeline dla każdego testu.
  • Raporty HTML - rozbudowane raporty z wbudowaną wyszukiwarkę, zawierające w zależności od konfiguracji: screenshoty, wideo, trace dla każdego testu. Analizę błędów z kodem oraz informacje o testach pominiętych czy niestablilnych.
  • łatwa integracja z modułami, bibliotekami i istniejącymi frameworkami
  • dostępność w wielu językach - JavaScript, TypeScript, C#, Java, Python
  • szybkość działania i stabilność testów (zrównoleglenie i sharding)
  • dedykowane narzędzia do pisania i debugowania testów bezpośrednio z IDE VS Code
  • łatwe operowanie na dużych ilościach danych z UI / API
  • nagrywanie testów oraz raportowanie w wielu formatach (html, json, text, dot, xUnit)
  • prostą obsługę okien, tabów, iframe (w Cypress często są z tym problemy)
  • składnię znaną z Selenium i prostotę tworzenia testów z tym związaną
  • szybko rosnące community i duże wsparcie twórców (odpowiadają często tego samego dnia na nowe zgłoszenia w repozytorium)
  • finansowanie prze Microsoft oraz obecne zapewnienia o pozostaniu w pełni bezpłatnym narzędziem
 
❌ Playwright nie jest też bez wad:
  • wymagana wyższa biegłość w danym języku (w porównaniu do Cypressa). W TypeScript/JavaScript nie ominie testerów poznanie async/await, gdzie w Cypressie asynchroniczność jest opakowana w dedykowane komendy
  • UI Mode dopiero niedawno został wprowadzony (gdzie w Cypressie takie rozwiązanie jest od początku) i wciąż posiada wiele obszarów do poprawy
  • Real Devices Support (wsparcie dla farm urządzeń jak BrowserStack czy Lambda Test) jest to eksperymentalna funkcja gdzie w Cypress mamy ją w pełni dostępną
  • brak oficjalnej integracji z frameworkami BDD i wciąż eksperymentalne Component Testing
  • brak oficjalnej roadmapy - nie wiemy nad czym pracują twórcy i jakie mają plany
  • relatywnie niewielki zespół i duże narzędzie do utrzymania (wiele języków, własne przeglądarki, obsługa zgłoszeń poprawek, zapytań i usprawnień)
  • brak podobnego rozwiązania jak Cypress Dashboard do analizy historii i trendu testów, kontroli testów z chmury , tutaj sytuacja może się wkrótce zmienić: Microsoft Playwright Testing service
 
Również warto odnotować:
 

Podsumowanie

Myślę, że obecnie nie ma narzędzia bez wad... 😉
Każde narzędzie może być użyteczne w danym kontekście (kluczowe jest jego dobre określenie!).
Pojawienie się konkurencji w postaci Playwrighta może być bardzo dobre w kontekście rozwoju wszystkich dostępnych narzędzi. Nowy gracz na rynku - trzeba dostosować swoją ofertę, aby powalczyć o klienta (użytkownika)! 😁
 
Reasumując, moim zdaniem:
  • Cypress jeszcze długo nie zniknie z rynku🙌
    • zyskał dużą popularność na przestrzeni ostatnich lat
    • ma spore community
    • wielu Dev/QA od lat specjalizuje się w jego wykorzystaniu
    • setki projektów korzystają z niego do testów (sam koszt migracji byłby gigantyczny) 😉
  • migracje z Cypress do Playwright nadal będą się odbywały, ale jeszcze nie zwiastują szybkiego końca Cypressa
  • przy wyborze narzędzia nadal będzie konieczna dobra analiza:
    • wad/zalet danego narzędzia
    • potrzeb projektowych
    • przypadków, jakie chcemy zautomatyzować
    • umiejętności zespołu
    • czyli ogólny kontekst zespołu/projektu/klienta - każde z dostępnych narzędzi ma swoje wady i zalety!
 
Bez dobrej analizy byłbym bardzo ostrożny przed wybieraniem tego co modne😉
 

Bonus: Popularność

 
UPDATE: Opublikowaliśmy nowy post, w którym przyglądamy się statystykom i popularności Cypress vs Playwright:
 
PS. Jeśli chcesz dokładniejszej analizy Playwright <> Cypress - daj nam znać! 😉