Test Framework – podstawy

Test Framework - podstawy

Poziom trudności
2/5

Pisanie testów automatycznych jest bardzo ciekawym zajęciem, które może dawać wiele satysfakcji. Tworząc kolejne testy, metody pomocnicze, a także modyfikując kod ad hoc, często dochodzimy do wniosku, że kod staje się coraz mniej czytelny, zrozumiały, a myśl o jakichkolwiek zmianach przysparza kilka kolejnych siwych włosów. W wielu przypadkach można dokonać refaktoringu istniejącego kodu, z zachowaniem pewnych zasad i konwencji. Jednak niejednokrotnie w momencie, w którym zauważymy powyższe przeszkody, najlepszym rozwiązaniem będzie po prostu stworzenie frameworku na nowo. Będąc już świadomymi błędów, które popełniliśmy, z zachowaniem ogólnie przyjętych zasad można przystąpić do tworzenia własnego test framework’u.

A MOŻE GARNITUR

Oczywiście można zadać pytanie, po co tworzyć swój własny, skoro istnieją takie jak PyTest, Robot czy inne gotowe frameworki? Nic nie stoi na przeszkodzie, a nawet polecam, aby w swoim test framework’u wykorzystać wybrany z powyższych. Dzięki temu sporą część pracy mamy wykonaną za nas. Z tworzeniem własnego test framework’a jest podobnie jak z zakupem garnituru — możemy kupić gotowy, dzięki czemu będziemy mogli go od razu ubrać, jednak na przykład zbyt długie nogawki mogą lekko przeszkadzać. Możemy też uszyć na miarę, lecz wiąże się to najczęściej z długim czasem oczekiwania oraz wyższą ceną. Trzecią opcją jest kupić gotowy i wykonać kilka poprawek, dzięki czemu będziemy mieć garnitur skrojony na miarę wykonany w rozsądnym czasie. 

Dlatego też polecam, aby przy tworzeniu własnego framework’u oprzeć się na jednym z już istniejących — o ile jest to możliwe. Dzięki temu nie będziemy musieli wykonywać zbędnej pracy, a stworzone przez nas rozwiązanie będzie idealnie dopasowane do naszych potrzeb.

DEFINICJA

Zdefiniujmy więc czym jest test framework? Ogólnie rzecz biorąc, jest to zestaw reguł, zaleceń oraz dyrektyw ustalających sposób tworzenia testów automatycznych. Dodatkowo test framework powinien przyspieszać samo pisanie testów, przy jednoczesnym uproszczeniu ich utrzymania, a co za tym idzie obniżeniem nakładów. Dobry test framework powinien z jednej strony zapewniać dobry interfejs do testowanego obiektu, z drugiej udostępnić łatwy i jednolity interfejs do tworzenia testów. Ponadto jego zadaniem jest obsługiwa odpowiedniego sposobu logowania.

ENKAPSULACJA

Podstawową kwestią jest, aby wyznaczyć sobie podstawowe cele, które nasz test framwork powinien posiadać, a także ustalić jego strukturę. Nie ulega wątpliwości, że najlepszym rozwiązaniem jest oparcie budowy test frameworku o moduły, dzięki czemu, zachowując interfejs, w dowolnym momencie będziemy mogli dokonywać zmiany wewnątrz modułów. Moduły powinny udostępniać takie metody, aby osoba, która będzie ich używała, nie musiała się interesować ich budową i zawartością.

DOKUMENTACJA

Każdy z tworzonych modułów powinien dawać jasne informacje na temat swojego działania oraz tego, jakie argumenty przyjmują i co zwracają konkretne metody. Dlatego też bardzo istotne jest, aby każdy moduł był odpowiednio opisany. W tym celu polecam wykorzystać reStructuredText Docstring Format, który jest opisany w PEP287. Dzięki temu będziemy w stanie automatycznie stworzyć dokumentację.

KONFIGURACJA

Kolejną ważną cechą frameworku do testów jest jego konfigurowalność. Opcje, które możemy chcieć w przyszłości zmienić, warto przenieść konfiguracji. Przykładowymi wpisami mogą być: prekonfiguracja urządzeń, poziomy logowania czy ustawienia różnych progów, lub statusów. Dobrą praktyką jest umieszczenie takich konfiguracji w odrębnym pliku. Może to być zarówno plik ini, json czy plik zawierający dane w czystym Pythonie.

DEKORACJA

Jeśli korzystamy z Pythona, większość powtarzających się czynności możemy umieścić w tak zwanych dekoratorach, dodatkowo przy korzystaniu z pyTesta możemy w tym celu wykorzystać fixture’y. Jeśli korzystamy z dowolnego innego jeżyka programowania czy języka skryptowego, warto zainteresować się oferowanymi przez niego możliwościami. Dzięki temu nasz kod stanie się bardziej czytelny i przejrzysty, a co za tym idzie łatwiejszy w utrzymaniu.

UDOGODNIENIA

Podczas pisania testów automatycznych z wykorzystaniem framwork’a, z pewnością natrafimy na wiele brakujących funkcji, takich jak wszelkiego rodzaju konwersje, przeliczenia, czy innych ułatwiających późniejsze pisanie testów. Swoje miejsce powinny one znaleźć jak najbardziej w test framework’u, w części z udogodnieniami. Podobnie jak jego głowna część, powinny zostać odpowiednio opisane.

METRYKI

Na zakończenie może kilka słów o metrykach jakości test framework’u. Z mojej perspektywy najlepszym wyznacznikiem jakości test frameworku jest stosunek liczby pisanych testów z wykorzystaniem frameworku i bez niego. Dlatego też, jeśli pisaliśmy wcześniej pięć testów na tydzień, natomiast po wdrożeniu test frameworku liczba ta wzrosła do kilkukrotnie — myślę, że możemy być zadowoleni z efektów. Oczywiście jest tutaj pewne uproszczenie, gdyż wszystko zależy od kontekstu projektu. Jasnym jest, że jeśli test framework jest tworzony pod pojedynczy projekt, to czas jego tworzenia oraz czas pisania automatycznych test case’ów z jego wykorzystaniem musi być krótszy niż czas tworzenia test case’ów bez test framework’a. Sytuacja jest inna w przypadku tworzenia framework’a dla wielu projektów, gdzie możemy poświęcić znacznie więcej czasu na jego stworzenie.

Oczywiście przedstawione powyżej cechy są w mojej opinii podstawowymi, którymi powinien się odznaczać każdy test framework. Nic nie stoi na przeszkodzie, aby umieścić w nim wszystko, co tylko potrzebujemy, aby uprościć tworzenie oraz wykonywanie naszych testów.

Dodaj komentarz