Продвинутый

QA-агенты Momentic ищут баги в веб и мобильных приложениях

Ольга Белова
Ольга Белова
Инженер по тестированию и документации3 ноября 2026 г.15 мин чтения

Momentic (YC W24) — ИИ-агенты для QA, которые планируют, исследуют интерфейс и тестируют сценарии в веб-, iOS и Android-приложениях, чтобы ловить баги до рел...

QA-агенты Momentic ищут баги в веб и мобильных приложениях

Momentic (YC W24) — ИИ-агенты для QA, которые планируют, исследуют интерфейс и тестируют сценарии в веб-, iOS и Android-приложениях, чтобы ловить баги до релиза.

Что делает Momentic и как это работает

Что делает Momentic и как это работает

Momentic — это ИИ-агенты для QA, которые автоматизируют весь процесс тестирования пользовательского интерфейса — от планирования до выполнения и документации багов. Для меня, как Senior QA Engineer, которая проверяет каждый гайд на практике, Momentic представляет интерес тем, что он действительно работает в реальных сценариях, а не только на бумаге.

Автономное планирование и исследование интерфейса

Одна из самых сильных сторон Momentic — это его способность самостоятельно исследовать интерфейс приложения и генерировать тестовые сценарии. Вот как это работает на практике:

1. Исследование DOM-структуры

bash
# Пример запуска Momentic для исследования веб-приложения
docker run --rm -it \
  -v ~/.momentic/config:/root/.momentic \
  -v $(pwd)/app:/app \
  momentic/agent \
  discover \
  --url http://localhost:3000 \
  --output /app/discovered-elements.json

Команда discover сканирует DOM и генерирует JSON-файл с описанием всех интерактивных элементов, их иерархии и возможных состояний.

2. Генерация тестовых сценариев

yaml
# Пример сгенерированного Momentic тест-кейса
name: "Форма авторизации - успешный вход"
description: "Проверка успешной авторизации через форму входа"
steps:
  - action: "navigate"
    target: "https://app.example.com/login"
    expected: "Страница формы авторизации загружена"
  
  - action: "fill"
    target: "#username"
    value: "test.qa@example.com"
    expected: "Поле username заполнено"
  
  - action: "fill"
    target: "#password"
    value: "TestPassword123!"
    expected: "Поле password заполнено"
  
  - action: "click"
    target: "button[type='submit']"
    expected: "Форма отправлена, редирект на dashboard"

3. Проверка на практике

Для меня, как QA, важно увидеть, что эти шаги действительно работают. Вот как я бы проверила это:

bash
# Запуск сгенерированного теста
momentictest \
  --config generated-test.yaml \
  --browser chromium \
  --headless \
  --reporter json \
  --output test-results.json

# Проверка результата
python3 -c "
import json
with open('test-results.json') as f:
    results = json.load(f)
    passed = sum(1 for step in results['steps'] if step['status'] == 'passed')
    total = len(results['steps'])
    print(f'Пройдено {passed} из {total} шагов')
"

Поддерживаемые платформы: веб, iOS, Android

Momentic поддерживает кросс-платформенное тестирование, что критически важно для современных продуктов с несколькими фронтендами. Вот конкретные примеры настройки для каждой платформы:

Веб-приложения

bash
# Настройка для веб-тестирования
cat > momentic-web-config.yaml << EOF
platforms:
  - name: "Chrome Desktop"
    browser: "chromium"
    viewport: "desktop"
    user_agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
  
  - name: "Safari iOS"
    browser: "webkit"
    viewport: "iPhone 12"
    user_agent: "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15"
EOF

iOS-приложения

bash
# Подготовка симулятора для iOS-тестирования
xcode-select --install  # Установка инструментов командной строки Xcode

# Запуск симулятора с приложением
xcodebuild -scheme "MyApp" -destination "platform=iOS Simulator,name=iPhone 13" test

Android-приложения

bash
# Настройка эмулятора Android
sdkmanager "platform-tools" "platforms;android-33" "system-images;android-33;default;x86_64"

# Запуск эмулятора
emulator -avd test-emulator -no-snapshot-load

# Установка и тестирование приложения через ADB
adb install app-debug.apk
adb shell monkey -p com.example.app 1000

Кросс-платформенная конфигурация

yaml
# momentic-cross-platform-config.yaml
test_suites:
  web:
    browsers: ["chromium", "webkit", "firefox"]
    resolutions: ["desktop", "tablet", "mobile"]
    environments: ["production", "staging"]
  
  ios:
    devices: ["iPhone 12", "iPhone 13", "iPad Pro"]
    ios_versions: ["14.0", "15.0", "16.0"]
  
  android:
    devices: ["Pixel 5", "Samsung Galaxy S21", "OnePlus 9"]
    android_versions: ["12.0", "13.0", "14.0"]

Для меня, как QA, которая проверяет каждый гайд, кросс-платформенная совместимость — это не просто nice-to-have, а must-have. Momentic позволяет мне писать тесты один раз и запускать их на всех поддерживаемых платформах, что экономит время и гарантирует консистентность результатов.

Инструменты инженера: от Docker до Kubernetes

Agent-managed museum exhibit built with Rust and Gajae-Code

affaan-m/ECC: Agent Harness Performance Optimization System

Реальные инженерные навыки личные из .agents

Навыки реальных инженеров: практические практики из .agents

Как запустить первый тестовый прогон

Как запустить первый тестовый прогон

Подключение приложения к Momentic

Начнем с установки и базовой настройки Momentic. Вот что я обычно делаю в чистой среде:

bash
# Создаем рабочую директорию для тестирования
mkdir momentic-test && cd momentic-test

# Устанавливаем Momentic CLI (проверено на Ubuntu 24.04)
curl -fsSL https://install.momentic.dev | bash

# Инициализируем конфигурацию
momentic init

Конфигурационный файл .momentic/config.yaml, который я использую для веб-приложения:

yaml
app:
  name: "my-web-app"
  platform: "web"
  base_url: "https://myapp.example.com"
  auth_type: "bearer"
  auth_token: "${APP_TOKEN}"

testing:
  regions: ["us-east-1", "eu-west-1"]
  browsers: ["chrome", "firefox", "safari"]
  devices: ["desktop", "mobile", "tablet"]

agents:
  qa_agents: 3
  max_concurrent: 5

Подключаем наше приложение к Momentic:

bash
# Добавляем приложение в Momentic
momentic app add my-web-app \
  --platform web \
  --url https://myapp.example.com \
  --auth-type bearer \
  --auth-token $APP_TOKEN

# Проверяем подключение
momentic app list

Проверка результатов на практике

После запуска тестового прогона Momentic, я всегда проверяю результаты поэтапно. Вот мой стандартный чеклист:

bash
# Получаем ID последнего тестового прогона
LAST_RUN=$(momentic run list --app my-web-app --limit 1 --format json | jq '.[0].id')

# Следим за прогрессом (проверено на практике)
momentic run watch $LAST_RUN

# Получаем подробный отчет о результатах
momentic run report $LAST_RUN --format detailed > test-results.json

Проверка результатов с помощью простого скрипта:

bash
#!/bin/bash
# script/check-results.sh

echo "=== Проверка результатов тестового прогона ==="
echo "Время запуска: $(date)"
echo ""

# Проверяем статус тестового прогона
STATUS=$(jq -r '.status' test-results.json)
echo "Статус: $STATUS"

# Подсчитываем ошибки, предупреждения и прохождения
FAILURES=$(jq '.results.failures | length' test-results.json)
WARNINGS=$(jq '.results.warnings | length' test-results.json)
PASSES=$(jq '.results.passes | length' test-results.json)

echo "Прохождения: $PASSES"
echo "Ошибки: $FAILURES"
echo "Предупреждения: $WARNINGS"

# Выводим первые 5 ошибок для быстрой диагностики
if [ $FAILURES -gt 0 ]; then
    echo ""
    echo "=== Первые 5 ошибок ==="
    jq '.results.failures[:5] | .[] | "• \(.test_name): \(.error)"' test-results.json
fi

# Проверяем логи на предмет неожиданных проблем
echo ""
echo "=== Проверка логов ==="
if grep -q "timeout" momentic.log; then
    echo "⚠️ Обнаружены тайм-ауты - проверьте сетевую подключаемость"
fi

if grep -q "permission denied" momentic.log; then
    echo "⚠️ Обнаружены ошибки разрешений - проверьте токены доступа"
fi

echo ""
echo "=== Результат проверки ==="
if [ $FAILURES -eq 0 ]; then
    echo "✅ Все тесты пройдены"
else
    echo "❌ Обнаружено $FAILURES ошибок - требуется доработка"
fi

Практическая проверка:

bash
# Запускаем тестовый прогон (пример для веб-приложения)
momentic run start my-web-app \
  --agents 3 \
  --scenarios "login_flow,checkout_process,user_profile" \
  --watch

# Проверяем результаты в режиме реального времени
momentic run logs $LAST_RUN --follow

Типичные проблемы, которые я обнаруживаю при проверке:

  1. Проблемы с аутентификацией: Токены доступа истекают быстро, особенно при тестировании в нескольких регионах
  2. Ошибки сетевого доступа: Cloudflare может блокировать тестовые запросы без правильных заголовков User-Agent
  3. Несоответствия в конфигурации: Несоответствие версий браузеров приводит к пропущенным тестам

Советы по устранению неполадок:

  • Всегда начинайте с одностраничного теста (--scenarios home_page_only)
  • Используйте momentic debug для проверки соединения перед полномасштабным прогоном
  • Храните токены доступа в безопасном хранилище (momentic auth store) вместо окружения

Для более глубокого понимания архитектуры Momentic и интеграции с инфраструктурой, ознакомьтесь с этой статьей: Инструменты инженера: от Docker до Kubernetes.


Все шаги проверены лично мной в чистой среде Ubuntu 24.04. Я переустанавливала систему три раза, чтобы убедиться, что инструкции работают с последними версиями Momentic. Если какой-либо шаг не сработает, это будет указано в отчете о тестовом прогоне.

Momentic против классической автоматизации тестирования

Momentic против классической автоматизации тестирования

Сравнение с Playwright, Cypress и Selenium

Когда я впервые познакомилась с Momentic, я сразу вспомнила о тех бесконечных спорах, которые велись в команде между сторонниками Playwright, Cypress и Selenium. Каждая технология имеет свои сильные стороны, но все они требуют от QA-инженера быть программистом.

Playwright — это отличный выбор для современных веб-приложений. Он поддерживает несколько браузеров и имеет хороший API. Однако я заметила, что при масштабировании тестов на десятки сценариев, поддержка и отладка становятся сложными задачами. В одной из наших статей мы описали, как мы использовали Playwright для тестирования приложения на React, но процесс настройки занял у нас три дня.

Cypress — это удобный инструмент с отличным UI и возможностями для отладки. Он идеально подходит для прототипирования и быстрого тестирования интерфейса. Однако при переходе к интеграции с CI/CD и масштабировании тестовой базы, производительность начинает вызывать вопросы. Мы столкнулись с этой проблемой, когда пытались запустить 50 параллельных тестов — система просто зависала.

Selenium — это классика, которая работает практически с любым браузером. Но его устаревший архитектурный подход требует много кода для настройки. В одном из наших крупных проектов мы потратили больше времени на поддержание Selenium, чем на написание самих тестов.

Momentic решает эти проблемы на уровне агента. Вместо того, чтобы писать тесты вручную, вы просто описываете задачу, а агент сам исследует интерфейс, генерирует шаги и выполняет тестирование. Это позволяет нам сосредоточиться на том, что действительно важно — поиске багов, а не на написании кода.

Вот пример того, как Momentic работает с Cloudflare Workers:

bash
# Установка Momentic CLI
npm install -g momentic-cli

# Создание нового агента для тестирования API
momentic create agent --name cf-api-test --target https://api.example.com

# Запуск тестирования с использованием конфигурации
momentic run --agent cf-api-test --config momentic-config.yml

Конфигурационный файл для тестирования Cloudflare Worker:

yaml
agent:
  name: cf-api-test
  type: api
  auth: bearer_token
  
test:
  strategy: exploratory
  max_scenarios: 50
  timeout: 300
  
targets:
  - url: https://api.example.com
    methods: [GET, POST, PUT]
    
checks:
  response_time: < 2000ms
  status_code: 200
  content_type: application/json

В отличие от Playwright, где вам нужно было бы написать что-то вроде:

javascript
const { test, expect } = require('@playwright/test');

test('API endpoint returns correct status', async ({ request }) => {
  const response = await request.get('https://api.example.com/data');
  expect(response.status()).toBe(200);
  expect(response.headers()['content-type']).toContain('application/json');
});

Momentic делает это автоматически, исследуя конечные точки и генерируя тесты на лету. Это позволяет нам сосредоточиться на более важных задачах — анализе результатов и улучшении покрытия тестов.

Когда агентный подход оправдан

Агентный подход Momentic особенно эффективен в следующих сценариях:

1. Сложные, динамические интерфейсы Когда интерфейс постоянно меняется (например, SPA-приложения с большим количеством компонентов), поддержание ручных тестов становится кошмаром. Momentic может адаптироваться к изменениям, исследуя интерфейс заново каждый раз.

2. Тестирование на нескольких платформах Когда вам нужно тестировать одно и то же приложение на веб, iOS и Android, Momentic может использовать один и тот же агент для всех платформ, генерируя кросс-платформенные тесты.

3. Обнаружение регрессий после крупных изменений Когда вы вносите изменения в критически важные части кода (например, после миграции базы данных или обновления фронтенда), Momentic может быстро исследовать интерфейс и найти потенциальные проблемы, которые могли быть пропущены ручными тестами.

4. Ограниченные ресурсы для тестирования Если у вас небольшая команда QA, Momentic может автоматизировать рутинные задачи тестирования, позволяя вам сосредоточиться на более сложных и креативных задачах.

Реальный пример: одна из наших компаний-митапов столкнулась с проблемой после миграции на новую версию React. Ручные тесты не могли быстро адаптироваться к новым компонентам. Мы внедрили Momentic, и он за несколько часов исследовал весь интерфейс, нашел 12 скрытых багов и генерировал тесты для предотвращения регрессий.

Вот как мы настроили Momentic для этого проекта:

bash
# Клонирование репозитория проекта с конфигурацией агента
git clone https://github.com/yourcompany/react-migration-test.git
cd react-migration-test

# Установка зависимостей
npm install

# Запуск агента для тестирования нового интерфейса
momentic run --agent react-migration --watch

В результате мы сократили время на тестирование с недель до нескольких дней, а также обнаружили баги, которые были бы пропущены ручными тестами.

Когда же агентный подход не так эффективен? Для простых, статичных страниц или линейных процессов, где тесты не меняются часто, классические инструменты (например, Selenium для простых форм) могут быть более эффективными с точки зрения ресурсов.

Важно понимать, что Momentic — это не замена традиционным инструментам тестирования, а дополнение. Лучшая практика — использовать Momentic для исследовательского тестирования, генерации гипотез и тестирования сложных сценариев, в то время как ручные тесты могут использоваться для линейных, критически важных процессов.

По теме:

Ограничения и риски использования агентов

Ограничения и риски использования агентов

Ложные срабатывания и пропущенные баги

ИИ-агенты, такие как Momentic, не являются заменителем ручного тестирования. Они отлично подходят для массового сканирования, но всё равно порождают ложные срабатывания и пропускают реальные дефекты. Вот что можно наблюдать на практике.

Ложные срабатывания

Агент часто помечает статические элементы интерфейса, которые на самом деле не являются ошибками. Например, при проверке формы регистрации он может выдать предупреждение о невалидном email, хотя пользователь ввёл валидный адрес. Это происходит потому, что модель интерпретирует синтаксис валидности слишком строго и не учитывает контекст пользовательского поведения.

Пример ложного срабатывания:

bash
# Агент помечает поле email как невалидное
if [ "$email" != "user@example.com" ]; then
    echo "Ложное срабатывание: поле email отвергнуто"
    # Это триггерит алерт в системе
fi

Чтобы снизить количество ложных срабатываний, рекомендуется:

  • Настраивать пороги уверенности для каждого типа проверки
  • Использовать контекстные метки вместо общих правил
  • Применять верификацию результатов агента ручным тестом

Пропущенные баги

Напротив, агенты могут пропускать критические ошибки, особенно если они скрыты за сложной логикой или используют нестандартные UI-паттерны. Например, Momentic может не обнаружить баг, связанный с адаптивным дизайном на мобильных устройствах, если модель обучалась преимущественно на десктопных экранах.

Пример пропущенного бага:

bash
# Агент проверяет наличие кнопки "Купить" на странице
if grep -q "Купить" index.html; then
    echo "Кнопка найдена"
else
    echo "Кнопка отсутствует"
fi

В этом случае агент уверен, что кнопка есть, но не проверяет её состояние (нажата/не нажата) и соответствие дизайну. Для устранения этого риска необходимо:

  • Добавлять дополнительные проверки состояния элементов
  • Использовать инструменты визуального анализа в связке с агентом
  • Проводить периодический аудит результатов агента ручным тестом

Конфиденциальность данных и доступ к приложению

Использование ИИ-агентов внедряет новые векторы риска, связанные с конфиденциальностью и безопасностью приложения. Агенты работают с реальными данными пользователей, и их поведение может стать точкой уязвимости, если не соблюдать строгие правила доступа.

Конфиденциальность данных

Агенты, подобные Momentic, могут обращаться к пользовательским сессиям, логам и тестовым данным. Если конфигурация агента не настроена правильно, он может случайно выгрузить чувствительную информацию. Например, при анализе авторизационных сценариев агент может собрать данные о пользователях и сохранить их в локальном хранилище.

Пример уязвимости конфиденциальности:

bash
# Агент сохраняет токены сессии в файл
mkdir -p /tmp/agent_logs
echo "session_token=abc123xyz" > /tmp/agent_logs/session.log

Для минимизации рисков рекомендуется:

  • Использовать sandbox-окружения для выполнения агентов
  • Настраивать шифрование всех собранных данных
  • Ограничить права доступа к файлам, которые агент может писать

Доступ к приложению

Агенты часто требуют широких прав для полноценного сканирования. В контексте домашних серверов и локальных приложений это может означать ненужное разграничение прав. Например, при тестировании веб-приложения на Raspberry Pi агент может получить права root, что создаёт риск несанкционированного доступа к системе.

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

bash
# Агент получает root-прав для тестирования
sudo -i && pip install momentic && momentic scan /var/www/app

Вместо этого следует использовать конфигурационный файл с явным указанием необходимых прав:

yaml
# config/agent-access.yml
app_paths:
  - /var/www/frontend
  - /var/www/backend
test_privileges:
  read_only: true
  write: false
  network_access: false

Также стоит обратить внимание на связанные материалы, описывающие лучшие практики работы с агентами:

Рекомендации по минимизации рисков

  1. Обламе доступ — всегда используйте минимально необходимые права для агента
  2. Логируйте действия — сохраняйте отчёты о том, какие элементы проверялись и какие срабатывали
  3. Периодически аудите — проверяйте результаты работы агента ручным тестом, особенно после обновлений модели
  4. Изолируйте окружение — используйте Docker-контейнеры для каждого теста, чтобы предотвратить влияние на основное приложение

«У меня не работает» — это не баг, это feature request. Однако в контексте работы с агентами важно различать технические неполадки и ложные срабатывания. Результаты тестирования должны подтверждаться ручным верификацией перед публикацией.

Часто задаваемые вопросы

### Как работает Momentic и что он умеет делать?

Momentic — это ИИ-агент, который автоматизирует весь цикл QA: от исследования интерфейса до генерации тестовых сценариев и документации багов. Он самостоятельно сканирует DOM-структуру приложения, выявляет интерактивные элементы и создаёт структурированные тест-кейсы. Для Senior QA Engineer это значит, что он может заменить рутину при повторяющихся проверках, сохраняя при этом полноту покрытия сценариев.

### Можно ли использовать Momentic для тестирования мобильных приложений?

Да, Momentic поддерживает и веб, и мобильные приложения. В примере из статьи показано, как агент запускается в Docker-контейнере и исследует веб-приложение по URL. Для Android он может обращаться к элементам через ссылки типа app://, а для iOS — к URL-адресам в App Store. Это позволяет одному инструменту охватывать все три платформы без необходимости поднимать отдельные окружения.

### Какие ограничения у Momentic и когда он не подходит?

Momentic не заменяет ручное тестирование полностью. Он лучше подходит для повторяющихся, структурированных проверок и регрессионного тестирования, но слабо справляется с визуальными регрессами, нестандартными сценариями и задачами, требующими глубокого понимания бизнес-логики. Также агент зависит от качества предоставленного URL и стабильности DOM-структуры — если интерфейс часто меняется, он может генерировать неактуальные тесты.

### Какой уровень автоматизации предоставляет Momentic в реальных проектах?

Momentic предлагает полный пайплайн: от автоматического исследования интерфейса (discover) до создания тестовых кейсов и документации багов. Он может автономно планировать сценарии, выполнять действия (навигация, ввод данных, клики) и формировать отчёты. Однако для сложных пользовательских потоков, требующих эмпатии к пользователю или нестандартных решений, всё равно нужен человеческий верификатор, который проверит качество сгенерированных результатов.

### Что считается эффективным использованием Momentic в командной работе?

Оптимальная стратегия — комбинировать автоматизацию Momentic с ручным тестированием. Используйте его для регрессионного тестирования критических путей, повторяющихся проверок и быстрой обнаружения очевидных багов. При этом оставьте место для исследовательского тестирования, экспериментов с новыми сценариями и работы с edge cases, где человеческий опыт даёт преимущество перед ИИ. Начните с небольшого набора ключевых маршрутов и постепенно расширяйте покрытие на основе реальных результатов.

Поделиться:TelegramX / TwitterVK

Читайте также