Nie potrzebujemy tworzyć skomplikowanych warstw, czy konfiguracji, by rozpocząć pisanie testów w frameworku pytest. Oczywiście przy dużych i złożonych projektach jest to konieczne, ale tym przykładzie nie będziemy się tym zajmowali.
Pierwszy test
Zacznijmy od stworzenia folderu z testami, żeby nie robić bałaganu na naszej raspberry już od samego początku.
pi@raspberrypi:~# mkdir testypi@raspberrypi:~# cd testy
Gdy już jesteśmy w utworzonym folderze, przygotujmy nasz pierwszy test. Za pomocą edytora tekstu „nano” (możemy użyć dowolnego edytora), stworzymy plik zawierający testy. Plik ten powinien zawierać słowa „test” w nazwie.
pi@raspberrypi:~/tests $ nano test_przyklad.py
Zostaniemy przeniesieni do edytora nano. W otwartym pliku możemy dodawać nie tylko testy, ale każe metody w wykorzystywane później w tych testach.
def dodaj_jeden(x): return x + 1 def test_pass(): """ Test sprawdza czy dodanie jeden do cztery daje pięć. """ assert dodaj_jeden(4) == 5 def test_failure(): """ Test sprawdza czy dodanie jeden do cztery daje sześć. """ assert dodaj_jeden(4) == 6
Przeanalizujmy pokrótce powyższy kod. Napisaliśmy dwa testy, aby zobaczyć efekt testu, który zakończy się sukcesem i testu, który zakończy się porażką. Na początku funkcji widzimy opis funkcji w komentarzu. Stosowanie takich opisów, znacznie ułatwia pracę z testami, szczególnie po kilku miesiącach od ich napisania. Napisane powyżej testy są bardzo proste, ale pokażą ci, jak wyglądają wyniki sukcesów i porażek w pyteście. Aby zapisać plik, naciśnij Ctrl+x, a następnie zgódź się na modyfikację i zatwierdź nazwę pliku. Następnie używając komendy „pytest” włączymy wszystkie testy znajdujące się w folderze, w którym się znajdujemy.
pi@raspberrypi:~# pytest============================= test session starts ==============================platform linux -- Python 3.5.3, pytest-4.6.3, py-1.8.0, pluggy-0.12.0rootdir: /home/pi/testscollected 2 itemstest_przyklad.py .F [100%]=================================== FAILURES ===================================_________________________________ test_failure _________________________________def test_failure():"""Test sprawdza czy dodanie jeden do cztery daje sześć."""> assert dodaj_jeden(4) == 6E assert 5 == 6E + where 5 = dodaj_jeden(4)test_przyklad.py:16: AssertionError====================== 1 failed, 1 passed in 1.07 seconds ======================
Jak widzimy, pytest wykonał wszystkie nasze testy i w przypadku niepowodzenia pokazał, gdzie podczas testu wystąpił błąd. Było to możliwe dzięki użyciu funkcji „assert”. W momencie, gdy wynikiem przyrównania wartości jest „False” (czyli przyrównane wartości nie są takie same) oraz to przyrównanie znajduje się w assercji, pytest przerwie test i jeżeli istnieją inne testy, przejdzie do kolejnego. Na koniec w podsumowaniu dowiemy się, gdzie wystąpił błąd, ile mieliśmy testów, które zakończyły się sukcesem, errorerm, porażką lub zostały pominięte.
Użycie słowa „test” w nazwie pliku z testami jest opcjonalne, jednak jest to swego rodzaju feature pytesta. Gdy nie użyjemy w nazwie pliku słowa „test”, plik ten będzie uruchomiony jedynie, gdy wpiszemy „pytest /ścieżka/nazwa_pliku.py”. Jeżeli jednak użyjemy w nazwie słowo „test”, możemy uruchomić testy również, podając jedynie ścieżkę do folderu, gdzie się znajdują pliki z testami: „pytest /ścieżka/”, lub samego słowa pytest, jeżeli znajdujemy się w folderze z tymi plikami (tak jak zrobiliśmy to w przykładzie powyżej). Ta funkcjonalność daje nam możliwość selekcjonowania testów nie tylko po nazwach, ale też po folderach.
Już na pierwszy rzut oka widać jak prostym i użytecznym frameworkiem jest pytest.