Wskazówki dotyczące automatyzacji testów i sprawdzone metody

Testowanie automatyczne jest ważną czynnością testową w cyklu rozwoju oprogramowania, ponieważ może zapewnić zespołowi szybką informację zwrotną po opracowaniu nowej funkcji.

Odciąża to również od kontroli jakości polegającej na wielokrotnym przeprowadzaniu testów regresyjnych, co pozwala zaoszczędzić czas poświęcony kontroli jakości na innych czynnościach testowych.

Poprawnie przeprowadzona automatyzacja testów może być bardzo korzystna dla zespołu. Poniższe wskazówki pomogą Ci uzyskać jak największą wartość z automatycznego procesu testowania i działań, a także wskażą pułapki, których należy unikać, rozpoczynając automatyzację testów.




Ręczne vs automatyczne - testowanie vs sprawdzanie

Unikaj porównywania testów ręcznych i automatycznych. Oba są potrzebne, ponieważ każdy służy innemu celowi. Testy automatyczne to zestaw instrukcji napisanych przez osobę w celu wykonania określonego zadania. Za każdym razem, gdy uruchamiany jest test automatyczny, będzie wykonywał dokładnie takie same kroki, jak podano w instrukcji i sprawdzał tylko te elementy, które mają zostać sprawdzone.

Z drugiej strony podczas testowania ręcznego mózg testera jest zaangażowany i może wykryć inne awarie w systemie. Etapy testu niekoniecznie muszą być takie same za każdym razem, ponieważ tester może zmieniać przepływy podczas testowania; jest to szczególnie prawdziwe w przypadku testów eksploracyjnych.




Automatyzacja testów regresji

Główny powód, dla którego chcesz zautomatyzować test polega na tym, że chcesz wielokrotnie wykonywać test na każdym nowym wydaniu. Jeśli test ma być wykonany tylko raz, wysiłek związany z automatyzacją testu może przeważyć nad korzyściami.

Testy regresji muszą być wykonywane wielokrotnie w miarę ewolucji testowanego oprogramowania. Może to być bardzo czasochłonne i nudne zadanie dla kontroli jakości, ponieważ musi codziennie przeprowadzać testy regresji. Testy regresyjne są dobrymi kandydatami do automatyzacji testów.



Zaprojektuj testy przed ich automatyzacją

Dobrą praktyką jest zawsze tworzenie przypadków testowych i scenariuszy przed rozpoczęciem automatyzacji testów. To dobry projekt testów może pomóc w identyfikacji defektów, testy automatyczne wykonują tylko projekt testów.

Niebezpieczeństwo związane z przejściem od razu do automatyzacji polega na tym, że interesuje Cię tylko sprawienie, by skrypt działał i zazwyczaj automatyzujesz tylko pozytywne i szczęśliwe scenariusze przepływu, zamiast myśleć o innych możliwych scenariuszach, które można przetestować.


Nie ograniczaj też zakresu testowania tylko po to, by test zadziałał lub przeszedł.



Usuń niepewność z testów automatycznych

Jednym z kluczowych punktów testów automatycznych jest możliwość dawania spójnych wyników, dzięki czemu możemy mieć pewność, że coś poszło nie tak, gdy test się nie powiedzie.

Jeśli test automatyczny przejdzie w jednym przebiegu i zakończy się niepowodzeniem w następnym, bez żadnych zmian w testowanym oprogramowaniu, nie możemy być pewni, czy błąd jest spowodowany aplikacją, czy innymi czynnikami, takimi jak problemy ze środowiskiem testowym lub problemy w sam kod testu.

Kiedy pojawiają się awarie, musimy przeanalizować wyniki, aby zobaczyć, co poszło nie tak, a kiedy mamy wiele niespójnych lub fałszywie pozytywnych wyników, wydłuża to czas analizy.


Nie bój się usuwać niestabilnych testów z pakietów regresji; Zamiast tego dąż do spójnych, czystych wyników, na których możesz polegać.



Przejrzyj testy automatyczne pod kątem ważności

Zaniepokoi Cię ogromna liczba nieaktualnych testów automatycznych, po prostu niczego nie sprawdzaj lub nie sprawdzaj najważniejszych weryfikacji!

Może to oznaczać przejście od razu do automatyzacji bez poświęcania wystarczającej ilości czasu na planowanie tego, co należy zrobić, i projektowanie dobrych scenariuszy testowych.

Zawsze miej współpracownika, aby przejrzał testy automatyczne pod kątem ważności i rozsądku. Upewnij się, że testy są aktualne.




Nie automatyzuj niestabilnej funkcjonalności

W miarę opracowywania nowej funkcji lub funkcjonalności wiele rzeczy może pójść nie tak, a nawet funkcja może nie mieć już zastosowania, ponieważ firma zmieniła zdanie.

Jeśli zacząłeś automatyzować testy w trakcie opracowywania funkcji, testy muszą być aktualizowane wiele razy w miarę ewolucji funkcji i próba nadążania za wszystkimi zmianami może być dość zniechęcająca. A jeśli ta funkcja nie ma już zastosowania, cały wysiłek związany z automatyzacją testów jest zmarnowany.

Dlatego zawsze najlepiej jest zautomatyzować funkcję, gdy jest już ustabilizowana i mniej podatna na zmiany.



Nie oczekuj magii od automatyzacji testów

Głównym powodem automatyzacji testów jest zwolnienie czasu QA na interesujące testy eksploracyjne i zapewnienie zespołowi, że aplikacja jest nadal w dobrym stanie po dostarczeniu nowych zmian.


Nie oczekuj, że automatyzacja wykryje wiele błędów . W rzeczywistości liczba błędów wykrywanych przez automatyzację jest zawsze znacznie mniejsza niż w przypadku testów ręcznych i eksploracyjnych.



Nie polegaj wyłącznie na automatyzacji - uważaj na zaliczanie testów

Zautomatyzowane testy regresyjne mogą dać zespołowi poczucie pewności, ponieważ testy regresji powinny nadal kończyć się powodzeniem, gdy dostarczana jest nowa funkcjonalność. Zespół zaczyna polegać na testach, a posiadanie dobrego zestawu testów regresyjnych może działać jako siatka bezpieczeństwa.

Należy jednak pamiętać, że nie wszystkie testy są zautomatyzowane lub można je zautomatyzować, dlatego zawsze towarzyszą testom automatycznym testom eksploracyjnym.

Czasami zmiana w oprogramowaniu kończy się niepowodzeniem; jeśli jednak wszystkie testy przejdą pomyślnie, oznacza to, że wada została pominięta, a ponieważ nie było wezwania do działania, wada pozostała niezauważona.



Dąż do szybkiej reakcji

Szybka informacja zwrotna jest jednym z celów testów automatycznych, ponieważ programiści chcą wiedzieć, czy to, co opracowali, działa i nie zepsuło obecnych funkcji.

Aby uzyskać tę szybką pętlę zwrotną, testy muszą być zautomatyzowane w warstwie komponentu lub API bez polegania na interfejsie użytkownika.

Testy uruchamiane w interfejsie użytkownika są znacznie wolniejsze i podatne na błędy z powodu zmian graficznego interfejsu użytkownika. Innymi słowy, funkcjonalność nadal działa zgodnie z oczekiwaniami, ale testy kończą się niepowodzeniem z powodu zmian w interfejsie użytkownika. Dlatego testy mogą stać się niewiarygodne.



Zrozum kontekst

Testy mogą być zautomatyzowane w dowolnej warstwie, jednostce, API, usłudze, GUI. Każda warstwa służy do testowania w innym celu.
Testy jednostkowe zapewniają, że kod działa na poziomie klasy, że jest kompilowany, a logika jest zgodna z oczekiwaniami. Testy na tej warstwie to bardziej weryfikacja niż walidacja.

Testy API lub testy integracji zapewniają, że zestaw funkcji i klas może współpracować, a dane mogą być przekazywane z jednej klasy do drugiej.

Z drugiej strony testy GUI testują przepływy i podróże użytkowników. Ogólnie rzecz biorąc, nie testowalibyśmy funkcjonalności z poziomu interfejsu użytkownika. Należy to zrobić na niższych warstwach.

Głównym celem testów interfejsu użytkownika jest zapewnienie, że cały system działa zgodnie z niektórymi typowymi scenariuszami i przypadkami użycia. Testowanie na tej warstwie to raczej walidacja niż weryfikacja

Na poziomie interfejsu użytkownika automatyzujemy raczej scenariusze niż historie.



Nie automatyzuj każdego testu

100% pokrycia testowego nie jest możliwe, ponieważ mogą istnieć miliony kombinacji. Zawsze wykonujemy podzbiór możliwych testów. Ta sama zasada dotyczy testów automatycznych.

Stworzenie zautomatyzowanego skryptu wymaga czasu i wysiłku, a dążenie do „Automatyzacji każdego testu” wymaga dużo zasobów i czasu, co w wielu przypadkach nie jest możliwe.

Zamiast tego użyj podejścia opartego na ryzyku, aby określić, które testy powinny zostać zautomatyzowane. Aby maksymalnie wykorzystać automatyzację, automatyzuj tylko najważniejsze przypadki biznesowe i scenariusze.

Ponadto duża liczba testów automatycznych zwiększa koszty konserwacji i jest trudna w utrzymaniu.

Należy również pamiętać, że nie wszystkie testy można zautomatyzować. Niektóre testy mają bardzo złożony charakter i wymagają wielu dalszych kontroli systemu i mogą być niespójne. W takich przypadkach najlepiej pozostawić te sprawdzenia na potrzeby testów ręcznych.



Użyj technik testowania w automatyzacji testów

Techniki testowe, których nauczyłeś się w ISTQB, nie służą tylko do testowania ręcznego. Mają również zastosowanie do testów automatycznych. Techniki takie jak analiza wartości brzegowych, podział równoważności, testowanie przejść między stanami, testowanie parami mogą przynieść wiele korzyści w automatycznym testowaniu.



Nie automatyzuj chaosu

Aby jak najlepiej wykorzystać testy automatyczne, należy wdrożyć dobry proces kontroli jakości. Jeśli proces kontroli jakości jest chaotyczny i dodamy do tego chaosu automatyczne testowanie, otrzymamy tylko szybszy chaos.

Spróbuj odpowiedzieć na pytania typu: Co zautomatyzować, Kiedy automatyzować , Kiedy wykonać testy automatyczne, kto zautomatyzuje testy, jakich narzędzi użyć do automatyzacji testów itp.

Te wskazówki są zbierane głównie z doświadczenia jako testera automatyzacji i kilka dobrych praktyk, które są przestrzegane przez innych.

Czy masz jakieś wskazówki dotyczące automatyzacji testów, które chcesz dodać do tej listy?