JavaRush /Курси /Модуль 4: FastAPI /Встановлення та налаштування Pytest для FastAPI

Встановлення та налаштування Pytest для FastAPI

Модуль 4: FastAPI
Рівень 5 , Лекція 1
Відкрита

Щоб почати тестувати наші FastAPI-додатки, спочатку потрібно переконатися, що у нас встановлений Pytest. Якщо ви його ще не встановлювали… то нічого — це легко виправити. Використовуємо стандартний pip:

pip install pytest

Після встановлення Pytest буде доступний як команда в терміналі. Щоб переконатися, що все працює, виконайте:

pytest --version

Ви побачите щось на кшталт:

pytest 8.x.x

Вітаю, перший крок зроблено! 🎉

Тепер треба встановити ще одну важливу бібліотеку для тестування FastAPI-додатків: httpx, яка буде використовуватися разом з TestClient з FastAPI.

pip install httpx

Тепер у нас є все необхідне для тестування. Давай налаштуємо проєкт.


🏗️ Налаштування тестового оточення

Щоб тести в проєкті не перетворилися на хаос (і щоб колеги припинили пошепки називати ваш код "спагетті"), важливо їх правильно організувати. У корені FastAPI-проєкту створіть каталог tests:

my_fastapi_project/
├── app/
│   ├── main.py
│   ├── routes.py
│   └── ...
├── tests/
│   ├── __init__.py
│   ├── test_main.py
│   └── ...
├── requirements.txt
└── ...

Ця папка буде містити всі ваші тести. Файл __init__.py потрібен для того, щоб Python вважав папку модулем (так-так, це важливо, навіть якщо ніхто точно не знає, навіщо він там потрібен).

Перший тестовий файл

Створімо файл test_main.py у папці tests:

# tests/test_main.py

def test_example():
    assert 1 + 1 == 2  # Проста перевірка, щоб переконатися, що Pytest працює

Тепер запустимо Pytest командою:

pytest

Якщо все налаштовано правильно, ви побачите зелене повідомлення приблизно такого виду:

=========================== test session starts ===========================
collected 1 item                                                              

tests/test_main.py .                                                   [100%]

============================ 1 passed in 0.02s =============================

Вітаю, ви щойно запустили свій перший тест! 🎉 Поки що це банальна перевірка, але далі буде цікавіше.


Налаштування конфігурації Pytest

За допомогою Pytest можна налаштовувати поведінку тестів через файл конфігурації. У корені проєкту створіть файл pytest.ini:

# pytest.ini
[pytest]
addopts = -v
testpaths = tests
  • addopts = -v вмикає "детальний режим" запуску тестів (verbose), щоб ви могли бачити більше інформації про те, що відбувається.
  • testpaths = tests вказує, що всі тести знаходяться в папці tests.

Тепер запустіть Pytest ще раз і зверніть увагу на детальніший вивід:

tests/test_main.py::test_example PASSED                                [100%]

Набагато приємніше бачити назву тесту, правда?


Використання фікстур у Pytest

Фікстури — це потужна фішка Pytest. Вони дозволяють підготувати тестове оточення перед запуском тестів. Наприклад, для FastAPI ми будемо використовувати фікстуру для створення клієнта TestClient.

Оновимо файл test_main.py:

from fastapi.testclient import TestClient
from app.main import app
import pytest

# Створення фікстури клієнта
@pytest.fixture
def client():
    return TestClient(app)

# Використання фікстури в тесті
def test_root(client):
    response = client.get("/")
    assert response.status_code == 200
    assert response.json() == {"message": "Hello World"}

Що тут відбувається:

  1. Імпортуємо TestClient з FastAPI і створюємо фікстуру client.
  2. Фікстура повертає клієнта, який буде використовуватися для надсилання запитів до нашого додатку.
  3. У тесті test_root ми використовуємо цю фікстуру як параметр функції. Pytest автоматично передасть client у тест.

Налаштування CI/CD для тестів

Хоч ми заглибимося в CI/CD пізніше, корисно налаштувати автоматичний запуск тестів на етапі розробки. Наприклад, можна додати команду для запуску тестів у GitHub Actions:

Створіть файл .github/workflows/ci.yml:

name: CI

on:
  push:
    branches:
      - main
  pull_request:

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Set up Python
        uses: actions/setup-python@v2
        with:
          python-version: 3.12

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt
          pip install pytest httpx

      - name: Run tests
        run: pytest

Тепер щоразу, коли ви пушите зміни в main-гілку (або відкриваєте pull request), GitHub буде автоматично запускати ваші тести.


Де можуть виникнути проблеми?

  1. Якщо Pytest не запускається, переконайтеся, що пакет встановлений і видно в вашому оточенні (pytest --version).
  2. Переконайтеся, що тести розміщені в папці tests і мають імена, що починаються з test_.
  3. Якщо додаток недоступний для тестів, перевірте, чи правильно передано екземпляр FastAPI-додатка (from app.main import app).

Тепер ваш FastAPI-додаток готовий не тільки працювати, але й бути протестованим (а отже — більш стабільним). На наступній лекції ми почнемо тестувати реальні ендпоінти, починаючи з GET-запитів. Побачимося! 🚀

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ