Ответ
Да, работал в проектах, где бэкенд использовал Oracle Database. Мои задачи включали проверку целостности данных, валидацию бизнес-логики на уровне БД и создание тестовых данных.
Основные активности в QA:
- Верификация данных после тестов: После выполнения сценария в UI или через API я проверял, что данные корректно записались в нужные таблицы.
- Подготовка и очистка тестовых данных: Писал сложные SQL-скрипты для изоляции тестов.
- Тестирование хранимых процедур и триггеров: Проверял их логику, входные/выходные параметры и обработку ошибок.
- Интеграция с автотестами: Использовал 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.