Full-stack верификация: как Playwright-агент тестирует UI и проверяет базу данных без единой строки SQL

Тест на оформление заказа нажимает «Оформить заказ» и видит зелёный тост. Хорошо. Но проверяет ли он, что строка действительно записалась в базу? Правильно ли добавлены позиции? Уменьшился ли инвентарь? UI может показать «подтверждено», но на уровне данных — произошёл сбой: откат транзакции, ошибка в очереди, проглоченное исключение.

Классическое решение — писать SQL-ассерты в тестах. Но это требует подключения ORM или драйвера, управления учётными данными, ручного написания запросов. Работает, но создаёт технический долг: каждый тест нужно обновлять при изменении схемы.

Сейчас есть лучший путь. И в нём вы не пишете ни строчки SQL.

Представьте AI-агента, который сначала управляет браузером, оформляя заказ, а затем переключается в базу данных, чтобы проверить, что данные записаны корректно. Всё это — через два MCP-сервера.

Идея проста: один MCP-сервер управляет Playwright для автоматизации браузера, второй — предоставляет безопасный read-only доступ к базе данных. Агент последовательно использует оба. Он завершает заказ, извлекает order ID со страницы подтверждения и проверяет данные в базе — всё по одному промпту.

Что понадобится

  • Веб-приложение с флоу оформления заказа (любой стек — автоматизация на уровне браузера)
  • PostgreSQL или MySQL с данными приложения
  • MCP-клиент (например, Claude Desktop, Claude Code или другой совместимый)
  • MCP-серверы: для Playwright и для базы данных

Шаг 1: Настройка MCP-серверов

Добавьте оба сервера в конфигурацию MCP-клиента. Например, в claude_desktop_config.json.

Два ключевых момента:

  • Подключение к базе — только через read-only пользователя. Это обязательно: AI-агент не должен иметь права на запись.
  • Для MySQL замените @anthropic/mcp-postgres на @anthropic/mcp-mysql. Интерфейс инструментов идентичен.

Шаг 2: Браузерная автоматизация

Передайте агенту промпт с описанием действий:

Перейди на localhost:3000/products. Добавь «Wireless Charger» в корзину. Перейди к оформлению заказа. Заполни имя покупателя «Ada Lovelace» и email «ada@test.dev». Выбери «Credit Card» как способ оплаты и нажми «Place Order». Дождись страницы подтверждения и захвати order ID.

Агент использует Playwright MCP для выполнения шагов: навигация, клики, заполнение форм, ожидание результата.

Он читает снапшот страницы и извлекает: Order #10472.

Никаких переменных, фикстур или ручного управления состоянием. Агент просто запоминает ID и использует его дальше.

Шаг 3: Проверка базы данных — без SQL

Теперь — самое интересное. Добавьте вторую часть промпта:

Теперь проверь базу данных. Подтверди, что заказ 10472 существует в таблице orders и принадлежит ada@test.dev. Проверь, что в таблице line_items есть запись для «Wireless Charger» с количеством 1. Также проверь, что инвентарный остаток товара был уменьшен.

Агент переключается на PostgreSQL MCP. Сначала он изучает схему — не предполагает названия столбцов:

  • Вызывает list_tables, чтобы найти нужные таблицы.
  • Использует describe_table, чтобы узнать структуру: названия столбцов, типы, связи.

Затем агент строит и выполняет запросы автоматически. Если столбец называется qty вместо quantity, или product_title вместо name — он адаптируется, потому что сначала прочитал схему.

Результат — три проверки, выполненные без единой строки SQL с вашей стороны.

Полный промпт

Всё можно описать одним запросом:

Оформи заказ на «Wireless Charger» для Ada Lovelace (ada@test.dev), затем проверь, что заказ 10472 есть в базе, позиция добавлена, а инвентарь уменьшен.

Это весь тест. Один промпт. Два MCP-сервера. Полное покрытие стека — от UI до данных.

Как сделать production-ready

  • Используйте только read-only доступ. Активным должен быть только инструмент read_query. Это исключает риск случайной модификации данных.
  • Добавьте тайминг-гарды. Если приложение использует очереди или eventual consistency, агент может не найти запись сразу. Укажите: «Жди появления строки до 5 секунд с опросом каждые 500 мс».
  • Делайте снапшоты до и после. Попросите агента выгрузить данные таблиц до и после действия. Сравнение покажет побочные эффекты: дубли, пропущенные audit-поля, нарушения внешних ключей.
  • Расширяйте за пределы SQL. Тот же паттерн работает с другими MCP-серверами: Redis — для проверки кеша, Elasticsearch — для индексации, S3 — для загрузки файлов. Добавляйте столько слоёв, сколько нужно.

Почему это важно

Традиционная full-stack верификация требует сложной инфраструктуры: драйверы, ORM, SQL-запросы, которые ломаются при рефакторинге схемы. Это не критично, но создаёт постоянную нагрузку на поддержку.

MCP-подход устраняет это. Вы описываете, что проверить — агент сам решает, как. При изменении схемы тесты не нужно править: агент переоткроет её при следующем запуске.

Это не магия. Это перенос адаптационного слоя из кода в контекст агента. Для задач чтения и верификации — такой трейдоф почти всегда оправдан.

Читать оригинал