Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Для чего SQL
SQL (Structured Query Language) — это язык для работы с реляционными базами данных. Для QA Engineer это критически важный навык, потому что часто нужно проверять данные в БД.
Где SQL используется в тестировании
1. Проверка данных в БД
Нужно убедиться, что приложение правильно сохраняет данные:
-- Проверить, создался ли пользователь после регистрации
SELECT * FROM users WHERE email = 'test@example.com';
2. Подготовка тестовых данных
-- Вставить тестовых пользователей для тестов
INSERT INTO users (name, email, age) VALUES
('John', 'john@test.com', 25),
('Alice', 'alice@test.com', 30),
('Bob', 'bob@test.com', 28);
3. Проверка целостности данных
-- Проверить, что нет дублей
SELECT email, COUNT(*) FROM users GROUP BY email HAVING COUNT(*) > 1;
-- Проверить orphaned records
SELECT * FROM orders WHERE user_id NOT IN (SELECT id FROM users);
4. Проверка бизнес-логики
-- Сумма заказов пользователя
SELECT SUM(amount) FROM orders WHERE user_id = 123;
-- Последний заказ
SELECT * FROM orders WHERE user_id = 123 ORDER BY created_at DESC LIMIT 1;
5. Очистка тестовых данных
-- Удалить все тестовые заказы
DELETE FROM orders WHERE user_id IN (SELECT id FROM users WHERE email LIKE '%test%');
Типичные SQL запросы для QA
SELECT — получение данных
-- Все пользователи
SELECT * FROM users;
-- С условием
SELECT * FROM users WHERE age > 18;
-- С сортировкой
SELECT * FROM users ORDER BY created_at DESC;
-- С лимитом
SELECT * FROM users LIMIT 10;
INSERT — добавление данных
INSERT INTO users (name, email, age) VALUES ('John', 'john@test.com', 25);
UPDATE — изменение данных
UPDATE users SET age = 26 WHERE id = 123;
DELETE — удаление данных
DELETE FROM users WHERE id = 123;
Сценарии использования SQL в тестировании
Сценарий 1: Проверка создания заказа
-- Пользователь создал заказ через UI
-- Я проверяю в БД
SELECT * FROM orders WHERE user_id = 123 ORDER BY id DESC LIMIT 1;
-- Результат должен показать новый заказ с правильной суммой
Сценарий 2: Проверка удаления
-- Пользователь нажал delete
-- Я проверяю
SELECT COUNT(*) FROM users WHERE id = 123; -- Должно быть 0
Сценарий 3: Проверка транзакции
-- При платеже должны произойти несколько операций
-- Проверить платёж
SELECT * FROM payments WHERE order_id = 123;
-- Проверить, что статус заказа изменился
SELECT status FROM orders WHERE id = 123; -- Должно быть 'Paid'
-- Проверить, что был создан shipping
SELECT * FROM shipping WHERE order_id = 123;
Сценарий 4: Проверка производительности
-- Поиск медленных запросов
EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 123;
-- Нужны ли индексы?
SHOW INDEXES FROM orders;
Сценарий 5: Проверка безопасности
-- Может ли пользователь видеть данные другого пользователя?
SELECT * FROM orders WHERE user_id = 999; -- Если видно, security issue
-- Хранятся ли пароли в plain-text?
SELECT password FROM users LIMIT 1; -- Если видно, security issue!
Сложные запросы
JOIN — связь между таблицами
-- Получить заказы с информацией о пользователе
SELECT u.name, o.amount, o.created_at
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE u.id = 123;
GROUP BY — группировка
-- Сумма заказов по пользователям
SELECT user_id, SUM(amount) as total
FROM orders
GROUP BY user_id
ORDER BY total DESC;
Aggregates — агрегирующие функции
-- Средняя стоимость заказа
SELECT AVG(amount) FROM orders;
-- Максимальный заказ
SELECT MAX(amount) FROM orders;
-- Количество заказов
SELECT COUNT(*) FROM orders;
Инструменты для работы с SQL
DBeaver: бесплатный, мощный, удобный GUI
pgAdmin: для PostgreSQL, web-интерфейс
MySQL Workbench: для MySQL
CommandLine: mysql, psql — прямое подключение
DataGrip: платный, но мощный (JetBrains)
Почему это важно для QA
1. Независимая проверка:
- UI может врать, но БД не врёт
- Если UI показывает "заказ создан", но в БД его нет — баг
2. Edge cases:
- Проверить данные, которые невозможно увидеть в UI
- Проверить скрытые поля
3. Производительность:
- Иногда приложение зависает из-за медленных запросов
- SQL помогает найти проблему
4. Безопасность:
- Проверить, что sensitive данные не хранятся в plain-text
- Проверить, что пользователь не видит данные других
5. Тестовые данные:
- Быстро подготовить нужные данные
- Быстро очистить после теста
Совет QA
Не обязательно быть экспертом в SQL, но базовые SELECT, INSERT, UPDATE, DELETE должны быть на автомате. Это сэкономит часы работы и найдёт множество багов, которые невидны в UI.
Основные запросы, которые использую каждый день:
SELECT * FROM table WHERE condition; -- проверка данных
INSERT INTO ... VALUES ...; -- подготовка данных
DELETE FROM ... WHERE ...; -- очистка
UPDATE ... SET ... WHERE ...; -- изменение