← Назад к вопросам

Что такое SQL?

1.3 Junior🔥 151 комментариев
#Базы данных и SQL

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое SQL? Зачем он нужен QA Automation Engineer?

SQL (**Structured Query Language**) — это стандартный язык для работы с базами данных. Он используется для **создания, модификации, управления и извлечения данных** из реляционных (табличных) систем управления базами данных (RDBMS), таких как MySQL, PostgreSQL, Oracle, SQL Server и многих других.

Почему SQL критически важен для QA Automation Engineer?

Как QA Automation Engineer, я использую SQL не для администрирования баз данных, а как мощный инструмент для проверки качества данных, состояния системы и автоматизации проверок бизнес-логики, которая живёт в базах данных. Это неотъемлемая часть моей работы.

Основные применения SQL в автоматизированном тестировании:

1. Проверка корректности данных после выполнения тестовых действий

Мы выполняем действие через UI или API (например, создаём заказ), а затем проверяем, что данные корректно записались в соответствующие таблицы.

-- После создания пользователя через API проверяем его в базе
SELECT id, email, registration_date 
FROM users 
WHERE email = 'testuser@example.com';
-- Проверяем, что пользователь создан, email верный и дата регистрации сегодняшняя

2. Предварительная подготовка данных (Data Setup)

Чтобы запустить тест, часто нужны специфичные начальные условия. Мы можем создать эти данные напрямую в базе, минуя долгие UI-процедуры.

-- Для теста на "заказ от VIP клиента" нужно создать клиента с определённым статусом
UPDATE customers 
SET loyalty_level = 'VIP', discount = 20 
WHERE id = 12345;
-- Тест теперь может начаться с уже подготовленного состояния

3. Очистка данных после теста (Data Cleanup)

Автоматизированные тесты должны быть атомарными и не влиять друг на друга. Мы удаляем или откатываем созданные тестовые данные.

-- Удаляем тестовые заказы, созданные в процессе выполнения сценария
DELETE FROM orders 
WHERE created_by = 'automation_test_user';
-- Или более безопасно: помечаем их как тестовые и архивируем

4. Проверка сложной бизнес-логики и агрегаций

Многие бизнес-правила (расчёт скидок, итоговые отчеты, сложные связи) лучше проверять напрямую запросами, чтобы убедиться в корректности вычислений.

-- Проверяем, что итоговая сумма заказа корректно вычисляется в базе
SELECT 
    o.id,
    o.total_amount,
    SUM(oi.price * oi.quantity) + o.delivery_cost - o.discount as calculated_total
FROM orders o
JOIN order_items oi ON o.id = oi.order_id
WHERE o.id = 1001
GROUP BY o.id, o.total_amount, o.delivery_cost, o.discount;
-- Убеждаемся, что `total_amount` равен `calculated_total`

5. Извлечение данных для анализа и отчётности

SQL используется для получения метрик о тестировании: сколько тестовых пользователей создано, сколько заказов выполнено в определенном модуле, и т.д.

6. Интеграция в автоматизированные тестовые фреймворки

SQL-запросы выполняются непосредственно из кода автоматизации, что делает проверки мощными и быстрыми.

// Пример в Java (с использованием JDBC)
public void verifyOrderInDatabase(int orderId, double expectedTotal) {
    String query = "SELECT total_amount FROM orders WHERE id = ?";
    try (Connection conn = DriverManager.getConnection(url, user, password);
         PreparedStatement stmt = conn.prepareStatement(query)) {
        stmt.setInt(1, orderId);
        ResultSet rs = stmt.executeQuery();
        if (rs.next()) {
            double actualTotal = rs.getDouble("total_amount");
            Assert.assertEquals(expectedTotal, actualTotal, "Total amount in DB mismatch");
        } else {
            Assert.fail("Order not found in database");
        }
    }
}
# Пример в Python (с использованием библиотеки sqlite3 или psycopg2)
import psycopg2

def check_user_exists(email):
    conn = psycopg2.connect(DATABASE_URL)
    cursor = conn.cursor()
    cursor.execute("SELECT 1 FROM users WHERE email = %s", (email,))
    result = cursor.fetchone()
    conn.close()
    assert result is not None, f"User with email {email} not found in DB"

Ключевые навыки SQL, необходимые QA Automation Engineer

  • Основные операторы: SELECT, INSERT, UPDATE, DELETE.
  • Фильтрация и сортировка: WHERE, ORDER BY.
  • Агрегация данных: GROUP BY, агрегатные функции (COUNT, SUM, AVG, MAX, MIN).
  • Работа с соединениями (JOINs): INNER JOIN, LEFT JOIN — для проверки связей между таблицами.
  • Транзакции: Понимание BEGIN TRANSACTION, COMMIT, ROLLBACK для управления целостностью данных в тестах.
  • Подзапросы (Subqueries) и условия (CASE) для сложных проверок.

Пример реального тестового сценария с использованием SQL

Сценарий: "Пользователь добавляет товар в корзину, и при этом его персональная скидка должна быть применена к итоговой стоимости в предварительном расчете."

Шаги автоматизации:

  1. Precondition (SQL): Найти или создать пользователя с определенным уровнем скидки.
    SELECT id, discount_percent FROM users WHERE discount_group = 'PREMIUM';
    
  2. Test Action (UI/API): Выполнить через интерфейс добавление товара в корзину.
  3. Verification (SQL): Проверить, что в таблице cart_items или pending_orders итоговая стоимость корректно вычислена с учётом скидки пользователя.
    SELECT 
        user_id,
        item_price,
        calculated_total,
        item_price * (1 - discount_percent/100) as expected_total_with_discount
    FROM cart_items ci
    JOIN users u ON ci.user_id = u.id
    WHERE user_id = 123;
    -- Убедиться, что calculated_total равен expected_total_with_discount
    

Таким образом, SQL является незаменимым инструментом в арсенале QA Automation Engineer. Он позволяет напрямую взаимодействовать с "сердцем" большинства приложений — базой данных, обеспечивая глубокие, точные и быстрые проверки, которые невозможно или крайне неэффективно проводить только через пользовательский интерфейс. Это значительно повышает надежность, скорость и покрытие автоматизированных тестов.

Что такое SQL? | PrepBro