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.py wewnątrz aplikacji lub w osobnym katalogu tests/.
  • 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 == b zamiast self.assertEqual(a, b)).
  • Wiele pluginów (np. raporty HTML, test coverage).
  • Możliwość używania fixture do przygotowywania danych testowych.