Diversity w polskim IT
Paulina Hinc
CodiLime
Paulina HincSoftware Engineer @ CodiLime

8 narzędzi do automatyzacji testów, które musisz znać w 2022 roku

Poznaj narzędzia, przydatne w codziennej pracy na projektach QA Automation według CodiLime.
3.03.20227 min
8 narzędzi do automatyzacji testów, które musisz znać w 2022 roku

Obecnie ciężko jest wyobrazić sobie proces Quality Assurance (QA) bez narzędzi do automatyzacji — ich ilość na rynku ciągle rośnie i wciąż odkrywamy nowe propozycje. Jednak część inżynierów QA nadal preferuje i decyduje się na drogę “manualną”. Dlaczego?

Powodów może być kilka — chęć pozostania w swojej strefie komfortu, obawa przed trudnościami związanymi ze wdrożeniem i opanowaniem nowych narzędzi lub niechęć do sprawdzania nowych rozwiązań, gdy stare sposoby pozornie dobrze działają.

Jednak warto pamiętać, że wprowadzenie automatyzacji pozwala na lepszą optymalizację procesów, redukcję kosztów oraz zaoszczędzenie czasu, który możemy wykorzystać na rozwój własnych umiejętności i kompetencji. Poniżej znajdziecie listę narzędzi, które usprawnią (i ułatwią) pracę, a także sprostają wyzwaniom rzucanym przez współczesne projekty. 

Przegląd narzędzi do automatyzacji testów 

Jeśli na co dzień poruszasz się w obszarze web, API lub GUI, a jednocześnie nie masz zbyt dużego doświadczenia w programowaniu, to poniższe rozwiązania mogą okazać się szczególnie pomocne.

1. PyTest

Narzędzie typu open source, które umożliwia uruchamianie testów (zarówno jednostkowych, jak i integracyjnych, czy end-to-end) napisanych w Pythonie. Jest ceniony jako narzędzie do testowania usług sieciowych. 

Jako zaletę warto wymienić uniwersalność narzędzia bez względu na stopień skomplikowania testów — PyTest sprawdzi się zarówno do pisania prostych testów, jak i tych bardziej zaawansowanych. 

PyTest wspiera “fixtury” - funkcje wykorzystywane do ustawiania warunków początkowych i końcowych, wykonywane zarówno przed, jak i po teście. Warto wiedzieć, że fixtury mają swój zakres, który pozwala na jednokrotne zrealizowanie wspólnego warunku dla zdefiniowanej grupy testów — może to pomóc w zaoszczędzeniu czasu (np. przy tworzeniu baz danych). 

PyTest umożliwia parametryzację testów, co przydaje się, gdy ten sam test jest używany z różnymi danymi wejściowymi. 

Nie należy zapominać o dostępności dokumentacji i mnogości bibliotek, możliwości rozszerzenia przy pomocy wtyczek (pytest-xdist umożliwia równoległe testowanie) oraz dużej i aktywnej społeczności, która pomaga w usprawnianiu narzędzia. 

Popularność PyTest widoczna jest również w możliwości integracji tego narzędzia z innymi popularnymi w branży rozwiązaniami takimi jak np. PyCharm — testy można łatwo uruchomić bezpośrednio w IDE oraz sprawdzić je w debugerze IDE, by szybko znaleźć błędy. 

Warto jednak pamiętać, że PyTest wymaga środowiska z zainstalowanym interpreterem wspomnianego języka. Nie jest to również rozwiązanie przyjazne dla osób, które nie mają wiedzy z zakresu programowania — w tym przypadku znajomość Pythona to absolutny “must have”. PyTest wymaga zdecydowanie większych umiejętności kodowania i poświęcenia czasu na jego naukę, co stawia go w pozycji narzędzia mniej przystępnego. 

2. Cypress

(Cypress.io) to narzędzie ułatwiające automatyzację testów integracyjnych oraz interfejsu użytkownika. Cypress Dashboard Service stanowi uzupełnienie do Test Runner’a, który ułatwia podgląd bieżących testów. Jest szczególnie przydatny podczas testów w CI pipeline — pomaga przy jej optymalizacji i, co więcej, pozwala na uruchomienie kilku testów równolegle. 

Cypress umożliwia nagrywanie oraz dodawanie zrzutów ekranów (moduł Cypress snapshot) przeprowadzonych testów. Jedną z największych zalet tego rozwiązania jest jego szybkość, łatwość debugowania oraz pisania kodu. Wspiera go obecnie grono najczęściej używanych przeglądarek — m.in. Chrome, Firefox oraz Edge. Na korzyść Cypress’a przemawia również brak skomplikowanej konfiguracji. 

Narzędzie oferuje intercepts, stubs, executing CLI commands, compatibility with mochawesome reporters — w skrócie wszystko, co jest potrzebne do przeprowadzenia efektywnego testu. 

Co więcej, Cypress posiada dobrze opisaną dokumentację oraz aktywną i rozwijającą się społeczność, która pozytywnie wpływa na ciągle rosnącą ilość paczek dla systemu plugin’ów oraz rozszerzeń. 

3. Selenium

Selenium to framework dla automatycznych testów webowych, który pozwala tworzyć kod w kilku językach programowania (m.in. Python Ruby, Java, JavaScript oraz C#). Umożliwia on testy automatyczne aplikacji webowych na podstawie wyszukiwanego elementu — id, name, CSS, XPath itd. Tu należy być czujnym — Selenium lubi klikać za szybko, jeszcze przed pojawieniem się danego elementu. 

To jedno z najpopularniejszych i szeroko wykorzystywanych narzędzi na rynku posiada rozwiniętą i aktywną społeczność, które pomoże w znalezieniu odpowiedzi na wiele problemów lub daje możliwość skorzystania ze sprawdzonych rozwiązań dostępnych na forach. Ponadto Selenium może zostać zintegrowane z m.in. Jenkinsem czy TravisCI, a także znajdziemy bardzo dużą ilość bibliotek i pluginów, które z pewnością pomogą w codziennej pracy. 

Selenium oferuje wbudowany mechanizm nagrywania kroków, który umożliwia tworzenie kolejnych test case’ów bez umiejętności programowania (jednakże ich posiadanie pomaga w pełni wykorzystywać możliwości narzędzia). Niestety, każda zmiana po stronie przeglądarki wymusza konieczność stworzenia na nowo tych samych test case’ów. 

Jedną z większych zalet tego narzędzia jest możliwość przeniesienia danych testowych z kodu do zewnętrznego pliku np. CSV, co poprawia ich utrzymywalność. Co więcej, Selenium umożliwia uruchomienie testów w trybie headless co może wpłynąć na wzrost wydajności (w przypadku Selenium każde załadowanie przeglądarki to dodatkowe sekundy, które tracimy na samo pokazanie się interfejsu), czy zmniejszenie zużycia zasobów. 

4. Cucumber

Używany jest głównie do tworzenia testów akceptacyjnych w czasie rzeczywistym. Oparty jest na metodologii Behavior Driven Development (BDD), która zapewnia jego przystępność i łatwość przyswojenia również dla nietechnicznych osób w zespole. Narzędzie korzysta ze specjalnie dla niego stworzonego języka Gherkin, w którym napisane są funkcje aplikacji. 

Cucumber to framework typu open source, doceniany za kompatybilność z wieloma językami programowania oraz łatwość integracji z innymi narzędziami — np. ze wspomnianym już Selenium. 

Największe zarzuty dotyczące “Ogórka” to jego niepotrzebne komplikowanie procesu — testowanie nowej funkcji wymaga sprawdzenia, czy istniejące kroki testowe mogą zostać użyte. Praca z Gherkinem to balans pomiędzy stworzeniem na tyle generycznej funkcji, aby mogła zostać ponownie użyta, ale jednocześnie na tyle szczegółowa, aby była odróżnialna między różnymi scenariuszami testów.

5. Katalon

Narzędzie wspierające testy API, webowe oraz dla urządzeń mobilnych. Nie wymaga umiejętności programistycznych, jednak językiem używanym do pisania testów jest Groovy, co może stanowić swego rodzaju barierę w rozpoczęciu korzystania z tego narzędzia.

Katalon, podobnie jak Selenium, z łatwością może być zintegrowany z narzędziami zewnętrznymi takimi jak Jenkins, Git lub JIRA oraz umożliwia nagrywanie testów, czy wyniesienie danych testowych do zewnętrznego źródła. Co wyróżnia Katalon od Selenium?

Katalon pozwala na testowanie API, które jest częstym źródłem komunikacji w trakcie testów. Raporty, które dostarcza Katalon są w przystępnej dla użytkownika formie i zawierają przydatne informacje. Warto również wspomnieć o nieskomplikowanym i łatwiejszym do nauki GUI. 

6. Robot Framework

To rozwiązanie typu open source, bazujące na Pythonie i korzystające z Keyword Driven Testing (KDT). W KDT scenariusze testowe są opisywane za pomocą zdefiniowanych wcześniej słów kluczowych. Słowa kluczowe to nazwy związane z działaniami potrzebnymi do wykonania konkretnego kroku w scenariuszu testowym. Testy sterowane słowami kluczowymi mogą być wykonywane bez znajomości programowania, co sprawia, że są bardziej dostępne dla nietechnicznej części zespołu. 

Robot pomaga w automatyzacji testów integracyjnych, GUI, API, czy komponentowych. 

Ten framework jest doceniany za swoją szybkość, czytelne raporty — jeden template, mnogość bibliotek, możliwość integracji z narzędziami CI/CD (np. Jenkins) oraz możliwość tagowania testów/suitów. Często wskazuje się łatwość obsługi również dla osób nietechnicznych na podstawowym poziomie (dzięki KDT), jednak brak wiedzy programistycznej może skutkować stworzeniem suita trudnego w utrzymaniu. 

Robot Framework sprawdzi się najlepiej jako runner testów (tych bardziej skomplikowanych), podczas gdy cała ich logika zawarta będzie w Pythonie — to narzędzie nie oferuje wbudowanych możliwości debugowania.

Mimo że Robot Framework posiada większość funkcji innych języków programowania, w tym te nieco bardziej złożone (instrukcje warunkowe, pętle, operacje na różnych typach danych i obiektach), to korzystanie z nich jest bardzo uciążliwe a stworzony kod — nieczytelny.

Utrudnia to stosowanie dobrych praktyk programistycznych (m.in. promuje zmienne globalne). Debugowanie — z racji braku wbudowanych narzędzi i ograniczonego wsparcia dla Intellisense i IDE jest również znacznie utrudnione. By uniknąć tych konkretnych problemów i zachować czytelność definicji testów wskazane jest, żeby całą "logikę" umieścić w Pythonie, definiując wysokopoziomowe keywordy, upraszczając i zwiększając czytelność kodu na poziomie Robota. 

7. Sikuli

Narzędzie do automatyzacji GUI i identyfikacji elementów GUI, używając metody rozpoznawania obrazu. Sikuli jest szczególnie przydatne do automatyzacji powtarzalnych czynności — np. symulacja działań klawiatury lub wyszukiwanie elementów na obrazie. Testy automatyzowane są za pomocą obrazków, co przyspiesza proces tworzenia testów — należy jednak pamiętać, że zmiana obrazka wymaga zmiany całego skryptu. 

Proste czynności mogą zostać zautomatyzowane bez programowania — wystarczy samo przeklikanie narzędzia. To zasługa przejrzystego IDE ułatwiającego tworzenie skryptów. Jak przejrzyste jest to narzędzie można przekonać się oglądając przykładowe tutoriale. Bardziej skomplikowane skrypty wymagają znajomości Pythona — przyswojenie podstaw tego języka nie powinno przysporzyć jednak kłopotów. 

Jak Sikuli wypada w porównaniu z Selenium? Funkcjonalnością, którą oferuje Sikuli, a której nie znajdziemy w Selenium, jest możliwość automatyzacji obiektów Flash. To narzędzie umożliwia również testowanie nie tylko webowego GUI, ale także desktopowych aplikacji webowych. Dobra wiadomość na koniec — istnieje możliwość integracji Selenium z Sikuli i korzystania z ich potencjału jednocześnie. 

8. STAF/STAX

Cross-platformowy framework typu open-source do wykonywania scenariuszy testowych np. na kilku maszynach, który umożliwia pisanie własnych skryptów. 

Scenariusze testowe pisane są w XMLach, które często mogą okazać się trudne do czytania i sprzyjają popełnianiu błędów — np. poprzez niedomknięcie tagu. STAF/STAX wykorzystuje serwisy takie jak LOG, który dostarcza zbiór operacji związanych z logowaniem, np. pisanie do pliku czy szukanie w pliku. 

Jako zalety tego narzędzia na pierwszym miejscu należy wymienić jego dojrzałość jako produktu oraz wsparcie dla wielu języków programowania — nieważne, czy używasz Javy, czy Pythona, ten framework sprawdzi się w obu przypadkach. 

Podsumowanie 

Powyższa lista to tylko niektóre z obszernej listy dostępnych narzędzi — zdecydowaliśmy się omówić te, które uważamy za warte uwagi i najbardziej pomocne w codziennej pracy. Nasz wybór oparty jest na osobistym doświadczeniu — sami używamy tych rozwiązań w projektach QA automation w CodiLime. Mamy nadzieję, że ten artykuł rozwiał Wasze wątpliwości i już instalujecie wybrane narzędzia, jeśli jeszcze z nich nie korzystacie lub znaleźliście długo poszukiwany powiew świeżości, którego brakowało w Waszym toolkicie. 

<p>Loading...</p>