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 автоматически передаёт клиент в тест.

Настройка 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-запросов. Увидимся! 🚀

1
Задача
Модуль 4: FastAPI, 5 уровень, 1 лекция
Недоступна
Установка Pytest
Установка Pytest
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ