Встречается на 32% собеседований по QA Manual

Работал ли с БД

Да, я работал с базами данных (PostgreSQL, MySQL, SQLite) в контексте тестирования. Основные задачи включали проверку корректности данных после API-запросов, валидацию состояния БД между этапами тестов и подготовку тестовых данных. Я использовал как ORM (Django ORM, SQLAlchemy), так и сырые SQL-запросы, а также применял транзакции и фикстуры для изоляции тестов.

Как это работает

В тестировании БД используется для трёх целей:

  • Проверка данных: после выполнения API-запроса или бизнес-операции нужно убедиться, что данные в БД соответствуют ожидаемым. Например, после создания заказа проверить, что в таблице orders появилась запись с правильным статусом.
  • Подготовка данных: перед тестом необходимо создать предусловия — вставить тестовые записи, очистить таблицы или сбросить счётчики.
  • Изоляция тестов: чтобы тесты не влияли друг на друга, используют транзакции с откатом или фикстуры, которые очищают и наполняют БД перед каждым тестом.

Пример

Пример проверки данных после API-запроса с использованием SQLAlchemy:

python
from sqlalchemy import create_engine, text

def test_db_data():
    engine = create_engine("postgresql://user:pass@localhost/db")
    with engine.connect() as conn:
        result = conn.execute(text("SELECT status FROM orders WHERE id = 123"))
        assert result.fetchone()[0] == "completed"

Здесь после выполнения API-запроса, который должен обновить заказ, мы напрямую обращаемся к БД и проверяем, что статус заказа изменился на completed. Такой подход позволяет выявить ошибки, которые не видны на уровне API-ответа.

Подводные камни

  • Синхронизация с API: данные в БД могут обновляться асинхронно, поэтому после запроса нужно добавить ожидание или повторные попытки проверки.
  • Очистка данных: если тест создаёт записи, их нужно удалять после выполнения, иначе они загрязнят БД и повлияют на другие тесты. Для этого используют фикстуры с teardown или транзакции с откатом.
  • Разные СУБД: синтаксис SQL и поведение транзакций отличаются между PostgreSQL, MySQL и SQLite. Код, работающий на одной СУБД, может не работать на другой.
  • ORM vs сырой SQL: ORM удобен для простых операций, но для сложных запросов или проверки производительности лучше использовать сырой SQL.

Когда использовать

Работа с БД в тестах обязательна, когда:

  • Нужно проверить, что данные корректно сохраняются после операций создания, обновления или удаления.
  • Тест зависит от состояния БД, которое нужно подготовить заранее.
  • Требуется убедиться, что бизнес-логика правильно обрабатывает данные на уровне хранения.

Коротко

  • БД в тестах используется для проверки данных, подготовки предусловий и изоляции тестов.
  • Для работы с БД применяют ORM (SQLAlchemy, Django ORM) и сырые SQL-запросы.
  • Важно очищать тестовые данные и учитывать особенности конкретной СУБД.
  • Пример: после API-запроса выполнить SQL-запрос и проверить ожидаемое значение в БД.
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы