Konteneryzacja testów API – automatyzacja z Pytest i Dockerem

Automatyczne

Loading

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.txt z 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:

  1. Po pierwsze, aktualizuje menedżera pakietów pip (ten krok można pominąć, jeśli mamy pewność, że jego wersja jest wystarczająco aktualna),
  2. 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.

Autor
Honorata Łyczak 🐞
Linkedin