Flask Academy · Lekcja

Izolowanie testów za pomocą testowej bazy danych

Używaj tymczasowej bazy danych dla każdego uruchomienia testów.

Lekcja 3 z 413 kroki

Izolowanie testów za pomocą testowej bazy danych to bezpłatna lekcja Flask Academy na CoddyKit. To lekcja 3 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 Flask Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Flask Academy zawiera 4 lekcji w sumie.

Dlaczego należy odizolować bazę danych

Testy nigdy nie powinny korzystać z prawdziwych danych. Baza testowa zapewnia czyste środowisko przy każdym uruchomieniu, dzięki czemu jeden test nie uszkodzi danych innego testu ani rekordów produkcyjnych.

Używanie tymczasowej bazy SQLite

Najprostszym wyborem jest baza danych SQLite w pamięci. Istnieje tylko w pamięci RAM i znika natychmiast po zakończeniu procesu testowego.

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:'

Włączanie konfiguracji testowej

Przed uruchomieniem testów należy ustawić TESTING na True. Wyłącza to przechwytywanie błędów, dzięki czemu wyjątki są wyraźnie widoczne w wynikach.

app.config['TESTING'] = True

Tworzenie świeżego schematu

W kontekście aplikacji należy wywołać db.create_all(). Funkcja tworzy wszystkie tabele na podstawie modeli, dzięki czemu każde uruchomienie testów zaczyna się od pustego schematu.

with app.app_context():
    db.create_all()

Usuwanie danych po testach

Po zakończeniu testu należy wywołać db.drop_all(), aby usunąć wszystkie tabele. Gwarantuje to, że kolejne uruchomienie nie odziedziczy pozostałych rekordów.

with app.app_context():
    db.drop_all()

Umieszczanie konfiguracji w fixture

Konfigurację początkową i końcową należy opakować w jeden fixture. Kod przed yield tworzy schemat, a kod po nim poprawnie wszystko usuwa.

@pytest.fixture
def app_db():
    db.create_all()
    yield
    db.drop_all()

Dodawanie przykładowych danych

Wiele testów potrzebuje znanego rekordu do odczytu. Należy dodać rekord w fixture, a następnie wykonać na nim commit, aby test rozpoczynał się ze stanem, który można przewidzieć.

db.session.add(User(name='Ada'))
db.session.commit()

Dlaczego świeży stan ma znaczenie

Testy powinny przechodzić w dowolnej kolejności. Izolacja oznacza, że każdy test widzi te same dane początkowe, więc wyniki nigdy nie zależą od wcześniejszych testów.

Wycofywanie zmian między testami

Alternatywą dla ponownego tworzenia tabel jest rollback. Każdy test można opakować w transakcję, a następnie ją wycofać, uzyskując szybko czysty stan.

db.session.rollback()

Oddzielanie konfiguracji testowej

Ustawienia testowe należy przechowywać w osobnej klasie TestConfig. Fabryka ładuje ją tylko podczas testów, nigdy w środowisku deweloperskim ani produkcyjnym.

class TestConfig:
    TESTING = True
    SQLALCHEMY_DATABASE_URI = 'sqlite:///:memory:'

Nigdy nie testuj na produkcji

Zawsze należy sprawdzić, czy URI wskazuje na bazę testową. Skierowanie testów na dane produkcyjne to najszybszy sposób na utratę prawdziwych rekordów.

Szybkie sprawdzenie

Testy nie powinny nigdy uszkadzać prawdziwych danych. Z jakiej bazy danych należy skorzystać?

Podsumowanie: baza testowa

Tworzy Pan czystą bazę testową, dodaje znane dane, a następnie usuwa ją po zakończeniu testów. Teraz testy są szybkie, powtarzalne i bezpieczne. 🗄️

Bezpłatny start

Ucz się Python dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
30
Lekcje
120

Często zadawane pytania

Czy lekcja „Izolowanie testów za pomocą testowej bazy danych” jest bezpłatna?

Tak — pełny tekst „Izolowanie testów za pomocą testowej bazy danych” 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 Flask Academy, przejdź na CoddyKit PRO. Kurs Flask Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Izolowanie testów za pomocą testowej bazy danych”?

Używaj tymczasowej bazy danych dla każdego uruchomienia testów. Ćwiczysz Flask 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ąć Flask Academy?

Nie wymagamy żadnego doświadczenia. Flask 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 3 z 4.

Ile czasu zajmuje lekcja „Izolowanie testów za pomocą testowej bazy danych”?

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 Flask Academy?

Tak. Każda lekcja Flask 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. Klient testowy i fixture'y
  2. Sprawdzanie tras i JSON-a
  3. Izolowanie testów za pomocą testowej bazy danych
  4. Testowanie uwierzytelnionych endpointów
← Powrót do Flask Academy