Какой у вас опыт тестирования хранимых процедур в SQL?

«Какой у вас опыт тестирования хранимых процедур в SQL?» — вопрос из категории Базы данных и SQL, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Есть опыт тестирования хранимых процедур в PostgreSQL и MySQL. Подход включает проверку:

  1. Функциональной корректности: Соответствие логики бизнес-требованиям.
  2. Обработки граничных случаев и ошибок: Поведение при NULL, невалидных данных, нарушениях ограничений.
  3. Производительности: Время выполнения и нагрузка на БД.
  4. Безопасности: Потенциальные уязвимости, такие как SQL-инъекции.

Пример тестирования процедуры в PostgreSQL:

-- Процедура для добавления пользователя
CREATE OR REPLACE PROCEDURE sp_add_user(
    p_username VARCHAR,
    p_email VARCHAR
)
LANGUAGE plpgsql
AS $$
BEGIN
    INSERT INTO users (username, email) VALUES (p_username, p_email);
END;
$$;

-- Тестовые вызовы и проверки:
-- 1. Успешное добавление
CALL sp_add_user('john_doe', 'john@example.com');
SELECT * FROM users WHERE username = 'john_doe'; -- Должен вернуть запись

-- 2. Проверка на дубликат (если есть UNIQUE constraint)
-- Первый вызов — OK
CALL sp_add_user('test', 'test@mail.com');
-- Второй вызов с теми же данными — ожидается исключение
CALL sp_add_user('test', 'test@mail.com'); -- Должна быть ошибка нарушения уникальности

-- 3. Проверка обработки NULL (в зависимости от требований)
CALL sp_add_user(NULL, 'some@mail.com'); -- Ожидается ошибка или специальная обработка

Тестирование часто проводилось через интеграционные тесты приложения или специализированные инструменты для БД.