Izolowanie testów za pomocą testowej bazy danych
Używaj tymczasowej bazy danych dla każdego uruchomienia testów.
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'] = TrueTworzenie ś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. 🗄️
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
- Klient testowy i fixture'y
- Sprawdzanie tras i JSON-a
- Izolowanie testów za pomocą testowej bazy danych
- Testowanie uwierzytelnionych endpointów