Ответ
Да, я уверенно владею SQL и активно применяю его в тестировании для:
- Проверки состояния данных после тестовых действий: Например, после создания заказа через UI проверяю, что соответствующая запись появилась в таблице
ordersс правильным статусом. - Подготовки и очистки тестовых данных: Перед запуском теста вставляю необходимые записи, а после — удаляю созданные данные, чтобы обеспечить изоляцию тестов.
- Верификации сложной бизнес-логики, которую проще проверить прямым запросом, чем через интерфейс приложения.
Основные операции, которые я часто использую:
- 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? Да я с этой штукой на короткой ноге, как сосед с соседом по даче. В тестировании без него — вообще никуда, это ж как молоток у плотника, базовый инструмент. Использую его на полную катушку, в основном вот для чего:
- Проверка, что там в базе натворилось после моих тестовых телодвижений. Ну, например, накликал я в интерфейсе создание нового заказа. А потом лезу прямо в базу —
SELECT * FROM orders WHERE id = ...— и смотрю, записалась ли эта поебень, и все ли поля на месте, особенно статус. Доверия ебать ноль к одному только UI, надо всё перепроверять. - Подготовка и зачистка полигона. Перед тестом надо сцену подготовить — впихнуть в базу нужного тестового юзера, товары какие-то.
INSERT— и поехали. А после теста —DELETE, чтобы следов не осталось и следующий тест не наебнулся на старых данных. Чистота — залог изоляции, как говорится. - Верификация всякой хитрожопой бизнес-логики. Иногда проще одним хитрым запросом всё проверить, чем десять раз по интерфейсу тыкать. Логика начисления бонусов, связь сущностей — всё это в 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 для тестировщика — это не просто строчки в консоли, а прям продолжение рук, без него чувствуешь себя слепым.