/ 18.11.2024
Jeśli kliknąłeś w link, żeby przeczytać poniższy artykuł, z pewnością masz świadomość, że testowanie automatyczne nie jest już luksusem, ale wymogiem w tworzeniu oprogramowania. W miarę jak aplikacje stają się coraz bardziej złożone i większe, potrzeba wydajnego, powtarzalnego i niezawodnego testowania staje się krytyczna.
Dlaczego można tak powiedzieć? Praktycznie każdy słyszał o aktualizacji opublikowanej przez CrowdStrike,19 lipca 2024, która wyłączyła 8,5 miliona komputerów z systemem Windows. Przyczyną było oprogramowanie testujące które nieprawidłowo sprawdziło aktualizacje treści, przesłane do milionów komputerów. Wnioski z awarii dotyczą obecnie testowania każdej nowej łatki, która pojawi się w oprogramowaniu krytycznym.
Konstantin Klyagin, założyciel firm programistycznych Redwerk i QAwerk, powiedział w oświadczeniu prasowym:
„Zautomatyzowane testowanie zapewnia, że nawet niewielkie zmiany nie wprowadzają nowych błędów. Jest to szczególnie ważne w przypadku dużych aktualizacji, takich jak CrowdStrike, gdzie same testy ręczne nie byłyby wystarczające”.
Aby zapobiec ponownemu wystąpieniu takiej sytuacji, Tom Warren (starszy redaktor i autor Notepad , który od ponad 20 lat zajmuje się wszystkim, co dotyczy firmy Microsoft, komputerów PC i technologi) podkreślił, iż CrowdStrike obiecuje ulepszyć swoje testy Rapid Response Content. W tym celu będzie wykorzystywać lokalne testy deweloperskie, testy aktualizacji treści i rollback testing, a także testy obciążeniowe, fuzzing i fault injection. CrowdStrike przeprowadzi również testy stabilności i interfejsu treści w Rapid Response Content.
Zaskakujące jest jednak to, że wciąż jest wiele firm, które nie wdrożyły jeszcze tego podejścia w swoim środowisku produkcyjnym.
Dlaczego zatem szczegółowe testowanie automatyczne oprogramowania jest tak ważne? W tym artykule skupimy się na tym, by w ramach przyjęcia strategii QA zaprojektować najlepszy framework do automatyzacji testów.
Zacznijmy jednak od wyjaśnienia kilku podstawowych pojęć.
Spis treści
Czym jest testowanie automatyczne?
Automatyzacja testów oznacza konfigurację narzędzi testowych a następnie wytwarzanie testów i zbieranie rezultatów porównując wyniki z oczekiwaniami. Obejmuje ona projektowanie architektury oraz wybór odpowiedniego framework’a.
Testy automatyczne mogą być uruchamiane o dowolnej porze dnia na różnych platformach sprzętowych lub programowych i w różnych środowiskach, dając takie same wyniki. Ich głównym celem jest odciążenie testerów manualnych z wykonywania powtarzalnych zadań, i zapewnienie, że obszary krytyczne aplikacji są sprawdzane na bieżąco.
Zautomatyzowane narzędzia testujące mogą:
- przygotowywać zestawy danych,
- porównywać oczekiwane wyniki z rzeczywistymi wynikami podczas testów,
- rejestrować i przechowywać wyniki testów na później.
Testami automatycznymi można pokryć cały SDLC zaczynając od testów jednostkowych, przez integracyjne aż do systemowych i akceptacyjnych.
Poniżej na ilustracji widzimy „Piramidę testów” jako istotną koncepcję inżynierii oprogramowania. Pomaga ona tworzyć strukturę testów automatycznych, zapewniając skuteczne i wydajne testowanie oprogramowania. Piramida pokazuje rodzaje testów, ich znaczenie i równowagę między nimi.
Testy jednostkowe: Testy jednostkowe są podstawą piramidy. Testują poszczególne komponenty lub funkcje w izolacji, zazwyczaj koncentrując się na najmniejszych częściach kodu (np. funkcjach, metodach). Są szybkie do wykonania, łatwe do napisania i utrzymania, i pomagają wychwycić błędy na wczesnym etapie procesu rozwoju.
Testy integracyjne: Stanowiące środek piramidy, te testy koncentrują się na interakcjach między różnymi komponentami lub systemami. W porównaniu do testów jednostkowych, jest ich mniej, są bardziej złożone i mogą obejmować zewnętrzne zależności, takie jak bazy danych lub usługi innych firm.
Testy end-to-end: Testy E2E, znajdujące się na szczycie piramidy, symulują rzeczywiste scenariusze użytkownika i testują aplikację jako całość. Testy te sprawdzają, czy cały system, w tym interfejs użytkownika, backend i bazy danych, działają zgodnie z oczekiwaniami użytkownika. Są najbardziej złożone i mają najdłuższy czas wykonania.
Testowanie automatyczne – Jak stworzyć wydajne środowisko?
Zaprojektowanie środowiska automatyzacji testów obejmuje kilka etapów, od zdefiniowania zakresu i wyboru narzędzi po jego wdrożenie i utrzymanie. Poniżej omawiamy kluczowe kroki w tym zakresie.
1. Określ zakres i cele
Określenie celów: Pierwszym krokiem w projektowaniu automatyzacji testów jest podjęcie decyzji, które testy należy zautomatyzować. W zależności od wymogów organizacji należy wyznaczyć kryteria, które je określą (np. szybsza informacja zwrotna, lepsze pokrycie testami).
Konieczne jest również zaznaczyć, że nie wszystkie testy powinny być zautomatyzowane, wpływa na to wiele czynników jak budżet, czas czy środowisko.
Testy automatyczne powinny zawsze być zintegrowane z kompleksową strategią testowania produktów. Takie ujednolicone podejście usprawnia działania QA, zapewniając spójność i wydajność w procesie rozwoju. Strategia testów automatycznych, definiuje kluczowe obszary takie, jak: cel, poziomy testowania, rodzaje testów, narzędzia, zakres i środowisko testowe.
2. Wybierz odpowiednie narzędzia
Oceń posiadane opcje: Weź pod uwagę takie czynniki, jak wymagania projektu, doświadczenie zespołu i stos technologii. Określenie zakresu testowania obejmuje również podjęcie decyzji o środowiskach testowych, platformach i urządzeniach, które będą wykorzystywane do automatyzacji.
Wybór frameworków: Wybierz odpowiednie narzędzia dla każdego typu testów (np. Selenium dla testów UI, Appium dla urządzeń mobilnych). Frameworki powinny być przede wszystkim:
- kompatybilne ze stosem technologii,
- łatwe w użyciu i obsługujące wiele typów testów,
- uwzględniające wsparcie społeczności i dokumentację.
Oto niektóre z popularnych frameworków do automatyzacji testów w różnych kategoriach:
3. Zaprojektuj architekturę frameworka
Architektura obejmuje ona konfigurację środowisk testowych, integrację z CI/CD oraz wybór narzędzi do automatyzacji testów. Dobra architektura zapewnia skalowalność, łatwość utrzymania i wydajność testów automatycznych.
- Projektowanie modułowe: Organizuj testy i komponenty w sposób modułowy w celu zwiększenia możliwości ponownego użycia i łatwości konserwacji.
- Warstwy abstrakcji: Obejmuje tworzenie różnych warstw, takich jak:
– Warstwa testów w której znajdują się rzeczywiste przypadki testowe.
– Warstwa logiki biznesowej zawierająca metody, które wykonują działania na aplikacji.
– Page Object Model (POM) reprezentujący strony internetowe jako obiekty.
4. Skonfiguruj środowisko
Środowisko testowe powinno naśladować środowisko produkcyjne, aby uzyskać dokładne wyniki testów. Obejmuje to konfigurację sprzętu, oprogramowania, konfiguracji sieci i danych.
- Użyj systemu kontroli wersji (np. Git) do zarządzania bazą kodu.
- Integruj się z narzędziami CI/CD (np. Jenkins, GitLab CI) w celu ciągłego testowania.
- Wdrażaj strategię zarządzania danymi testowymi za pomocą baz danych lub plików danych.
5. Wdrażaj framework testowy.
- Utwórz strukturę projektu, którą będzie można przenosić pomiędzy projektami i będzie wygodna w użyciu
- Zaimplementuj klasy narzędziowe dla typowych działań, takich jak rejestrowanie, obsługa konfiguracji itp.
- Rozwiń podstawowe komponenty, np:
– Skonfiguruj pliki konfiguracyjne dla ustawień specyficznych dla środowiska.
-Implementuj inicjalizację i usuwanie sterowników (dla Selenium/Appium).
– Utwórz klasę bazową, którą inne klasy testowe mogą rozszerzyć.
6. Twórz i organizuj przypadki testowe
- Pisz skrypty testowe na podstawie zidentyfikowanych scenariuszy testowych.
- Używaj POM (Page Object Model) w celu wyodrębnienia szczegółów strony internetowej ze skryptów testowych.
- Testuj w oparciu o wiele zestawów danych
7. Wdrażaj raportowanie i rejestrowanie
- Integruj narzędzia do raportowania (np. Allure, Extent Reports) w celu generowania szczegółowych raportów z testów.
- Wdrażaj mechanizmy rejestrowania w celu uzyskania szczegółowych informacji o przebiegu testów (np. Log4j).
8. Przeprowadzaj testy i dokonuj walidacji
- Wykonuj testy lokalnie, aby upewnić się, że działają zgodnie z oczekiwaniami.
- Skonfiguruj testy do automatycznego uruchamiania w ramach ciągłej integracji CI/CD.
- Identyfikuj i naprawiaj wszelkie problemy oraz optymalizuj testy pod kątem stabilności i wydajności.
9. Utrzymuj framework testowy
- Regularnie aktualizuj framework i zależności.
- Przeprowadzaj okresową refaktoryzację kodu w celu utrzymania jakości.
- Stale dodawaj nowe przypadki testowe w celu poprawy pokrycia testami.
Korzyści płynące z korzystania frameworka do automatyzacji testów
Do korzyści z automatyzacji testów należą m.in:
- Oszczędność czasu
Zautomatyzowane testy mogą wykonywać skomplikowane scenariusze w dowolnym czasie i pokryć funkcjonalności które mogą zostać pominięte podczas testów manualnych.
- Lepsza wydajność i produktywność zespołu
Dzięki automatyzacji powtarzalnych zadań testowych, programiści i testerzy mogą skupić się na bardziej strategicznych działaniach, takich jak projektowanie nowych funkcji, optymalizacja kodu i poprawa doświadczenia użytkownika.
Co więcej, automatyzacja zmniejsza również liczbę błędów ludzkich i zapewnia spójne i wiarygodne wyniki testów.
- Oszczędność kosztów
Testowanie automatyczne oszczędza koszty w dłuższej perspektywie. Wyłapując błędy na wczesnym etapie cyklu rozwoju, unikniesz przeróbek i potencjalnej utraty przychodów z powodu awarii oprogramowania.
Ponadto uruchamiając testy bez ręcznej interwencji szybciej wprowadzisz produkty na rynek co pomaga firmom być konkurencyjnym w szybko zmieniającym się cyfrowym świecie.
- Skalowanie testów
Dzięki automatyzacji testów zespoły mogą powielać scenariusze testowe w różnych środowiskach i konfiguracjach oraz uzyskać spójną ocenę funkcjonalności oprogramowania.
Jest to bardzo przydatne w przypadku projektów o złożonej architekturze lub częstych aktualizacjach, umożliwiając zespołom utrzymanie wysokich standardów testowania .
Kiedy warto stworzyć customowy framework do automatycznego testowania?
Najczęściej testerzy wykorzystują narzędzia do testowania, jak np. Selenium, Playwright, na których piszą testy i wykorzystują je bezpośrednio do tworzenia zautomatyzowanych scenariuszy testowych.
Z początku może się wydawać, że przyrost testów automatycznych jest duży, ale kryje się za tym poważny problem. Przy bezpośrednim wykorzystaniu tych narzędzi nasze testy bardzo szybko się zdeaktualizują w przyrostowym rozwoju oprogramowania. Ich naprawa ich będzie zajmować sporą część czasu testerom automatyzującym, a czasem nawet spowoduje, że testy zostaną wyłączone i nie zostaną przywrócone do stanu używalności. Dodatkowo wpłynie to negatywnie na pokrycie testami nowych funkcjonalności.
Stworzenie architektury framework’a do testów automatycznych odpowiadającej potrzebą organizacji i projektów jest często dużym wyzwaniem. Często jest to pomijane co prowadzi do tworzeniu kilku frameworkow czy różnych realizacji podstawowych funkcjonalności co generuje koszty jak i powoduje że potrzeba ich utrzymania wymaga zaangażowania wielu osób.
Co można zrobić w ramach stworzenia frameworka do testów automatycznych?
- Ujednolicić proces tworzenia testów jak i przygotowania wspólnych dostawców i bazy do testów celu lepszego rozwoju testów i budowania reużywalnych .
- Wydzielić części kodu który jest wspólny dla wielu projektów i ich wersjonowanie aby umożliwić nowym projektom szybki start w zakresie automatyzacji.
Framework do automatyzacji jest o tyle to wygodny, że ta podstawa testów, zbiera wszystko, co potrzebujemy, żeby uruchomić pojedynczy test. przeglądarkę, inicjalizuje wszystkie już te serwisy, strony i tak, by od razu rozpocząć scenariusz testowy.
Jak pomogliśmy klientowi korporacyjnemy ulepszyć proces testowania?
Przejdźmy teraz od teorii do praktyki. W tym studium przypadku pokażemy, jak pomogliśmy jednemu z naszych klientów z branży finansowej, stopniowo wdrożyć ramy automatyzacji QA.
- Przegląd wewnętrznego procesu testowania i proponowane ulepszenia
Przeprowadziliśmy warsztaty, aby zbadać obecny stan procesu zarządzania jakością (QA) klienta i zbudowaliśmy strategię testowania, w której nakreśliliśmy podstawowe założenia odnośnie przeprowadzania testów.
Aby sprawdzić jakość, musieliśmy dostarczyć odpowiednie metryki, m.in:
- stworzyliśmy niestandardowe wizualizacje danych, aby pokazać jaśniejszy obraz aktualnego stanu produktu,
- dostarczyliśmy również możliwość śledzenia realizacji wymagań w całym cyklu SDLC,
- połączyliśmy narzędzia do zarządzania wymaganiami z ramami testowymi, aby wszystkie informacje dotyczące jakości były dostępne w jednym miejscu.
- Przygotowanie PoC dla implementacji funkcjonalnego frameworka automatyzacji przy użyciu języka Java
Na tej podstawie przygotowaliśmy plan testów i model tego, jak będą one przebiegać w poszczególnych projektach, np.:
- co wchodzi w ich zakres,
- jakie są obowiązki poszczególnych ról w projekcie,
- jakie są ryzyka QA, np. czy programiści testują swój kod lub narzędzia.
- Zdefiniowanie QA Handbook
Współpracując z klientem, opracowaliśmy kompleksowy i profesjonalny proces QA, udokumentowany w QA Handbook, który stanowił kompleksowy przewodnik dla specjalistów ds. testowania oprogramowania i zespołów projektowych.
Wprowadził on najlepsze praktyki, podejścia i techniki testowania różnych typów oprogramowania, między innymi aplikacji webowych i desktopowych.
- Realizacja strategii
Po przygotowaniu dokumentacji QA, kolejnym krokiem było wdrożenie polityki i planu. Obejmowało to analizę i walidację wymagań, tworzenie i wykonywanie scenariuszy testowych oraz raportów z testów.
Podsumowanie
Wybór odpowiedniego frameworka do automatyzacji jest kluczowy dla powodzenia każdego projektu. Ważne jest, aby wziąć pod uwagę różne czynniki i wybrać narzędzie, który spełnia jego potrzeby.
Podsumowując, do kluczowych elementów w budowaniu frameworka testowego należą:
- Modułowość i możliwość ponownego użycia: Zaprojektuj framework tak, aby był modułowy, dzięki czemu komponenty mogą być ponownie wykorzystywane w różnych przypadkach testowych.
- Skalowalność: Upewnij się, że framework może być skalowany wraz z rozwojem projektu.
- Łatwość utrzymania: Utrzymanie frameworka w dobrym stanie dzięki przejrzystej dokumentacji i uporządkowanej bazie kodu.
Dzięki odpowiedniej strukturze i podejściu, automatyzacja testów może być kamieniem milowym w powodzeniu projektu.
Jeśli chciałbyś dowiedzieć się więcej na ten temat i otrzymać spersonalizowaną konsultację dotyczącą wdrożenia automatyzacji kontroli jakości w Twojej firmie, skontaktuj się z naszymi inżynierami.