Встречается на 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
интервью вопросы и ответы
