
/ 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
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ą:
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.
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.
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.
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:
Oto niektóre z popularnych frameworków do automatyzacji testów w różnych kategoriach:
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.
– 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.
Środowisko testowe powinno naśladować środowisko produkcyjne, aby uzyskać dokładne wyniki testów. Obejmuje to konfigurację sprzętu, oprogramowania, konfiguracji sieci i danych.
– 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ć.
Do korzyści z automatyzacji testów należą m.in:
Zautomatyzowane testy mogą wykonywać skomplikowane scenariusze w dowolnym czasie i pokryć funkcjonalności które mogą zostać pominięte podczas testów manualnych.
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.
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.
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 .
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?
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.
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.
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:
Na tej podstawie przygotowaliśmy plan testów i model tego, jak będą one przebiegać w poszczególnych projektach, np.:
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.
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.
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żą:
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.
/ Co u nas słychać