В чем разница между представлением (View) и таблицей (Table) в контексте тестирования?

«В чем разница между представлением (View) и таблицей (Table) в контексте тестирования?» — вопрос из категории Other, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В контексте тестирования, особенно баз данных и UI, View (Представление) и Table (Таблица) — это разные сущности, которые проверяются по-разному.

Таблица (Table)

  • Что это: Базовая структура для хранения данных в СУБД. Содержит строки и столбцы с физическим хранением данных.
  • Тестирование:
    • Проверка структуры (схемы): наличие колонок, типы данных, ограничения (NOT NULL, UNIQUE).
    • Проверка целостности данных: первичные и внешние ключи.
    • Проверка бизнес-логики на уровне триггеров.
  • Пример SQL-запроса для теста структуры:
    -- Проверяем, что таблица 'users' имеет ожидаемые колонки
    SELECT column_name, data_type, is_nullable
    FROM information_schema.columns
    WHERE table_name = 'users';
    -- Ожидаемый результат: id (int, NO), email (varchar, NO), name (varchar, YES)

Представление (View)

  • Что это: Виртуальная таблица, результат сохранённого SQL-запроса. Не хранит данные самостоятельно, а показывает их из одной или нескольких таблиц.
  • Тестирование:
    • Логика выборки: Убедиться, что запрос представления возвращает корректные данные, применяет правильные фильтры (WHERE), соединения (JOIN) и агрегации (GROUP BY).
    • Производительность: Проверка, что запрос представления выполняется эффективно, особенно при работе с большими данными.
    • Права доступа: Проверка, что представление корректно ограничивает видимость данных для разных ролей пользователей (например, VIEW показывает только активные заказы).
  • Пример теста для представления active_users:
    
    -- Создаём тестовые данные
    INSERT INTO users (id, email, is_active) VALUES (1, 'test1@mail.com', true), (2, 'test2@mail.com', false);

-- Запускаем запрос представления и проверяем результат SELECT * FROM active_users; -- Ожидаемый результат: Должна вернуться только строка с id=1 (is_active=true). -- Строка с id=2 отфильтрована.


**Для QA-инженера** важно понимать эту разницу при написании SQL-скриптов для проверки данных, валидации отчётов и тестировании функций приложения, которые опираются на разные источники данных.