Как тестировщик проводит тестирование базы данных?

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

Ответ

Тестирование БД — это проверка целостности, корректности и консистентности данных, а также логики работы с ними. Я подхожу к этому на нескольких уровнях.

1. Проверка структуры (Schema Testing):

  • Соответствие DDL-скриптов требованиям: названия таблиц и колонок, типы данных (VARCHAR(255) vs TEXT), ограничения (NOT NULL, UNIQUE).
  • Проверка индексов и ключей. Например, убедиться, что на колонку user_id в таблице orders есть внешний ключ (FOREIGN KEY) на users(id).
    -- Проверка существования индекса
    SELECT * FROM INFORMATION_SCHEMA.STATISTICS 
    WHERE TABLE_NAME = 'orders' AND COLUMN_NAME = 'user_id';

2. Проверка данных (Data Integrity Testing):

  • Корректность: Данные соответствуют бизнес-правилам (возраст > 0, email имеет валидный формат).
    -- Поиск некорректных email'ов
    SELECT id, email FROM users WHERE email NOT REGEXP '^[^@]+@[^@]+\.[^@]{2,}$';
  • Консистентность: После CRUD-операций данные в связанных таблицах синхронизированы. Например, удаление пользователя должно каскадно удалить его заказы (или обработать это в приложении).
  • Миграции: Проверка скриптов миграции (Liquibase/Flyway) на откат (rollback) и отсутствие даунтайма.

3. Проверка бизнес-логики на уровне БД:

  • Тестирование хранимых процедур, триггеров и представлений (VIEW). Пишу небольшие SQL-скрипты, которые подготавливают тестовые данные, вызывают процедуру и проверяют результат.

4. Интеграция с автотестами:

  • Использую Testcontainers для поднятия изолированного контейнера с БД на время прогона тестов.
  • Для модульных тестов сервисов применяю H2 или другую in-memory БД с той же структурой, что и продакшен.
  • После выполнения E2E-теста проверяю, что данные записались в БД именно так, как ожидалось.

Инструменты: Помимо прямых SQL-запросов, использую DBeaver для визуального анализа, pgTAP для unit-тестов в PostgreSQL и DBUnit для управления тестовыми датасетами в Java-проектах.