Testowanie aplikacji: optymalny framework do testów automatycznych

Co to jest framework do testów automatycznych i jak może on zwiększyć skuteczność projektów automatyzacji tworzenia aplikacji.

Automatyzacja testów zatacza coraz szersze kręgi w świecie IT. Niestety, wiele z projektów automatyzacji nie spełnia stawianych im wymagań. Głównym powodem tych niepowodzeń jest nieprzemyślana budowa testów, skutkująca trudnościami w utrzymaniu oraz wprowadzaniu nowych funkcji, co prowadzi deweloperów do frustracji a firmę do sporych strat finansowych. Jednym z rozwiązań zwiększających skuteczność projektów automatyzacji jest ich poprzedzenie budową wydajnego frameworka do testów automatycznych.

Dobrze przemyślany framework potrafi być istotnym czynnikiem decydującym o tym, czy automatyzacja w projekcie będzie sukcesem, czy też porażką. Co jednak kryje się pod pojęciem "framework testów automatycznych" i czym należy się kierować, tworząc takie rozwiązania?

Czym jest framework?

Najprościej mówiąc, framework testów automatycznych to zbiór klas do obsługi testowanej aplikacji, napisanych na podstawie reguł określonych przez klienta. Tworzony jest w celu ujednolicenia strategii testowania, zmniejszenia kosztów utrzymania testów automatycznych i - co szczególnie istotne – umożliwienia pisania testów osobom nie będącym doświadczonymi programistami.

Podczas projektowania frameworka musimy pamiętać o kilku ważnych zasadach:

Modułowość - framework powinien dzielić się na minimum 3 moduły:

  • moduł obsługi testowanej aplikacji (w zależności od przyjętego standardu mogą być to np. modele opisujące poszczególne widoki testowanej aplikacji),
  • moduł zawierający funkcje wspólne (na przykład odczyt/generowanie danych)
  • moduł raportowania

Nawet tak minimalny podział wymusza na twórcy frameworka większą odpowiedzialność podczas pisania kodu i tworzenia przemyślanych metod. Testy zostały tutaj celowo pominięte, ponieważ powinny być całkowicie odrębnym bytem, korzystającym z udostępnionych przez framework funkcji.

Kod musi być pisany zgodnie z przyjętymi standardami - nie ma nic gorszego niż domyślanie się, co autor kodu miał na myśli, umieszczając w danym miejscu kilka zagnieżdżonych instrukcji warunkowych. Przestrzeganie dobrych praktyk pisania kodu ułatwia także uniknięcie niezamierzonej duplikacji kodu (powtarzających się metod) oraz redukuje czas potrzebny na wprowadzanie zmian.

Rozbudowa frameworka – należy pamiętać, że aplikacja, którą zamierzamy testować, może zostać rozbudowana – skutkiem będzie konieczność dodania nowych funkcji oraz przeprowadzenia kolejnych testów automatycznych. Framework powinien zatem uwzględniać tę możliwość. Rozważmy przypadek, gdy klient chce dodać inny sposób generowania danych w naszym frameworku. Jeżeli wcześniej oprzemy nasze generatory na wzorcu Strategy, do rozszerzenia funkcjonalności o nowy sposób generowania danych potrzebna będzie tylko dokumentacja odpowiedniego interfejsu.

Enkapsulacja - osoba pisząca testy nie powinna być zmuszona do wnikania, jak dokładnie działa framework. Przykładowym wzorcem projektowym ułatwiającym korzystanie z frameworka jest chociażby Factory.

Parametryzacja - framework powinien pozwalać na łatwą (na ile to tylko możliwe) parametryzację testów. Należy przy tym pamiętać, że parametryzacja nadmiernej ilości elementów może być uciążliwa w obsłudze.

Uwzględniając powyższe założenia podczas projektowania kolejnych frameworków, jesteśmy w stanie znacząco ułatwić ich utrzymanie, uprościć procesy pisania testów automatycznych, I w efekcie zwiększyć szanse na powodzenie projektów automatyzacji. Przedstawiona wyżej, oparta o framework, metoda automatyzacji testów jest tego najlepszym przykładem.

O Sii dowiesz się więcej na dedykowanej strefie: https://www.computerworld.pl/sii

O autorze:

Mateusz Psujek

Architekt Rozwiązań/Developer Testów Automatycznych w Praktyce Testingowej w Sii Polska. Posiada bogate doświadczenie w przygotowaniu frameworków do testowania aplikacji webowych, desktopowych, a także gier mobilnych. Z zamiłowania programista oraz projektant rozwiązań opartych o mikrokontrolery.