0Pricing
Python Academy · Lekcja

Pisanie pierwszych testów pytest

Proszę zrozumieć wykrywanie testów, instrukcje assert i strukturę testów.

Pisanie pierwszych testów pytest to bezpłatna lekcja Python Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Python Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Python Academy zawiera 4 lekcji w sumie.

Instalowanie pytest

Proszę zainstalować pytest za pomocą pip. Nie wymaga on obowiązkowej konfiguracji — automatycznie wykrywa testy.

# pip install pytest

# Run all tests
# pytest

# Run a specific file
# pytest test_math.py

Prosta funkcja testowa

pytest zbiera każdą funkcję, której nazwa zaczyna się od test_. Należy używać zwykłych instrukcji assert — pytest przepisuje je, aby zapewnić szczegółowy wynik.

# test_math.py
def add(a, b):
    return a + b

def test_add():
    assert add(2, 3) == 5

def test_add_negative():
    assert add(-1, 1) == 0

Pliki testów i ich wykrywanie

pytest wykrywa pliki testów o nazwach test_*.py lub *_test.py, a także zbiera funkcje o nazwach test_* i klasy o nazwach Test*.

tests/
    test_utils.py
    test_models.py
    conftest.py   # shared fixtures

Grupowanie testów w klasach

Powiązane testy należy grupować w klasie z prefiksem Test. Nie jest wymagane użycie unittest.TestCase.

class TestCalculator:
    def test_add(self):
        assert 1 + 1 == 2

    def test_multiply(self):
        assert 3 * 4 == 12

Testowanie wyjątków

Należy używać pytest.raises jako menedżera kontekstu, aby sprawdzać, czy zgłaszane są konkretne wyjątki.

import pytest

def divide(a, b):
    if b == 0:
        raise ZeroDivisionError("cannot divide by zero")
    return a / b

def test_divide_by_zero():
    with pytest.raises(ZeroDivisionError, match="cannot divide"):
        divide(10, 0)

Flaga -v

Uruchomienie pytest z opcją -v (tryb szczegółowy) pozwala wyświetlić nazwę każdego testu oraz informację, czy zakończył się powodzeniem, czy niepowodzeniem.

# pytest -v
# test_math.py::test_add PASSED
# test_math.py::test_add_negative PASSED

# Show print output too:
# pytest -v -s

Pomijanie testów

Do warunkowego pomijania testów należy używać @pytest.mark.skip lub @pytest.mark.skipif.

import pytest, sys

@pytest.mark.skip(reason="not implemented yet")
def test_future_feature():
    assert False

@pytest.mark.skipif(sys.platform == "win32", reason="Unix only")
def test_unix_only():
    assert True

Oznaczanie testów jako oczekiwanych niepowodzeń

@pytest.mark.xfail oznacza test, którego niepowodzenia się Państwo spodziewają. Test przechodzi, jeśli zakończy się niepowodzeniem, i wyświetla ostrzeżenie, jeśli niespodziewanie się powiedzie.

import pytest

@pytest.mark.xfail(reason="known bug #42")
def test_buggy():
    assert 1 == 2  # will fail, but that's expected

Przepisywanie instrukcji assert

pytest przepisuje instrukcje assert, aby wyświetlać wartości, które spowodowały niepowodzenie — jest to znacznie bardziej przydatne niż sam AssertionError.

def test_list_equal():
    result = [1, 2, 4]
    expected = [1, 2, 3]
    assert result == expected
# AssertionError:
#   assert [1, 2, 4] == [1, 2, 3]
#   At index 2 diff: 4 != 3

conftest.py

pytest automatycznie ładuje plik conftest.py. Należy umieszczać w nim współdzielone fixtures i wtyczki bez konieczności jawnego importowania.

# conftest.py
import pytest

@pytest.fixture
def sample_data():
    return {"key": "value"}

# Any test file in the same dir can use sample_data as a parameter

Uruchamianie podzbiorów testów

Opcja -k pozwala uruchamiać testy pasujące do wyrażenia słów kluczowych.

# Run tests containing "add"
# pytest -k "add"

# Run tests NOT containing "slow"
# pytest -k "not slow"

# Run a specific test
# pytest test_math.py::test_add

Szybkie sprawdzenie

Od jakiego prefiksu musi zaczynać się nazwa funkcji testowej pytest, aby została automatycznie wykryta?

Podsumowanie

pytest nie wymaga kodu pomocniczego: należy nadawać plikom nazwy test_*.py, funkcjom nazwy test_* i używać zwykłego assert. Do wyjątków należy używać pytest.raises, do trybu szczegółowego — -v, a do współdzielonych fixtures — conftest.py.

Często zadawane pytania

Czy lekcja „Pisanie pierwszych testów pytest” jest bezpłatna?

Tak — pełny tekst „Pisanie pierwszych testów pytest” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Python Academy, przejdź na CoddyKit PRO. Kurs Python Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Pisanie pierwszych testów pytest”?

Proszę zrozumieć wykrywanie testów, instrukcje assert i strukturę testów. Ćwiczysz Python Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Python Academy?

Nie wymagamy żadnego doświadczenia. Python Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Pisanie pierwszych testów pytest”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Python Academy?

Tak. Każda lekcja Python Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Pisanie pierwszych testów pytest
  2. Fixtures oraz konfiguracja i sprzątanie
  3. Parametryzacja i pokrycie testami
  4. Mockowanie za pomocą unittest.mock
← Powrót do Python Academy