Testowanie aplikacji w Django
Testowanie to kluczowy element procesu tworzenia oprogramowania – pozwala upewnić się, że aplikacja działa zgodnie z założeniami i ułatwia utrzymanie kodu w przyszłości. Django posiada wbudowane wsparcie dla testów jednostkowych oparte na standardowym module Pythona unittest, a także dobrze współpracuje z frameworkiem pytest.
1. Testy jednostkowe w Django
Struktura testów
- Testy w Django umieszczamy zazwyczaj w pliku
tests.pywewnątrz aplikacji lub w osobnym katalogutests/. - Każdy test jest klasą dziedziczącą po
django.test.TestCase, która zapewnia m.in.:- izolowaną bazę danych dla każdego zestawu testów,
- narzędzia do testowania widoków (np.
Client), - wygodne asercje (
assertContains,assertRedirects,assertQuerysetEqual).
Przykład najprostszego testu
Uruchamianie testów:
2. Testy widoków, modeli i formularzy
2.1. Testowanie modeli
Modele testujemy, sprawdzając działanie metod i poprawność zapisu danych.
2.2. Testowanie widoków
Do testowania widoków używa się Client – wirtualnej przeglądarki, która pozwala wysyłać żądania HTTP do aplikacji.
2.3. Testowanie formularzy
Sprawdzamy, czy walidacja działa poprawnie i czy dane zapisują się w bazie.
3. Użycie pytest + pytest-django (opcjonalnie)
Chociaż Django korzysta z unittest, wielu programistów preferuje pytest, który jest prostszy, bardziej elastyczny i oferuje bogatszy ekosystem pluginów.
Instalacja
W pliku pytest.ini dodajemy konfigurację:
Pisanie testów z pytest
Nie trzeba używać klas – wystarczą funkcje:
Zalety pytest w Django
- Mniej kodu (nie trzeba pisać klas).
- Bardziej czytelne asercje (
assert a == bzamiastself.assertEqual(a, b)). - Wiele pluginów (np. raporty HTML, test coverage).
- Możliwość używania fixture do przygotowywania danych testowych.