Testy automatyczne – O automatyzacji testów słów parę

Jednymi z bardziej cenionych oraz poszukiwanych obecnie na rynku umiejętności testerskich są te związane z automatyzacją testów, która pozwala na skrócenie czasu wykonywania powtarzających się testów (głównie testów regresyjnych). Automatyzacja testów polega na tworzeniu skryptów (np. za pomocą języka programowania lub narzędzi do „nagrywania” typu Capture and Replay)  pozwalających w sposób automatyczny weryfikować funkcjonalność systemu. Automatyzację taką możemy przeprowadzać na różnych poziomach testów, ale to omówimy sobie w dalszej części artykułu.
Zanim przejdziemy do samej automatyzacji testów warto, abyśmy sobie odpowiedzieli na kilka podstawowych pytań, które pozwolą nam wskazać kierunek, w którym chcemy podążać w obszarze automatyzacji testów.
Ważne, aby wszyscy byli świadomi, że zrobienie byle jakiej automatyzacji, która nie przynosi celów biznesowych, jest proste. Trudniej z automatyzacją, która ma przynieść założony efekt.

Od około 3 lat obserwujemy tendencję polegającą na tym, że wszyscy chcą automatyzować testy. W przypadku, gdy współpracujemy z jakąś firmą w obszarze automatyzacji, często na pytanie, jakie testy chcecie mieć zautomatyzowane, dostajemy tą samą odpowiedź – „no jak to jakie? wszystkie” . W dalszej części tego artykułu omówimy sobie obszary / produkty, które warto automatyzować, a które warto testować tylko w sposób manualny.

 

Co chcemy/potrzebujemy automatyzować?

Śledząc popularne grupy dyskusyjne związane z testowaniem oprogramowania, bardzo wiele osób skupia się jedynie nad automatyzacją pojedynczych elementów systemu, np. GUI, zapominając o tym, że automatyzacja testów zależy od tego, na jakim poziomie testów chcemy ją wprowadzić.  Zanim napiszemy pierwszy test automatyczny, musimy się zastanowić, czego tak naprawdę potrzebujemy i jakie elementy systemu chcemy automatyzować. Poniżej przykładowa lista przedstawiająca, co tak naprawdę możemy automatyzować.
  • Testy jednostkowe (Unit Tests)
  • API
  • Webservices
  • GUI
  • Testy wydajnościowe
Przed wyborem „naszego” obszaru do automatyzacji warto spojrzeć na Piramidę testów (podejście Agile), która została spopularyzowana przez Mike’a Cohn’a.

 

Testy automatyczne - piramida

 

Po co automatyzować?

Kolejna rzeczą, którą powinniśmy zrobić zanim rzucimy się w wir pisania testów automatycznych, jest zastanowienie się i odpowiedzenie sobie na pytania „Po co automatyzować?„, „Co chcemy osiągnąć dzięki naszym automatom?” i „Do czego te automaty będą nam potrzebne?„.
  • Automatyzowanie powtarzających się czynności
Jest to jeden z podstawowych powodów, dla których powinny zostać opracowane automaty testowe. Nasza praca powinna polegać na znalezieniu powtarzających się czynności w systemie, które mogą podlegać automatyzacji. Wielokrotnie powtarzanie tych samych czynności jest bardzo nużące, a przez to narażone na ludzkie błędy (np. ktoś pominie test). Warto więc określić w naszym projekcie te czynności testerskie, które warto w pierwszej kolejności zautomatyzować, np.:
    • testy dymne
    • testy wydajnościowe
    • testy konfiguracyjne (te same testy na różnych konfiguracjach, OS, przeglądarkach itp.)
    • testy regresyjne
  • Szybsze wydawanie wersji klientowi
Automaty testowe pozwalają ograniczyć czas potrzebny na wydawanie wersji oprogramowania klientowi. W momencie, kiedy mamy zautomatyzowane testy regresji, nie trzeba skupiać się na ich wykonywaniu ręcznie, a jedynie weryfikować nową funkcjonalność. Oczywiście sukces w szybszym wydawaniu wersji zależy od całościowego procesu testowania oprogramowania i jego tworzenia, ale automatyzacja powiązana z systemem ciągłej integracji może sporo pomóc.
  • Szybka informacja zwrotna na temat testowanego produktu
Czasem potrzebujemy szybką informację na temat testowanego produktu i jego jakości. W przypadku, gdy mamy stworzone automaty, możemy skrócić czas uzyskania informacji.
  • Niektórych testów nie da się zrealizować w sposób manualny
Zdarzają się sytuacje, że nie jesteśmy w stanie przeprowadzić testów w sposób manualny. Przykładem mogą tutaj być testy wydajnościowe, za pomocą których możemy symulować pracę wielu użytkowników w tym samym czasie. Nikt nie będzie przeprowadzał takiej symulacji ręcznie, np. wykonując daną operację w imieniu 400 użytkowników.

 

Cykl tworzenia testów automatycznych

Poniżej znajduje się uproszczony diagram przedstawiający cykl tworzenia i wykorzystania testów automatycznych w organizacji. Jest to bardzo uproszczony i ogólny schemat prezentujący etapy, z jakich składa się cykl tworzenia testów automatycznych.

Testy automatyczne - proces

 

Mity związane z Automatyzacją Testów

  • MIT #1 – Automatyzacja testów pozwala zastąpić testerów manualnych
Nie raz słyszeliśmy, że firmy chcą wprowadzić testy automatyczne po to, aby móc uwolnić zasoby w postaci testerów manualnych. Nie ma możliwości, aby testy automatyczne w 100% zastąpiły przeprowadzanie testów manualnych. Musimy być świadomi, że testy automatyczne są tylko i wyłącznie uzupełnieniem testów manualnych przeprowadzanych przez doświadczonych testerów eksploracyjnych.
  • MIT #2 – Raz napisany automat testowy będzie działał niezmiennie
Często w ofercie dla klienta związanej z automatyzacją testów znajduje się pozycja związana z utrzymaniem i konserwacją testów automatycznych oraz dostosowywaniem ich do nowych wersji produktów. Klient czasem jest zaskoczony, że napisane testy należy utrzymywać (czasem nawet trzeba je przepisywać i dostosowywać do nowej wersji produktu). Warto pamiętać, że testy trzeba nie tylko dostosowywać do nowych wersji produktu (kto automatyzował wie, że zmiana identyfikacji jednego pola przez programistę może spowodować, że nasze testy przestaną działać). Pojawić się mogą nowe pola, formatki, które również trzeba zautomatyzować. Dodatkowo trzeba pamiętać, że jedną z 7 podstawowych zasad testowania jest występowanie „Paradoksu pestycydów”, który polega na tym, że oprogramowanie uodparnia się na powtarzające się testy i nie wykrywa nowych błędów dlatego należy  regularnie dokonywać przeglądu bieżących przypadków testowych (również testów automatycznych) i odpowiednio je modyfikować celem wykrywania nowych defektów.
  • MIT #3 – Wszyscy potrafią automatyzować
Umiejętności, kompetencje pozwalające na tworzenie testów automatycznych są inne niż przy przeprowadzaniu testów manualnych. W zależności od tego, na jakim poziomie testów chcemy wdrożyć testy automatyczne, są potrzebne unikatowe umiejętności. Zazwyczaj tester automatyczny musi być biegłym programistą, znającym się dobrze na programowaniu i dodatkowo znać narzędzia / frameworki pozwalające na tworzenie i przeprowadzanie testów automatycznych. Za dobre kompetencje oczywiście musimy odpowiednio zapłacić, a zdarza się słyszeć, że przecież to tylko testy i nie warto płacić aż tak dużo.
  • MIT #4 – Testy automatyczne są bardzo szybkie
Wszystko zależy od tego, na jakim poziomie mamy wdrożone testy automatyczne. W przypadku, gdy nasze testy polegają jedynie na weryfikacji z poziomu GUI, może okazać, że czas ich trwania nie jest tak szybki, jaki byśmy oczekiwali. Przykładowo testy na 3 różnych systemach operacyjnych i 4 przeglądarkach na każdym z nich mogą trwać nawet kilkadziesiąt godzin, dlatego tak ważne jest, abyśmy przed tworzenie samych skryptów automatycznych zdefiniowali akceptowalny czas ich wykonywania.
  • MIT #5 – Tylko testerzy są od automatyzacji testów
Istnieje mit, który ciągle gdzieś się przewija między osobami tworzącymi systemy, że automatyzacja testów to działka przeznaczona tylko dla testerów. Nic bardziej mylnego. Patrząc na jeden z powyższych rozdziałów, w którym przedstawiona została Piramida testów automatycznych, okazuje się, że jednymi z najszybszych testów pozwalających na weryfikację działania poszczególnych modułów są testy jednostkowe. Zatem powstaje pytanie, kto w takim razie powinien pisać testy jednostkowe. Otóż najlepiej w tej roli sprawdzają się twórcy samego produktu. Dodatkowo, kto powiedział, że testy GUI interfejsu użytkownika nie mogą być tworzone przez np. programistów.

 

Problemy / zagrożenia związane z automatyzacją testów

Automatyzacja testów niesie ze sobą ogrom zalet, ale powinniśmy być również świadomi tego, jakie zagrożenia one niosą.
  • Oczekiwania
W sytuacji, gdy firma ma nierealistyczne oczekiwania co do automatów (np. zrobienie automatów przez 2 tygodnie dla produktu rozwijanego przez 8 lat), może to skutkować tym, że tak szybko, jak zdecydowaliśmy się na tworzenie testów automatycznych, tak szybko z nich zrezygnujemy.
  • Fałszywe poczucie dobrego produktu
Testy automatyczne są tak dobre, jak zostały zaprojektowane do nich przypadki testowe oraz jak zostały one zautomatyzowane. To, że mamy 3000 zautomatyzowanych test casów, które zawsze przechodzą na „zielono”, nie znaczy, że mamy świetny produkt. Trzeba poważnie się zastanowić, gdy nasze testy nie wykrywają żadnych błędów, a dochodzą do nas informacje od klientów, że produkt nie jest dobrej jakości. W takiej sytuacji trzeba bardzo szybko zrobić przegląd testów i obszarów, które zostały pokryte testami.
  • Koszt utrzymania testów
Koszt utrzymania testów musi zostać uwzględniony w kosztach produktu, a koszt takich testów często nie jest mały. W sytuacji, gdy aplikacja zmienia się bardzo dynamicznie i trzeba ciągle poprawiać scenariusze testowe oraz testy automatyczne w oparciu o te scenariusze, może okazać się, że nasze testy są nieopłacalne. Warto wówczas zastanowić się nad zawężeniem testów automatycznych do newralgicznych części systemu.
  • Problemy techniczne 
Ogrom różnych technologii / frameworków / komponentów wykorzystywanych przy pisaniu systemu ma duży wpływ na czas oraz koszt jego późniejszej automatyzacji. Warto zatem pomyśleć już na etapie budowy samej aplikacji, z jakich komponentów nasza aplikacja będzie zbudowana i czy istnieją narzędzia pozwalające na automatyzację testów.
  • Automatyzacja testów sposobem na słabą jakość produktu
Pamiętajmy, że automatyzacja jest tylko i wyłącznie uzupełnieniem testów manualnych. W przypadku, gdy mamy źle zdefiniowany proces testowy lub nawet jego brak, słabą jakość produktu, nie posiadamy dobrych praktyk programistycznych, żadne automaty nam nie pomogą.

 

Czym powinny charakteryzować się dobre testy automatyczne?

W poniższym rozdziale znajdziesz informacje na temat tego, czym powinny charakteryzować się dobrze działające testy automatyczne.

  • Stabilność działania

Ważnym aspektem przy tworzeniu testów automatycznych jest ich stabilność działania. Wiele razy spotkaliśmy się w różnych firmach z sytuacją, że testy automatyczne z różnych przyczyn nie działały stabilnie i na przykład na 5 powtórzeń były 4 różne rezultaty. Taki stan rzeczy powoduje, że nie jesteśmy w stanie ocenić w szybki sposób rezultatów testów (co działa w systemie prawidłowo, a co nie). Szczególnie na taki stan rzeczy narażone są testy automatyczne dla interfejsu GUI.

  • Wiarygodność testów

Kolejnym ważną cechą testów automatycznych jest to, aby otrzymywane rezultaty były wiarygodne i można było na ich podstawie podjąć słuszne decyzje. W sytuacji, gdy przykładowo testy przejdą pozytywnie, powinniśmy być pewni, że obszar pokryty testami działa poprawnie. Nie ma nic gorszego niż sytuacja, kiedy to testy przechodzą poprawnie, a funkcjonalność w rzeczywistości nie działa poprawnie. Automatycznie powoduje to utratę zaufania do utworzonych testów.

  • Środowisko testów zbliżone do produkcyjnego

Wiarygodne testy to również takie, które są przeprowadzane na środowisku zbliżonym (lub identycznym) do środowiska produkcyjnego. Dobrze jest również, gdy środowisko testowe zasilone jest danymi produkcyjnymi (o ile jest taka możliwość) ze względu na to, że bardzo wiele błędów wynika z połączenia konfiguracji systemu oraz danych, na których przeprowadzane są testy.

  • Testy automatyczne umiejscowione w procesie testowym

Testy automatyczne, tak jak już wcześniej zostało napisane, powinny być uzupełnieniem innych rodzajów testów, np. testów manualnych opartych na doświadczeniu. Ważne również, aby testy te były spójne z procesem testowym i wytwórczym naszego oprogramowania.

  • Raportowanie wyników testów + diagnostyka problemów

Kolejną bardzo ważną cechą dobrych testów automatycznych jest łatwość przeglądania wyników testów + ewentualna diagnostyka problemów. Dobrze, jeśli rezultaty wszystkich przeprowadzanych testów (zarówno manualnych, jak i automatycznych) są spięte z centralnym miejscem zarządzania produktem, np. z JIRA, TestRailem. Dodatkowo testy muszą być zaimplementowane w taki sposób, aby można było szybko uzyskać informacje, dlaczego jakiś test nie działa poprawnie (czy jest to błąd po stronie systemu, czy błąd wynikający ze zmian wprowadzonych w systemie itp.). Duży problem pojawia się wtedy, gdy jedyną osobą, która jest w stanie zdiagnozować przyczynę błędu, jest twórca testów. Musimy pamiętać, że łatwość w używaniu testów ma wpływ na ich końcowy sukces.

Wybór narzędzi do automatyzacji testów

Jednym z kluczowych czynników, który ma wpływ na sukces wdrożenia testów automatycznych, jest wybór narzędzia, w którym testy te będą tworzone. Ważne, aby wybrane narzędzie było dostosowane do potrzeb naszej organizacji, integrowało się z pozostałymi wykorzystywanymi narzędziami i, co najważniejsze, zanim kupisz narzędzie, przeprowadź okres pilotażowy i sprawdź go na produkcie, który będzie podlegał automatyzacji. Tylko wtedy będziesz w stanie ocenić, czy wybrane narzędzie sprawdzi się przy stosowanej przez Ciebie technologii.

W jednym z Naszych „Poradników początkującego testera” znajdziesz listę narzędzi służących do automatyzacji testów.

Narzędzia Wspierające Testowanie