Работали ли вы с Oracle Database при тестировании?

«Работали ли вы с Oracle Database при тестировании?» — вопрос из категории Базы данных и SQL, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, работал в проектах, где бэкенд использовал Oracle Database. Мои задачи включали проверку целостности данных, валидацию бизнес-логики на уровне БД и создание тестовых данных.

Основные активности в QA:

  1. Верификация данных после тестов: После выполнения сценария в UI или через API я проверял, что данные корректно записались в нужные таблицы.
  2. Подготовка и очистка тестовых данных: Писал сложные SQL-скрипты для изоляции тестов.
  3. Тестирование хранимых процедур и триггеров: Проверял их логику, входные/выходные параметры и обработку ошибок.
  4. Интеграция с автотестами: Использовал JDBC для прямых проверок из Java-кода.

Пример SQL-запроса для проверки результатов бизнес-операции:

-- Проверка, что после завершения заказа его статус изменился,
-- а в журнале аудита появилась соответствующая запись
SELECT 
    o.order_id,
    o.status AS current_order_status,
    COUNT(a.log_id) AS audit_entries_count
FROM 
    orders o
LEFT JOIN 
    audit_log a ON o.order_id = a.entity_id 
                AND a.action = 'ORDER_COMPLETED'
WHERE 
    o.order_id = 1001
GROUP BY 
    o.order_id, o.status
HAVING 
    o.status = 'COMPLETED' 
    AND COUNT(a.log_id) = 1;

Пример фрагмента автотеста на Java (JDBC):

@Test
public void verifyAccountBalanceAfterTransaction() throws SQLException {
    String jdbcUrl = "jdbc:oracle:thin:@host:1521:service";
    try (Connection conn = DriverManager.getConnection(jdbcUrl, "qa_user", "password")) {
        // 1. Запоминаем начальный баланс
        double initialBalance = getAccountBalance(conn, 123);

        // 2. Выполняем тестовый сценарий (например, через API) на перевод средств
        moneyTransferService.transfer(123, 456, 50.00);

        // 3. Проверяем конечный баланс в БД
        double finalBalance = getAccountBalance(conn, 123);

        assertEquals(initialBalance - 50.00, finalBalance, 0.001, 
                     "Баланс счёта должен уменьшиться на сумму перевода");
    }
}

private double getAccountBalance(Connection conn, int accountId) throws SQLException {
    String sql = "SELECT balance FROM accounts WHERE account_id = ?";
    try (PreparedStatement stmt = conn.prepareStatement(sql)) {
        stmt.setInt(1, accountId);
        ResultSet rs = stmt.executeQuery();
        if (rs.next()) {
            return rs.getDouble("balance");
        }
    }
    throw new SQLException("Account not found: " + accountId);
}

Для работы использовал SQL Developer и иногда интегрировал проверки в отчёты Allure.