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.pyProsta 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) == 0Pliki 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 fixturesGrupowanie 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 == 12Testowanie 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 -sPomijanie 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 TrueOznaczanie 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 expectedPrzepisywanie 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 != 3conftest.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 parameterUruchamianie 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_addSzybkie 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
- Pisanie pierwszych testów pytest
- Fixtures oraz konfiguracja i sprzątanie
- Parametryzacja i pokrycie testami
- Mockowanie za pomocą unittest.mock