SQL в работе тестировщика

SQL в работе тестировщика

В этом уроке объединим всё изученное и разберём, как тестировщик применяет SQL в реальной работе: транзакции для безопасных манипуляций с данными, работа с инструментами и правила безопасности.


Транзакции

Транзакция — группа SQL-операций, которые выполняются как единое целое: либо все успешно, либо ни одна.

Зачем нужны транзакции тестировщику

Представьте: вы создаёте тестового пользователя и 3 заказа. После теста хотите вернуть базу в исходное состояние, не удаляя всё вручную по одному.

BEGIN;                    -- начать транзакцию

INSERT INTO users (name, email) VALUES ('Тест Транзакция', 'tx@test.com');
-- ... другие операции ...

ROLLBACK;                 -- отменить всё — база как будто ничего не было
-- или
COMMIT;                   -- зафиксировать всё изменения

Команды транзакции

КомандаДействие
BEGINНачать транзакцию
COMMITЗафиксировать все изменения
ROLLBACKОтменить все изменения с момента BEGIN
SAVEPOINT имяСоздать точку сохранения внутри транзакции
ROLLBACK TO SAVEPOINT имяОткатиться к точке сохранения

Паттерн: подготовка тестовых данных

BEGIN;

-- 1. Создать тестового пользователя
INSERT INTO users (name, email, is_active)
VALUES ('Тест Сценарий', 'scenario@test.com', true);

-- 2. Получить его id
-- (в клиенте DBeaver/psql: результат предыдущего INSERT виден в транзакции)
-- Используем подзапрос:
INSERT INTO orders (user_id, status, total)
SELECT id, 'pending', 1500
FROM users WHERE email = 'scenario@test.com';

INSERT INTO orders (user_id, status, total)
SELECT id, 'paid', 3000
FROM users WHERE email = 'scenario@test.com';

-- 3. Проверить результат
SELECT u.name, o.id, o.status, o.total
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE u.email = 'scenario@test.com';

-- Если всё верно: COMMIT
-- Если что-то не так: ROLLBACK
COMMIT;

Паттерн: тест с откатом

Этот паттерн позволяет выполнить тест и гарантированно вернуть базу в исходное состояние:

BEGIN;

-- Подготовка состояния
INSERT INTO users (name, email) VALUES ('Откатной тест', 'rollback@test.com');

-- ... здесь выполняете тест через UI или API ...
-- ... проверяете результаты через SELECT ...

-- Откат: убираем всё что создали
ROLLBACK;
-- База вернулась в исходное состояние

Это намного надёжнее, чем вручную помнить, что нужно удалить.


SAVEPOINT: частичный откат

Если транзакция большая, можно создать контрольные точки:

BEGIN;

INSERT INTO users (name, email) VALUES ('Тест 1', 't1@test.com');
SAVEPOINT after_user;

INSERT INTO orders (user_id, status, total)
VALUES (LASTVAL(), 'pending', 100);
-- Ой, ввели неверный статус...

ROLLBACK TO SAVEPOINT after_user;  -- откат только до точки, пользователь остался

INSERT INTO orders (user_id, status, total)
VALUES (LASTVAL(), 'paid', 100);  -- вставить правильно

COMMIT;

Инструменты работы с SQL

DBeaver (рекомендуется)

Универсальный GUI-клиент. Поддерживает PostgreSQL, MySQL, SQLite и десятки других СУБД.

Основные возможности:

  • Подключение к любой СУБД через JDBC-драйвер
  • SQL-редактор с подсветкой синтаксиса и автодополнением
  • Браузер структуры БД (таблицы, индексы, FK)
  • Редактирование данных через интерфейс
  • Экспорт результатов в CSV/Excel

psql (консольный клиент PostgreSQL)

Стандартный клиент, доступен везде где есть PostgreSQL.

# Подключение
psql -h localhost -p 5432 -U postgres -d mydb

# Полезные команды внутри psql
\dt          -- список таблиц
\d users     -- структура таблицы users
\i file.sql  -- выполнить SQL-файл
\q           -- выйти

pgAdmin

Официальный веб-интерфейс PostgreSQL. Хорош для визуального просмотра структуры и выполнения запросов.


Правила безопасности

1. Только тестовая база

⚠️ Никогда не работайте с production-базой во время тестирования.

Всегда проверяйте, к какой базе вы подключены, прежде чем выполнять UPDATE или DELETE.

-- Проверить текущую базу в PostgreSQL
SELECT current_database();

2. SELECT перед изменением

Перед каждым UPDATE или DELETE сначала выполните SELECT с тем же WHERE:

-- Сначала убедитесь что нашли нужные записи
SELECT id, name, email FROM users WHERE email LIKE '%@test.com';

-- Только потом удаляйте
DELETE FROM users WHERE email LIKE '%@test.com';

3. Транзакции для изменений

Оборачивайте любое изменение данных в транзакцию. Если что-то пошло не так — ROLLBACK.

4. Не изменяйте данные пользователей

Для тестирования создавайте специальные тестовые записи с узнаваемыми маркерами (например, test_ в email).


Чеклист: SQL для каждого этапа тестирования

Перед тестом — подготовка данных

  • Создать тестового пользователя с нужными правами
  • Установить нужные состояния объектов (статус заказа, баланс, флаги)
  • Обернуть всё в BEGIN для возможности отката

Во время теста — проверка данных

  • После создания объекта через UI — проверить через SELECT в БД
  • После изменения — убедиться что данные изменились корректно
  • Проверить, что не изменились лишние записи

После теста — очистка

  • ROLLBACK если использовали транзакцию
  • Или DELETE тестовых данных в правильном порядке (дочерние → родительские)
  • Убедиться что база вернулась в ожидаемое состояние

Типичные SQL-запросы для ежедневной работы

-- Найти последнего зарегистрированного пользователя
SELECT * FROM users ORDER BY created_at DESC LIMIT 1;

-- Проверить состояние заказа после оплаты
SELECT id, status, total, updated_at FROM orders WHERE id = 123;

-- Найти все незакрытые инциденты (баги в данных)
SELECT * FROM orders WHERE status = 'pending'
  AND created_at < NOW() - INTERVAL '7 days';

-- Убедиться, что email уникален перед регистрацией
SELECT COUNT(*) FROM users WHERE email = 'newuser@example.com';
-- Ожидаем: 0 (пользователя нет → можно регистрировать)

Итоги

  • Транзакция — группа операций как единое целое; BEGIN / COMMIT / ROLLBACK
  • ROLLBACK — лучший способ откатить тестовые данные без ручной очистки
  • SAVEPOINT — контрольная точка внутри транзакции для частичного отката
  • DBeaver — универсальный инструмент, рекомендуется для ежедневной работы
  • Безопасность: только тестовая БД, SELECT перед изменением, транзакции для DML
  • Чеклист: подготовка → тест → проверка → очистка

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике