Niedawno poproszono nas o udział w artykule blogowym, który miał dotyczyć „najlepszych praktyk” wdrażania automatyzacji testów w środowisku DevOps. Chociaż nie zgadzamy się z przesłanką artykułu – mianowicie, że automatyzacja testów w środowisku DevOps to dobry pomysł – uznaliśmy, że napisanie artykułu o „automatyzacji testów” to trochę strata czasu, ponieważ większość informacji była już łatwo dostępna.
Zamiast więc pisać artykuł o wdrażaniu automatyzacji testów w Struktura DevOps, postanowiliśmy napisać artykuł wyjaśniający, dlaczego w ogóle warto wdrożyć automatyzację testów, ponieważ istnieje wiele przypadków użycia, w których ręcznie uruchamiany zestaw testów ma sens.

Testowanie ręczne nie jest idealne
Pomysł stojący za wdrożeniem automatyzacja testów w środowisku DevOps jest usunięcie czynnika ludzkiego z testowania. W idealnym przypadku chciałbyś zautomatyzować jak najwięcej procesu testowania, tak aby nawet jeśli sam nie jesteś ekspertem DevOps, przynajmniej móc zaufać, że testowanie zostało wykonane z wysoką jakością.
Testowanie ręczne jest jednak powolnym, uciążliwym procesem, podatnym na błędy i frustrującym doświadczeniem dla każdego, kto musi je przechodzić wielokrotnie. Dla testera testów ręcznych przejście każdego testu może zająć godziny, a nawet dni.
Wyobraź sobie, że musisz wykonywać to samo zadanie w kółko, przez 10 godzin dziennie, przez miesiąc z rzędu, tylko po to, aby przejść przez cały proces testowania i znaleźć kilkaset błędów. To miesiąc twojego życia stracony, tylko po to, aby znaleźć kilkaset błędów, w tempie jednego przypadku testowego co dwa dni.
Jeszcze gorszy jest fakt, że ręczne testowanie jest dość często wykonywane ad hoc, bez żadnego prawdziwego planu lub strategii. Ponieważ jest to zazwyczaj bardzo czasochłonny proces i nie ma zachęty, aby go przyspieszyć, niektóre testy mogą nigdy nie zostać powtórzone, a wiele skrótów, które można zautomatyzować, łatwo kończy się ignorowaniem.
Automatyzacja testów pozwala na lepsze planowanie i redukcję marnotrawstwa
Teraz, planując strategię testowania, nie możesz zaplanować każdego scenariusza. Jednak dzięki testowaniu automatycznemu możesz napisać skrypt, który wywoła oczekiwany zestaw zdarzeń, a ponieważ zdarzenia te są całkowicie deterministyczne, możesz obliczyć dość dokładnie, ile czasu zajmie przejście przez zestaw testów.
W rezultacie możesz dość dokładnie oszacować, ile zasobów (roboczogodzin) będzie potrzebnych do projektu, zakładając, że wszystkie testy przechodzą. Oczywiście, będzie to zależeć od tego, czy napotkasz jakieś przeszkody po drodze, ale ogólnie rzecz biorąc, dobrym pomysłem jest planowanie najgorszego, aby ostatecznie nie zaskoczyć samego siebie, znajdując masę błędów.
Ponadto, ponieważ automatyczne testowanie jest zazwyczaj dość szybkim i prostym procesem, możesz je wykonywać równolegle z rozwojem samego oprogramowania. Oznacza to, że zarówno programista, jak i inżynier testów mogą nadal pracować nad tą samą bazą kodu, a jednocześnie upewnić się, że testy są wykonywane zgodnie z oczekiwaniami i w odpowiednim czasie.
Na przykład załóżmy, że wdrażasz aplikację internetową z node.js, Backbone i Marionette i musisz przetestować funkcjonalność aplikacji. Możesz łatwo skonfigurować proces CI/CD która automatycznie uruchomi maszynę wirtualną, zainstaluje wszystkie wymagane zależności i wykona testy za każdym razem, gdy zmiana zostanie przesłana do gałęzi głównej.
W rezultacie nie tylko otrzymujesz spójny zestaw testów, które możesz uruchamiać wielokrotnie, ale także możesz wycisnąć więcej wartości ze swoich działań automatyzacyjnych, zmniejszając liczbę ręcznych interwencji, które zwykle są konieczne.
Korzyści płynące z automatyzacji testów są liczne
Jak już wspomnieliśmy, automatyzacja testów pozwala na lepsze planowanie i opracowywanie strategii, ponieważ można łatwo śledzić wszystkie testy, ich status i problemy, jakie napotykają.
Oznacza to, że możesz łatwo określić, co należy zrobić, aby naprawić problemy i przejść do następnego testu, zamiast zaczynać od nowa za każdym razem, gdy coś pójdzie nie tak. Oznacza to również, że możesz łatwo zapewnić osobie wykonującej testy odpowiednie szkolenie i wsparcie, gdy jest to konieczne.
Ponadto automatyzacja testów może być świetnym sposobem na znalezienie i monitorowanie nowych błędów i problemów, które pojawiają się w oprogramowaniu z czasem. Jednym z głównych powodów, dla których ludzie unikają automatycznych testów, jest to, że uważają, że nie da się napisać testu, który obejmie każdą ewentualność.
Jednak jest to dalekie od prawdy, ponieważ każdy błąd i problem, na który kiedykolwiek natrafiono, jest gdzieś rejestrowany w dzienniku, a stamtąd pozostaje już tylko kwestia wyszukania dziennika i wdrożenia poprawki. Fakt, że jest to zazwyczaj prosty proces i wymaga minimalnej ręcznej interwencji, sprawia, że tym bardziej warto.
Co więcej, dzięki testowaniu automatycznemu możesz łatwo utworzyć zestaw standardowych testów, które będą uruchamiane wielokrotnie w ramach procesu kompilacji. W rezultacie każdy w zespole może szybko zobaczyć, jak działa program, bez konieczności samodzielnego wykonywania go lub polegania na kimś innym, kto zinterpretuje wyniki za niego.
Ponadto, ponieważ testy są zwykle pisane w formie „czarnej skrzynki”, co oznacza, że nie zależą od żadnych konkretnych szczegółów implementacji poza zestawem oczekiwanych danych wejściowych, powinny być przenośne na każdą platformę, a tym samym mniej podatne na błędy i łatwiejsze do zweryfikowania.
Podsumowanie
Podsumowując, wdrożenie automatyzacji testów w środowisku DevOps może być dobrym pomysłem, o ile masz odpowiedni zespół i odpowiednie podejście. Przede wszystkim upewnij się, że masz kogoś, kto ma doświadczenie zarówno w pisaniu testów funkcjonalnych, jak i wydajnościowych.
Ponadto upewnij się, że zespół ma wystarczające poczucie odpowiedzialności za proces, dzięki czemu jego członkowie będą zmotywowani do doprowadzenia go do końca i będą współpracować z Tobą jako jedną jednostką w celu identyfikowania przeszkód i znajdowania rozwiązań.
Na koniec upewnij się, że masz osobę odpowiedzialną za planowanie, koordynowanie i wykonywanie testów, ponieważ to w większym stopniu niż cokolwiek innego zadecyduje o wyniku Twoich wysiłków.