![]()
Konteneryzacja testów API pozwala tworzyć niezawodne i powtarzalne środowiska testowe. W tym artykule pokażę, jak wykorzystać Pytest i Dockera do pełnej automatyzacji tego procesu.
Wpis pomoże budować bardziej niezawodne, łatwiej skalowalne środowiska testowe. Docker umożliwia uruchamianie testów w całkowicie odizolowanym środowisku – bez konieczności instalowania bibliotek na lokalnej maszynie.
Wprowadzenie
Automatyzacja testów API pozwala szybko wykrywać regresje, sprawdzać zgodność z wymaganiami i utrzymywać wysoką jakość usług. Jednak im więcej testujemy, tym większe znaczenie ma powtarzalność i niezawodność środowiska testowego.
Ten problem rozwiązuje Docker.
W tym artykule pokażę Ci od podstaw, jak w kilku krokach skonteneryzować testy API napisane w Pytest.
Dzięki konteneryzacji testów zyskujesz:
- możliwość uruchamiania ich niezależnie od systemu operacyjnego
- eliminację problemów związanych z wersjami bibliotek
- łatwą integrację z pipeline’em CI/CD
Wymagania techniczne przed rozpoczęciem
Zanim przejdziesz do konteneryzacji testów, upewnij się, że masz zainstalowane:
- Docker – najlepiej w najnowszej stabilnej wersji: Instrukcja
Konteneryzacja testów API – krok po kroku
1. Przygotuj projekt z testami
Upewnij się, że w katalogu projektu znajdują się:
- testy – zorganizowane w katalogach lub zapisane jako pojedyncze pliki
- plik
requirements.txtz zależnościami conftest.py
Struktura katalogu może wyglądać tak:
api-tests/
├── requirements.txt
└── tests/
├── test_example.py
└── conftest.py
2. Stwórz plik Dockerfile
W głównym katalogu projektu utwórz plik Dockerfile z poniższą zawartością:
FROM python:3.12
WORKDIR /api-tests
COPY . /api-tests
RUN pip install --upgrade pip \
&& pip install -r requirements.txt
CMD ["pytest", "--api-url", "https://restful-booker.herokuapp.com/booking"]
Poniżej znajduje się wyjaśnienie poszczególnych poleceń użytych w pliku Dockerfile, który tworzysz w głównym katalogu projektu:
FROM python:3.12
To polecenie określa bazowy obraz, na którym będzie oparty Twój kontener.
W tym przypadku jest to oficjalny obraz Dockera z Pythonem w wersji 3.12.
Dzięki temu masz od razu zainstalowane środowisko Pythona.
WORKDIR /api-tests
Na tym etapie ustawiany jest katalog roboczy w kontenerze na /api-tests.
Od tego momentu wszystkie kolejne polecenia będą wykonywane względem tego katalogu.
Jeśli natomiast katalog jeszcze nie istnieje, zostanie automatycznie utworzony.
COPY . /api-tests
W pierwszej kolejności, polecenie kopiuje wszystkie pliki i foldery z bieżącego katalogu (na Twoim komputerze) do katalogu /api-tests w kontenerze.
Co istotne, plik .dockerignore pozwala w tym procesie wykluczyć niepotrzebne zasoby, dzięki czemu do obrazu trafiają tylko wymagane pliki.
RUN pip install --upgrade pip \
&& pip install -r requirements.txt
To polecenie wykonuje dwie operacje:
- Po pierwsze, aktualizuje menedżera pakietów
pip(ten krok można pominąć, jeśli mamy pewność, że jego wersja jest wystarczająco aktualna), - Następnie, instaluje wszystkie zależności wymienione w pliku
requirements.txt.
Warto dodać, że znak \ umożliwia przeniesienie polecenia do nowej linii, a && sprawia, że druga komenda wykona się tylko wtedy, gdy pierwsza zakończy się sukcesem.
CMD ["pytest", "--api-url", "https://restful-booker.herokuapp.com/booking"]
W praktyce oznacza to uruchomienie pytest z określonymi argumentami podczas startu kontenera:
pytest— uruchamia testy,--api-url— przekazuje adres testowanego API (https://restful-booker.herokuapp.com/booking) jako argument do testów.
3. Stwórz .dockerignore
Plik .dockerignore, podobnie jak .gitignore, pozwala wykluczyć zbędne pliki i katalogi z procesu budowania obrazu. W rezultacie, niepotrzebne zasoby nie są kopiowane do kontenera, co z jednej strony przyspiesza budowanie, a z drugiej — zmniejsza rozmiar końcowego obrazu.
Najczęściej pomijane elementy to między innymi:
- pliki tymczasowe,
- katalogi z buildami,
- dane środowiskowe i lokalne zależności, takie jak:
__pycache__/
*.pyc
.venv/
4. Zbuduj obraz Dockera
W terminalu, wejdź do folderu projektu i wpisz:
docker build -t api-tests .
To polecenie stworzy obraz kontenera o nazwie api-tests.
5. Konteneryzacja testów API – Uruchom testy w kontenerze
Aby uruchomić testy w kontenerze:
docker run --rm api-tests
Kontener zostanie uruchomiony, wykona testy i usunie się po zakończeniu (--rm).
7. Uruchamianie z własnym URL (opcjonalne)
Możesz nadpisać domyślny URL do API przy uruchamianiu:
docker run --rm api-tests pytest --api-url https://restful-booker.herokuapp.com/booking
8. Podsumowanie
Konteneryzacja testów API z użyciem Pytest i Dockera to prosty, a zarazem skuteczny sposób na zbudowanie niezawodnego, powtarzalnego i łatwego w utrzymaniu środowiska testowego.
Przede wszystkim, w artykule pokazałam, jak krok po kroku stworzyć Dockerfile, .dockerignore, a następnie zbudować obraz i uruchomić testy — zarówno z domyślnym adresem API, jak i z parametrem przekazanym dynamicznie.
Dzięki temu testy można bez trudu przenosić między różnymi środowiskami, zachowując jednocześnie pełną kontrolę nad ich uruchamianiem.
