Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: pytest, fixture, database, setup, teardown

Как реализовать фикстуру с setup/teardown для БД?

Этот вопрос объясняет, как создать фикстуру в pytest для управления состоянием базы данных перед и после тестов.

Короткий ответ

Используйте фикстуру с yield для разделения кода setup и teardown. Перед тестом создаётся соединение с БД, после — закрывается. Для этого подходят библиотеки pytest-postgresql или кастомные решения с SQLAlchemy.

Длинный ответ

1. Фикстура с yield:

import pytest
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

@pytest.fixture
def db_session():
    # Setup: создание соединения
    engine = create_engine("postgresql://user:pass@localhost/test_db")
    Session = sessionmaker(bind=engine)
    session = Session()

    yield session  # Тест использует session здесь

    # Teardown: закрытие соединения
    session.close()
    engine.dispose()

2. Пример теста:

def test_user_creation(db_session):
    user = User(name="Alice")
    db_session.add(user)
    db_session.commit()
    assert db_session.query(User).count() == 1

3. Альтернатива с contextlib:

from contextlib import contextmanager

@contextmanager
def temp_db():
    engine = create_engine("sqlite:///:memory:")
    Base.metadata.create_all(engine)
    yield engine
    Base.metadata.drop_all(engine)

Вывод:
Фикстуры с yield — самый чистый способ управлять ресурсами в pytest.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    1

  • Сложность:

    5

Навыки

  • Python

    Python

Ключевые слова

#pytest

#fixture

#database

#setup

#teardown

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.