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.

Pytest

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.

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.

close

Newsletter