2023-05-24

testy automatyczne w clocklikeminds

Łukasz Sokolnicki
Pega Certified Senior System Architect
Łukasz Sokolnicki
Pega Certified Senior System Architect

Testy automatyczne to kluczowy element w metodologiach wytwarzania oprogramowania. Polegają one na uruchamianiu kodu testowego automatycznie, w celu sprawdzenia, czy aplikacja działa zgodnie z oczekiwaniami. Testy te pozwalają na szybsze wykrywanie błędów i ułatwiają utrzymywanie wysokiej jakości tworzonego systemu.

Jednym z głównych zalet testów automatycznych jest ich powtarzalność. Testy te można uruchamiać wiele razy, co pozwala na łatwe wychwytywanie problemów, które mogą pojawić się w trakcie rozwoju aplikacji.

Testy automatyczne pozwalają również na szybsze i skuteczniejsze wykrywanie błędów. Zamiast ręcznego testowania, który jest podatne na błędy ludzkie, testy automatyczne wykonują te same kroki w sposób dokładny i powtarzalny. Oznacza to, że problemy można wykryć szybciej i skuteczniej, co prowadzi do zwiększenia jakości oprogramowania.

W Clocklike Minds testy, które przede wszystkim automatyzujemy, to te oparte na scenariuszach testowych. Są to testy standardowo wykonywane przez testerów oprogramowania. Łączą one ze sobą cechy testów funkcjonalnych, a także testów UI. Są to najbardziej kosztowne (jeśli chodzi o zasoby) testy oprogramowania, trwają najdłużej, ale jednocześnie dają najlepsze efekty w kontekście poprawy jakości aplikacji. Dlatego warto ten obszar w największym stopniu zautomatyzować.

 

Testy automatyczne z wykorzystaniem narzędzi zewnętrznych

Cucumber i Selenium to popularne narzędzia do testowania oprogramowania.

Selenium to narzędzie do automatyzacji operacji opartych na interfejsie użytkownika w aplikacjach webowych. Selenium pozwala na uruchamianie testów na różnych przeglądarkach internetowych, co umożliwia testowanie aplikacji na różnych platformach i konfiguracjach. Selenium pozwala na łatwe symulowanie interakcji użytkownika z aplikacją, takich jak kliknięcia, wpisywanie tekstu czy nawigowanie po stronie.

Cucumber jest z kolei narzędziem do testowania oprogramowania opartym na języku Gherkin, które służy do opisywania testów w sposób bardziej zrozumiały dla ludzi. Dzięki temu, osoby spoza świata programowania, takie jak użytkownicy biznesowi, mogą tworzyć scenariusze testowe i współpracować z zespołem programistów w procesie testowania systemu.

Cucumber i Selenium – użyte razem – pozwalają zbudować uniwersalny i wszechstronny framework służący do testowania aplikacji, który w dodatku można skalować wraz z rozwojem i rozbudową systemu. Taki framework sprawdzi się świetnie zarówno do testowania prostych procesów biznesowych o charakterze liniowym, jak i tych bardzo złożonych, gdzie udział bierze wielu aktorów, a przebieg tego procesu jest złożony.

 

Dodatkowymi zaletami tych narzędzi, o których należy wspomnieć są:

  • Są to narzędzia open source stale rozwijane ze świetną dokumentacją oraz dużą społecznością.
  • Jest to narzędzie “zewnętrzne”, co pozwala nam na budowanie takiego framework-a, który przetestuje dla nas aplikacje webowe stworzone w każdej technologii. Możemy również tworzyć testy wieloplatformowe w sytuacji gdy w danym procesie biznesowym wykorzystywane są różne narzędzia.
  • Znakomicie współpracuje z systemem Pega. Zarówno samo tworzenie testów jest wspierane przez ten system za pomocą specjalnych identyfikatorów, które możemy wykorzystujemy przy programowaniu testów, jak i uruchamianie testów ma wsparcie ze strony Pegi: są one uruchamiane automatycznie poprzez Deployment Manager w momencie, gdy powstała nowa wersja aplikacji i jest ona wdrażana na wyższe środowisko. W ten sposób wykonujemy testy regresji.

 

Gherkin

Gherking to język wykorzystywany przez Cucumber. Jest on tak skonstruowany, aby był czytelny dla użytkowników biznesowych, a jednocześnie pozwalał na opisanie zachowania oprogramowania bez wchodzenia w techniczne szczegóły, jak to zachowanie zostało zaimplementowane.

Najważniejsze elementy języka Gherkin:

  • Feature File: Jest to plik tekstowy o rozszerzeniu “feature”, który odzwierciedla jakąś, wybraną funkcjonalność systemu oraz skupia w sobie scenariusze testowe dotyczącej tej właśnie funkcjonalności.
  • Feature: Słowo kluczowe umożliwiające opisanie funkcjonalności.
  • Scenariusz: używany do opisu konkretnego scenariusza testowego
  • Given: słowo kluczowe używane do opisu warunków wstępnych scenariusza testowego
  • When: Słowo kluczowe służące do opisu zdarzenia, które chcemy przetestować.
  • And: Operator logiczny umożliwiający łączenie ze sobą warunków bądź też wyników testu.
  • Then: Słowo kluczowe umożliwiające opis spodziewanego wyniku testu.

Oto, jak wygląda przykładowy “feature file” z jednym scenariuszem testowym:

Feature: Test Case creation

Scenario: Sample Scenario to create a case type

Given User logs in as admin for SampleApp

When user navigates to cases explorer

And creates a new case type "Test Case"

Then the new case of type "Test Case" with status "New" should be created

 

Na pierwszy rzut oka zauważyć można najważniejszą zaletę języka Gherkin. Nie potrzebne jest żadne dodatkowe tłumaczenie powyższego scenariusza testowego, a mimo to wiadomo, czego on dotyczy, co będzie testowane oraz jaki jest spodziewany rezultat testu.

 

Jak wygląda wdrożenie testów automatycznych?

Proces ten rozpoczyna się dość wcześnie od spisania scenariuszy testowych z wykorzystaniem języka Gherkin. Prace te możemy rozpocząć już w momencie, gdy tworzymy założenia biznesowe naszej aplikacji, czyli zanim rozpocznie się jeszcze właściwy development systemu, który będziemy testować. Takie podejście ma ważną zaletę: czasami ujawniają się w ten sposób różne przypadki użycia projektowanego systemu, których wcześniej nie braliśmy pod uwagę. Gotowe scenariusze testowe grupujemy według funkcjonalności (”features”) i umieszczamy w odpowiednich plikach. Grupowanie to jest sprawą indywidualną. W projektach “pegowych” przyjmujemy zasadę, że każdy case type to oddzielna funkcjonalność.

W momencie, gdy pierwsze scenariusze testowe są już gotowe, do pracy może włączyć się programista, który taki scenariusz testowy oprogramuje. W przypadku naszych projektów wykorzystywana jest Java, która w połączeniu z Selenium doskonale sprawdza się w automatyzacji poszczególnych kroków scenariusza testowego. W dużym uproszczeniu przykładowy kawałek implementacji scenariusza testowego może wyglądać następująco:

@When("user navigates to cases explorer")

public void user_navigates_to_cases_explorer() {

webDriver.findElement(By.id("cases_explorer_menu_item").click();

}

W powyższym przykładzie tworzymy nową metodę, gdzie za pomocą adnotacji wskazujemy część scenariusza testowego, który ta metoda implementuje, a potem w ciele metody programujemy działanie, którym w tym przypadku jest kliknięcie w opcję menu. W ten sposób postępujemy z każdą linijką scenariusza testowego.

Ostatnim krokiem wdrożenia jest wybranie metody uruchamiania testów. Możemy tego dokonać manualnie poprzez IDE bądź też poprzez jedną z komend Maven-a. Sposób ten jest dobry, gdy chcemy przetestować ad-hoc jakąś wybraną funkcjonalność systemu bądź też jakiś konkretny scenariusz testowy. Inną metodą – stosowaną w naszych projektach – jest wykorzystanie Jenkins-a, czyli narzędzia typu CI/CD. To daje nam kolejne możliwości automatyzacji testowania, jak na przykład automatyczne uruchamianie testów, integracja z Deployment Managerem w przypadku projektów “pegowych”, możliwość uruchamiania testów równolegle czy też zaawansowane raportowanie.

Podsumowanie

Mimo że testy automatyczne nie zastąpią w 100% testów manualnych, warto je stosować ze względu na wiele korzyści, jakie przynoszą. Oto kilka argumentów na rzecz stosowania testów automatycznych:

  1. Oszczędność czasu – testy automatyczne pozwalają na przetestowanie dużej liczby przypadków testowych w krótszym czasie niż w przypadku testów manualnych. Dzięki temu można zaoszczędzić czas i skupić się na innych zadaniach.
  2. Powtarzalność – testy automatyczne można wykonywać wielokrotnie bez konieczności angażowania ludzi. Dzięki temu można przetestować daną funkcjonalność lub system po każdej zmianie kodu, a także uruchamiać je regularnie w celu zapewnienia, że system działa poprawnie.
  3. Wiarygodność – testy automatyczne są powtarzalne i niezawodne, co oznacza, że wyniki testów są dokładne i niezawodne. Testy manualne, z drugiej strony, zawsze są podatne na błędy ludzkie, które mogą wpłynąć na ich wyniki.
  4. Wczesne wykrywanie błędów – testy automatyczne pozwalają na szybkie wykrycie błędów już na wczesnym etapie procesu wytwarzania oprogramowania. Dzięki temu można zidentyfikować problemy i naprawić je przed wdrożeniem aplikacji na wyższe środowisko.

Warto zauważyć, że testy automatyczne i testy manualne uzupełniają się nawzajem i powinny być stosowane w połączeniu. Testy manualne pozwalają na zweryfikowanie szczegółów, które nie mogą zostać zautomatyzowane , a testy automatyczne wyręczają użytkowników w tych działaniach, które są powtarzalne, a przy tym długotrwałe i kosztowne. W ten sposób zorganizowane testy dają rezultaty w postaci znakomitej jakości wytwarzanego oprogramowania.

Przeczytaj również

2023-10-12

Współpraca citizen developerów i profesjonalnych programistów – skuteczny i efektywny sposób na zbudowanie aplikacji

testy automatyczne w pega

2023-06-05

Testowanie automatyczne w PEGA

2023-05-24

testy automatyczne w clocklikeminds

Strona wykorzystuje pliki cookies
W celu świadczenia usług na najwyższym poziomie stosujemy pliki cookies, które będą zamieszczane w Państwa urządzeniu (komputerze, laptopie, smartfonie). W każdym momencie mogą Państwo dokonać zmiany ustawień Państwa przeglądarki internetowej i wyłączyć opcję zapisu plików cookies. Ze szczegółowymi informacjami dotyczącymi cookies na tej stronie można się zapoznać tutaj: polityka prywatności