Automatyzacja testów jest obecnie bardzo istotnym elementem nowoczesnego cyklu życia oprogramowania i odgrywa kluczową rolę w zapewnianiu jakości, niezawodności i wydajności aplikacji. Automatyzacja testów umożliwia usprawnienie procesów testowania, poprawę wydajności pracy testerów i dostarczanie wysokiej jakości systemów, które zostały właściwie zweryfikowane. Wprowadzenie w danym projekcie testów automatycznych należy rozpocząć od wybrania odpowiedniego frameworka. Z bardzo wielu dostępnych na rynku narzędzi Selenium i Cypress wyróżniają się jako jedne z najpopularniejszych wyborów. W tym artykule kompleksowo przeanalizujemy i porównamy oba frameworki.

 

Selenium


Selenium to rozbudowana platforma testowa służąca do automatyzacji przeglądarek internetowych. Narzędzie zostało pierwotnie opracowane przez Jasona Hugginsa w 2004 roku jako narzędzie wewnętrzne w firmie ThinkWorks, a następnie wydane jako projekt open source. Selenium charakteryzuje się dużą ilością wspieranych języków programowania, takich jak na przykład Java, Python, C#, Ruby, Pearl, PHP czy JavaScript. Jest to bardzo wszechstronne i szeroko stosowane narzędzie w społeczności testerów oprogramowania. Selenium kontroluje działanie przeglądarek internetowych za pomocą komponentu WebDriver, który wykorzystuje API do sterowania przeglądarką, tak jakby robił to użytkownik.
 

Rysunek 1. Logo platformy testowej Selenium


Cypress

Cypress to nowoczesna i kompleksowa platforma testowa oparta na języku JavaScript zaprojektowana specjalnie dla aplikacji internetowych. Narzędzie kładzie nacisk na prostotę i szybkość działania. Cypress został założony przez Briana Manna. Publicznie wydany jako projekt open source na licencji MIT w 2017 roku. Cypress został początkowo stworzony jako reakcja na platformę testową Selenium i wyróżnia się zupełnie inną architekturą działania opierającą się na uruchamianiu testów bezpośrednio w przeglądarce. Cypress jest szczególnie popularny wśród programistów frontendowych, ponieważ wykorzystuje wspomniany wyżej język JavaScript. 
 

Rysunek 2. Logo frameworka Cypress

Porównanie

Porównamy teraz frameworki Selenium i Cypress w odniesieniu do różnych aspektów automatyzacji testów, co pozwoli na lepsze zrozumienie podobieństw i różnic, którymi cechują się oba te narzędzia.
 

1. Rodzaj testów

Platforma testowa Selenium jest wszechstronnym narzędziem do automatyzacji działania przeglądarek, ale najczęściej wykorzystywana jest do implementacji testów typu end-to-end, ewaluujących aplikację z punktu widzenia użytkownika końcowego i koncentrujących się na symulowaniu od początku do końca całych procesów interakcji użytkownika z danym systemem. Z drugiej strony Cypress to wszechstronny framework stosowany do testów end-to-end, testów poszczególnych komponentów, testów integracyjnych oraz także testów API. Jego kompleksowość daje programistom szerokie możliwości wykorzystania. W przeciwieństwie do Cypressa Selenium nie jest przeznaczone do testowania API.

2. Obsługiwane języki programowania

Testy automatyczne oparte o Selenium można implementować w bardzo wielu językach programowania, takich jak na przykład Java, Python, C#, Ruby, JavaScript, Perl, PHP, R, Objective-C czy Haskell. Duża ilość obsługiwanych języków zapewnia większą elastyczność i sprawia, że Selenium może używane w bardzo zróżnicowanych technicznie projektach. Cypress opiera się na języku JavaSvript, zapewniając bardziej spójne środowisko programistyczne zespołom zaznajomionym z tą technologią. Testy w Cypressie można również implementować z wykorzystaniem języka TypeScipt.

3. Wydajność

Selenium jest platformą umożliwiającą uruchamianie wydajnych testów na dużą skalę, ale ze względu na narzut spowodowany komunikacją skryptów testowych z WebDriverem i przeglądarką jest on generalnie narzędziem wolniejszym od Cypressa, który działa w oparciu o inną architekturę. Cypress wykonuje testy bezpośrednio w przeglądarce, dzięki czemu mogą one działać szybciej.

4. Zgodność z różnymi przeglądarkami

Testowanie z użyciem różnych przeglądarek internetowych jest ważnym aspektem automatyzacji i  pozwala upewnić się, że dana aplikacja webowa będzie działać prawidłowo niezależnie od wybranego przez użytkownika końcowego programu do przeglądania Internetu. Platforma testowa Selenium zapewnia obsługę bardzo wielu przeglądarek. Jest to możliwe dzięki wykorzystaniu różnych implementacji komponentu WebDriver. Wspierane są przede wszystkim Google Chrome, Microsoft Edge, Safari, Opera i Mozilla Firefox. Internet Explorer nie jest już oficjalnie wspierany jako osobna przeglądarka, ale może zostać wykorzystany tryb programu Internet Explorer w Microsoft Edge. Cypress koncentruje się przede wszystkim na obsłudze przeglądarek z rodziny Google Chrome, w tym na opartych na Chromium Microsoft Edge i Electron. Cypress pozwala też na wykorzystanie w testach przeglądarki Mozilla Firefox.

5. Raportowanie

Platforma testowa Selenium nie posiada wbudowanej funkcji raportowania. Należy wykorzystać funkcjonalność dostarczoną przez zewnętrzne narzędzia, takie jak TestNG, JUnit, czy Extent Report. Cypress zapewnia wbudowane możliwości raportowania, eliminując potrzebę zewnętrznych integracji. Cypress, który został zbudowany na bazie frameworku Mocha, umożliwia wykorzystanie wewnętrznego narzędzia Mocha reporters. Do Cypressa zostały dodane też dwa najpopularniejsze zewnętrzne Mocha reporters, czyli teamcity i junit.

6. Debugowanie


Debugowanie jest bardzo istotną umiejętnością pracy testera automatycznego, ponieważ pozwala identyfikować i rozwiązywać problemy lub awarie napotkane podczas wykonywania testów. Debugowanie pomaga znaleźć przyczynę awarii przyczyniając się do usprawnienia procesu testowania. Selenium nie zapewnia dedykowanego narzędzia do debugowania, ale bardzo dobrze integruje się z zewnętrznymi rozwiązaniami, chociażby z debuggerem używanego zintegrowanego środowiska programistycznego, na przykład IntelliJ IDEA. Cypress wykorzystuje wbudowane w przeglądarkę narzędzia programistyczne, takie jak na przykład Chrome DevTools lub Firefox DevTools, dzięki czemu możliwe jest odwołanie się do  debuggera podczas wykonywania testów. Cypress zapewnia bezproblemową integrację, pozwalając na analizę stanu aplikacji w czasie rzeczywistym. Debugowanie w zintegrowanym środowisku programistycznym, jak na przykład w Visual Studio Code lub WebStorm, jest również możliwe.
 

7. Społeczność i ekosystem

Selenium, które jest już obecne na rynku od wielu lat, może pochwalić się bardzo dużą społecznością skupioną wokół projektu, obszerną dokumentacją i wieloma samouczkami. Platforma Selenium to ugruntowany ekosystem, który oferuje liczne wtyczki i integracje z narzędziami zewnętrznymi. Cypress jest projektem dużo młodszym i nie posiada tak dojrzałej społeczności jak Selenium, ale szybko się rozwija i stale zyskuje przychylność coraz większej ilości użytkowników. Cypress posiada również obszerną listę dostępnych wtyczek, rozszerzających jego funkcjonalność.

8. Krzywa uczenia się

Krzywa uczenia się obsługi danego narzędzia może mieć bardzo różny przebieg w zależności od przeszłego doświadczenia i wiedzy danej osoby, ale ogólnie można przyjąć, że krzywa uczenia się Selenium jest bardziej stroma od tej odpowiadającej Cypressowi. Wynika to z faktu, że ekosystem platformy testowej Selenium jest bardzo rozbudowany i na początku wymaga więcej ustawień i konfiguracji oraz jest to narzędzie bardziej niskopoziomowe komunikujące się z przeglądarką za pomocą WebDrivera. Z drugiej strony Cypress znany jest ze swojej prostoty, przyjaznego interfejsu użytkownika oraz szybkości konfiguracji i implementacji, szczególnie w przypadku zespołów dobrze posługujących się językiem JavaScript. W konsekwencji programiści mogą zaoszczędzić cenny czas i przeznaczyć go na samo pisanie testów automatycznych.

Wybór odpowiedniego narzędzia

Wybór optymalnego narzędzia zależy od wielu czynników i powinien opierać się na konkretnych potrzebach, celach i wiedzy technicznej zespołu. Aby ułatwić decyzję o zastosowaniu w danym przedsięwzięciu narzędzia Selenium lub Cypress, warto najpierw przeanalizować takie aspekty jak, chociażby ich przeznaczenie, wspierane języki programowania, szybkość działania, zgodność z różnymi przeglądarkami, sposoby debugowania i raportowania, wsparcie społeczności czy krzywa uczenia się i porównać je z naszymi wymaganiami projektowymi.

Wybierz Selenium, kiedy…

W projektach, które priorytetowo traktują testowanie aplikacji w wielu różnych przeglądarkach, wymagają wsparcia kilku języków programowania i integracji ze sporą ilością narzędzi innych firm, Selenium może być preferowanym wyborem. Dojrzałość, elastyczność, ugruntowany ekosystem i rozbudowana społeczność skupiona wokół tego narzędzia sprawiają, że nadaje się ono do wykorzystania w bardzo rozbudowanych projektach z różnorodnymi potrzebami testowymi.

Rysunek 3. Test napisany w języku Java z wykorzystaniem Selenium i jUnit

Rysunek 4. Rezultat uruchomienia testu napisanego z wykorzystaniem Selenium

Wybierz Cypressa, kiedy…

Jeżeli celem projektu jest szybsza implementacja testów, a zespół dobrze posługuje się językiem JavaScript i poszukuje kompleksowego narzędzia, które jest łatwiejsze w konfiguracji i obsłudze, Cypress może być korzystniejszym wyborem. Rosnąca społeczność skupiona wokół tego frameworka, intuicyjny interfejs i wszechstronne możliwości debugowania sprawiają, że jest to idealne rozwiązanie dla dynamicznych zespołów, które chcą szybko i efektywnie dostarczać oprogramowanie wysokiej jakości.

Rysunek 5. Ekran powitalny w interfejsie użytkownika Cypressa

Rysunek 5. Ekran powitalny w interfejsie użytkownika Cypressa


Rysunek 7. Rezultat uruchomienia testu w Cypressie


Podsumowanie

Podsumowując, Selenium i Cypress to bardzo popularne i sprawdzone w wielu komercyjnych projektach frameworki do automatyzacji testów, dostępne na licencji typu open source. Oba narzędzia oferują wszechstronne możliwości, ale jednocześnie zaspokajają nieco inne potrzeby i preferencje zespołów. Obsługa szerokiego zakresu języków programowania, kompatybilność między wieloma przeglądarkami, rozbudowany ekosystem i silna społeczność skupiona wokół projektu to sztandarowe cechy platformy testowej Selenium. Kompleksowość, prostota konfiguracji, szybkość implementacji, bogaty zestaw wtyczek i rosnąca grupa użytkowników wspierających projekt to z kolei cechy charakterystyczne Cypressa. Zarówno Selenium, jak i Cypress są bardzo dobrymi narzędziami o ugruntowanej pozycji na rynku, a wybór odpowiedniego rozwiązania zależy od wymagań i potrzeb konkretnego zespołu i projektu.