Работали ли вы с базами данных в контексте тестирования?

Ответ

Да, в своей работе QA Automation инженера я регулярно взаимодействую с базами данных. Основные задачи включают:

  • Валидацию данных: Проверка корректности записей в БД после выполнения API-запросов или действий в UI.
  • Подготовку тестовых данных: Наполнение базы специфичными данными для воспроизведения различных сценариев (например, создание пользователя с определённым статусом).
  • Очистку данных: Приведение БД в исходное состояние после тестов для обеспечения изоляции и повторяемости.
  • Проверку состояний: Контроль изменений в данных между этапами выполнения бизнес-процесса.

Я использую как сырые SQL-запросы, так и ORM (например, SQLAlchemy в Python). Для изоляции тестов применяю транзакции или фикстуры, которые откатывают изменения.

Пример проверки данных с помощью SQLAlchemy:

from sqlalchemy import create_engine, text

def test_order_status():
    # Подключение к тестовой БД
    engine = create_engine("postgresql://test:test@localhost/test_db")
    with engine.connect() as conn:
        # Выполняем запрос для проверки статуса заказа
        result = conn.execute(
            text("SELECT status FROM orders WHERE order_id = :order_id"),
            {"order_id": 789}
        )
        db_status = result.fetchone()[0]
        # Сравниваем с ожидаемым значением
        assert db_status == "SHIPPED", f"Expected 'SHIPPED', got '{db_status}'"

Ответ 18+ 🔞

А, работа с базами данных в автоматизации? Да это, бля, хлеб насущный, без этого нихуя не проверишь. Чисто технически — да, постоянно с этим сталкиваюсь, иначе как ты поймёшь, что твой запрос на бэкенде реально что-то поменял, а не просто красивое сообщение в ответ пришло?

Основные задачи, если по-простому:

  • Валидация данных: Вот нажал ты кнопку в интерфейсе, отправил запрос через API — и как узнать, что всё записалось как надо? Правильно, лезть в базу и смотреть, не накосячил ли кто. Проверяешь, что запись появилась, обновилась или удалилась именно так, как задумано.
  • Подготовка тестовых данных: Это вообще святое. Нужно протестить сценарий с пользователем, у которого пять просроченных заказов? Ну так создай ему эти заказы прямо в базе, ёпта! Или настрой специфичные флаги. В UI это делать — овердохуища времени убьёшь, а одним скриптом или запросом — раз и готово.
  • Очистка данных: А вот это, чувак, критически важно, иначе твои тесты друг другу будут мешать. Запустил один — он создал юзера. Запустил второй, который рассчитывает на чистую базу — он, естественно, свалится. Поэтому после каждого теста надо за собой убирать, как в приличном доме. Откатываешь транзакции или удаляешь созданное.
  • Проверка состояний: Следишь за тем, как данные меняются по ходу дела. Сначала заказ в статусе "новый", потом "оплачен", потом "отправлен". И каждый раз нужно заглянуть в базу и убедиться, что переход сработал, а не завис где-то посередине.

Инструменты? Да кто во что горазд. Иногда проще написать прямой SQL-запрос — быстро и наглядно. А иногда, особенно в больших проектах, удобнее через ORM типа SQLAlchemy работать. Это как отвёртка против шуруповёрта — и то, и то нужно, просто для разных случаев.

Вот, смотри, как это примерно выглядит на практике:

from sqlalchemy import create_engine, text

def test_order_status():
    # Подключаемся к нашей тестовой базе
    engine = create_engine("postgresql://test:test@localhost/test_db")
    with engine.connect() as conn:
        # Тыкаем в базу запросом: "Эй, дай-ка статус заказа номер 789"
        result = conn.execute(
            text("SELECT status FROM orders WHERE order_id = :order_id"),
            {"order_id": 789}
        )
        db_status = result.fetchone()[0]
        # А теперь сравниваем: то, что в базе, совпадает с тем, что мы ждём?
        assert db_status == "SHIPPED", f"Expected 'SHIPPED', got '{db_status}'"

Короче, без прямого общения с базой автоматизатор — как слесарь без разводного ключа. Вроде и инструментов много, но самый главный, блядь, забыл дома. Доверия к таким тестам — ноль ебать.