Знаешь ли синтаксис запросов к БД для задач тестирования?

Ответ

Да, я уверенно владею SQL и активно применяю его в тестировании для:

  1. Проверки состояния данных после тестовых действий: Например, после создания заказа через UI проверяю, что соответствующая запись появилась в таблице orders с правильным статусом.
  2. Подготовки и очистки тестовых данных: Перед запуском теста вставляю необходимые записи, а после — удаляю созданные данные, чтобы обеспечить изоляцию тестов.
  3. Верификации сложной бизнес-логики, которую проще проверить прямым запросом, чем через интерфейс приложения.

Основные операции, которые я часто использую:

  • SELECT с JOIN для проверки связей:
    -- Проверка, что заказ пользователя содержит конкретный товар
    SELECT o.id, u.email, p.name
    FROM orders o
    JOIN users u ON o.user_id = u.id
    JOIN order_items oi ON o.id = oi.order_id
    JOIN products p ON oi.product_id = p.id
    WHERE o.id = 100 AND p.sku = 'SKU123';
  • INSERT для подготовки данных:
    INSERT INTO test_users (username, email, is_active)
    VALUES ('test_user_001', 'test@example.com', TRUE);
  • UPDATE для изменения состояния (например, эмуляции внешнего события):
    -- Эмуляция успешного платежа от платежного шлюза
    UPDATE payments SET status = 'SUCCESS', processed_at = NOW() WHERE order_id = 100;
  • DELETE для очистки (часто в связке с транзакциями или через teardown-скрипты):
    DELETE FROM audit_log WHERE created_at < CURRENT_DATE - INTERVAL '7 days';

    Я также работаю с агрегатными функциями (COUNT, SUM), подзапросами и понимаю важность транзакций для целостности данных во время тестов.

Ответ 18+ 🔞

А, SQL? Да я с этой штукой на короткой ноге, как сосед с соседом по даче. В тестировании без него — вообще никуда, это ж как молоток у плотника, базовый инструмент. Использую его на полную катушку, в основном вот для чего:

  1. Проверка, что там в базе натворилось после моих тестовых телодвижений. Ну, например, накликал я в интерфейсе создание нового заказа. А потом лезу прямо в базу — SELECT * FROM orders WHERE id = ... — и смотрю, записалась ли эта поебень, и все ли поля на месте, особенно статус. Доверия ебать ноль к одному только UI, надо всё перепроверять.
  2. Подготовка и зачистка полигона. Перед тестом надо сцену подготовить — впихнуть в базу нужного тестового юзера, товары какие-то. INSERT — и поехали. А после теста — DELETE, чтобы следов не осталось и следующий тест не наебнулся на старых данных. Чистота — залог изоляции, как говорится.
  3. Верификация всякой хитрожопой бизнес-логики. Иногда проще одним хитрым запросом всё проверить, чем десять раз по интерфейсу тыкать. Логика начисления бонусов, связь сущностей — всё это в SQL видно как на ладони.

Что я обычно делаю, так это:

  • SELECT с JOIN — чтобы связать всё со всем и убедиться, что связи не хуйовые.
    -- Смотрю, реально ли в заказе юзера тот самый товар, который я добавил
    SELECT o.id, u.email, p.name
    FROM orders o
    JOIN users u ON o.user_id = u.id
    JOIN order_items oi ON o.id = oi.order_id
    JOIN products p ON oi.product_id = p.id
    WHERE o.id = 100 AND p.sku = 'SKU123';
  • INSERT — для подкидывания данных. Создал юзера test_user_001 — и сразу у него is_active = TRUE, чтобы не ждать писем с подтверждением, времени нет.
  • UPDATE — чтобы сэмулировать какое-то событие. Например, платёжная система как бы ответила "успех". Запускаю апдейт статуса платежа — и смотрю, как моё приложение ёпта среагирует.
  • DELETE — для зачистки. Особенно всяких логов, которые за неделю накапливаются овердохуища.

Агрегатные функции (COUNT, SUM), подзапросы — это само собой. И про транзакции не забываю, когда нужно несколько операций сделать атомарно, чтобы в случае пиздеца ничего не поломалось. В общем, SQL для тестировщика — это не просто строчки в консоли, а прям продолжение рук, без него чувствуешь себя слепым.