Pytest: pierwsze kroki
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.
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 testy
pi@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.0
rootdir: /home/pi/tests
collected 2 items
test_przyklad.py .F [100%]
=================================== FAILURES ===================================
_________________________________ test_failure _________________________________
def test_failure():
"""
Test sprawdza czy dodanie jeden do cztery daje sześć.
"""
> assert dodaj_jeden(4) == 6
E assert 5 == 6
E + 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.