← Назад к вопросам

Что будешь делать при отсутствии API

2.2 Middle🔥 191 комментариев
#Soft skills и карьера#Автоматизация тестирования

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Стратегия тестирования при отсутствии API

При отсутствии API (Application Programming Interface) как точки доступа для автоматизированного или ручного тестирования, мой подход кардинально меняется, смещая фокус на другие уровни и методы проверки приложения. Отсутствие API — не редкость на ранних стадиях проекта, в прототипах, legacy-системах или в продуктах с монолитной архитектурой, где слой API явно не выделен. Это ограничивает возможности автоматизации бизнес-логики напрямую, но открывает дорогу для углублённого тестирования на других уровнях. Моя стратегия будет выглядеть следующим образом.

1. Углублённое тестирование через пользовательский интерфейс (UI)

Основным каналом взаимодействия становится GUI (Graphical User Interface). Все тесты, которые в идеале выполнялись бы через API (проверка расчётов, бизнес-правил, валидации данных), теперь необходимо проводить через фронтенд. Это влечёт за собой:

  • Смещение акцента на E2E-тестирование: Активное использование инструментов для End-to-End тестирования, таких как Selenium WebDriver, Cypress или Playwright. С их помощью можно автоматизировать сложные пользовательские сценарии.
    // Пример фрагмента E2E-теста на Playwright для проверки создания заказа
    test('Создание заказа через UI', async ({ page }) => {
      await page.goto('/catalog');
      await page.click('text=Добавить в корзину');
      await page.goto('/cart');
      await page.fill('#address', 'Тестовый адрес');
      await page.click('button:has-text("Оформить")');
      await expect(page.locator('.order-success')).toBeVisible();
    });
    
  • Ручное исследовательское тестирование: Тщательное исследование приложения без заранее написанных чек-листов для поиска неочевидных дефектов, связанных с состоянием данных и последовательностью действий.
  • Повышенное внимание к производительности UI: Проверка времени отклика интерфейса, так как все операции идут через браузер.

2. Прямая работа с данными: тестирование базы данных

Поскольку бизнес-логика часто живёт на уровне базы данных (хранимые процедуры, триггеры, сложные запросы), я делаю упор на Database Testing.

  • Валидация данных "на выходе": После выполнения действий через UI я проверяю, корректно ли данные сохранились, обновились или удалились в БД. Для этого используются прямые SQL-запросы.
    -- Пример: проверка создания заказа после UI-действия
    SELECT o.id, o.status, u.login
    FROM orders o
    JOIN users u ON o.user_id = u.id
    WHERE u.login = 'test_user'
    ORDER BY o.created_at DESC
    LIMIT 1;
    
  • Подготовка и очистка тестовых данных: Создание сложных предварительных условий для тестов (например, специфические балансы пользователей) напрямую в БД через скрипты.
  • Проверка целостности и консистентности данных: Убедиться, что бизнес-правила (foreign keys, constraints) корректно работают на уровне схемы данных.

3. Анализ логов и мониторинга

Логи приложения и метрики становятся ключевым источником информации о внутреннем состоянии системы.

  • Верификация бизнес-событий: После выполнения сценария через UI я проверяю логи, чтобы убедиться, что нужные события (OrderCreated, PaymentProcessed) были сгенерированы с правильными параметрами.
  • Поиск причин ошибок: Когда тест через UI падает, логи — первый инструмент для анализа, что пошло не так на бэкенде, без возможности "постучать" в API.
  • Настройка алертов: В продовой среде важно настроить мониторинг ключевых ошибок, видимых в логах.

4. Работа с разработчиками и артефактами

В такой ситуации коммуникация с командой разработки становится критически важной.

  • Изучение исходного кода (при наличии доступа): Анализ репозиториев бэкенда помогает понять бизнес-логику, потенциальные граничные условия и пути выполнения.
  • Участие в планировании (Roadmap): Я буду активно выступать за приоритизацию разработки API в бэклоге продукта. Объясню преимущества:
    *   **Ускорение тестирования:** Автоматизация через API в разы быстрее и стабильнее, чем через UI.
    *   **Раннее тестирование:** Тестирование можно начинать до готовности фронтенда.
    *   **Надёжность:** Тесты, не зависящие от изменений вёрстки.
    *   **Более чистая архитектура:** Наличие API — признак более структурированного приложения.

5. Использование специализированных инструментов и снифферов

В некоторых случаях можно применять инструменты для анализа сетевого трафика между фронтендом и бэкендом, такие как Charles Proxy, Fiddler или вкладка Network в браузерных DevTools. Если фронтенд общается с бэкендом через недокументированные HTTP-вызовы (фактически, "скрытый" API), их можно перехватить, изучить и даже использовать для создания простых автотестов на уровне HTTP-запросов, что будет на порядок стабильнее UI-автоматизации.

Резюме подхода

Отсутствие API — это вызов, который заставляет тестировщика мыслить шире и глубже погружаться в устройство системы. Мои действия будут структурированы так:

  1. Основной упор на комплексное E2E-тестирование через UI с использованием современных стабильных фреймворков.
  2. Активное тестирование на уровне базы данных для проверки корректности выполнения бизнес-логики.
  3. Непрерывный анализ логов как источник истины о работе бэкенда.
  4. Тесная совместная работа с разработчиками для понимания системы и обоснования необходимости скорейшего внедрения API.
  5. Исследование сетевого трафика для поиска возможностей для более эффективной автоматизации.

Главная долгосрочная цель в такой ситуации — добиться внедрения API-слоя, предоставив бизнесу и команде чёткий расчёт выгод (ROI) от его наличия с точки зрения скорости разработки, качества и надёжности продукта.