tester-army/e2e: агентный e2e-фреймворк нового поколения

«AI где нужно. Код там, где важна точность.» — девиз TesterArmy

e2e — полностью открытый фреймворк от TesterArmy (YC P26), запущенный 1 октября 2026 года. Анонс собрал около 449 тысяч просмотров и более 1000 звёзд на GitHub за первые 24 часа.

Это TypeScript-фреймворк, который позволяет агентным шагам и точным детерминированным assertions сосуществовать в одном тесте, запускаясь на Web, iOS и Android через единый API.


Что это и для кого

В TesterArmy ставят целью сделать end-to-end тестирование максимально простым. Их инструмент e2e направлен прежде всего на:

  • Frontend- и fullstack-разработчиков, которые хотят описывать сценарии на естественном языке вместо написания сотен строк кода;
  • QA-инженеров, ищущих гибридный подход: детерминированные локаторы + AI-агент там, где UI непредсказуем;
  • Команды с мобильной и веб-разработкой, которым нужна единая кодовая база тестов.

Фреймворк лицензирован под Apache 2.0. Вы пишете точные локаторы там, где нужна уверенность, даёте агенту цель там, где прописывать каждый клик нецелесообразно, и запускаете один и тот же набор тестов на Web, iOS и Android.

ℹ Кто стоит за проектом
TesterArmy — стартап-участник Y Combinator (P26). Основной контрибьютор — Оскар Квасьневски (@o_kwasniewski). Репозиторий написан на TypeScript, имеет 2800+ звёзд и более 100 форков по состоянию на октябрь 2026 года.

Ключевые возможности

1. Гибридный API: детерминированный + агентный

Фреймворк смешивает два типа API: детерминированные — для локаторов и assertions, и агентные — для шагов вроде agent.act() и agent.assert(). Оба могут жить в одном файле теста.

// tests/checkout.e2e.ts
import { test, expect } from 'e2e';

test('a member upgrades to Pro', async ({ app, agent, screen }) => {
  await app.open('/settings/billing');

  // Агентный шаг: цель на естественном языке
  await agent.act('upgrade the workspace to the Pro plan');

  // Агентная assertion
  await agent.assert('the invoice preview shows a prorated amount');

  // Детерминированная assertion (Playwright-стиль)
  await expect(screen.getByRole('status')).toContainText('Pro');
});

2. Кеширование шагов агента

Агентный шаг, подтверждённый последующей assertion, записывает свои действия — при следующем запуске они воспроизводятся без обращения к модели, пока приложение не изменится. e2e запоминает действия агента и воспроизводит их там, где это возможно, не вызывая модель повторно.

💡 Экономия токенов
Кеш — ключевое преимущество e2e над «чистыми» AI-тест-раннерами. Агент один раз разбирается с UI, записывает маршрут — и следующие прогоны бесплатны с точки зрения LLM-вызовов, пока UI не меняется.

3. Единый API для Web и Mobile

e2e поддерживает Web и Mobile «из коробки»: веб- и мобильные приложения тестируются через один и тот же API в рамках одного набора тестов.

Браузерный движок (@e2e-dev/web) работает через Playwright с Chromium, Firefox и WebKit. Мобильный движок (@e2e-dev/mobile) обслуживает iOS-симуляторы и Android-эмуляторы через agent-device.

4. BYOM — принеси свою модель

Вы можете использовать собственную подписку, API-ключ или локальную модель. Поддерживается подключение любой модели через Vercel AI Gateway, или вход через уже имеющуюся подписку ChatGPT, GitHub Copilot или Grok.

5. Безопасность учётных данных

Тестовые учётные данные хранятся в переменных окружения, вне контекста модели. Агент может вводить пароль в форму входа, не передавая его в промпт — это важно при работе со сторонними API.

6. MCP-сервер и интеграция с coding-агентами

e2e поставляется с agent skill и MCP-сервером. С ними Claude Code, Cursor или Codex могут открывать приложение, исследовать его, писать тесты с локаторами из реального UI и читать отчёт об ошибках при поломке.

7. GitHub-репортер и CI/CD

Пакет @e2e-dev/github — репортер, публикующий результаты тестов в виде комментария к pull request. Тесты можно запускать локально или в CI без дополнительной настройки.


Как это работает: архитектура


graph TD
    A[Написание теста .e2e.ts] --> B{Тип шага?}
    B -->|Детерминированный| C[Playwright-локатор / assertion]
    B -->|Агентный agent.act| D{Есть кеш?}
    D -->|Да| E[Воспроизведение без LLM-вызова]
    D -->|Нет| F[LLM-агент управляет UI]
    F --> G[Assertion подтверждает результат]
    G --> H[Шаг записывается в кеш]
    C --> I[Результат теста]
    E --> I
    H --> I
    I --> J[GitHub PR Comment / CI Report]


Пакеты фреймворка

Фреймворк состоит из нескольких пакетов:

ПакетНазначение
e2eSDK, раннер и CLI
@e2e-dev/webБраузерный движок (Chromium, Firefox, WebKit через Playwright)
@e2e-dev/mobileiOS и Android через agent-device
@e2e-dev/githubРепортер для PR-комментариев
@e2e-dev/kernelHosted-браузеры для web-движка
@e2e-dev/easHosted iOS-симуляторы и Android-эмуляторы
@e2e-dev/decisionDecision-model executors для семантических actions и assertions

Документация поставляется вместе с пакетом e2e, поэтому coding-агенты могут читать её офлайн прямо из node_modules/e2e/docs.


Быстрый старт

Инициализация выполняется одной командой: npx e2e init. Она задаёт вопросы о движке (web или mobile) и провайдере модели, затем создаёт конфигурацию и пример теста.

# Инициализация проекта
npx e2e init

# Запуск тестов
npx e2e run

# Очистка кеша агента
npx e2e cache clear

# Добавление MCP skill для coding-агентов
npx skills add tester-army/e2e

Пример конфига:

// e2e.config.ts
import { web } from '@e2e-dev/web';
import { createAgent } from 'e2e';

export default {
  targets: [{ engine: web({ url: 'https://your-app.com' }) }],
  agents: {
    default: createAgent({
      model: gateway('openai/gpt-4o'),
    }),
  },
};
📝 Пример: тест с агентом и детерминированными assertions
import { test, expect } from 'e2e';

test('пользователь оформляет заказ', async ({ app, agent, screen }) => {
  await app.open('/cart');
  await agent.act('оформи заказ с доставкой на следующий день');
  await agent.assert('отображается подтверждение заказа');
  await expect(screen.getByRole('heading')).toContainText('Спасибо за заказ');
});

Тарифы и цены

e2e доступен на npm под лицензией Apache 2.0 — это означает, что сам фреймворк полностью бесплатен.

Что может стоить денег:

  • LLM API — вы платите за токены своему провайдеру (OpenAI, Anthropic, Vercel AI Gateway и т.д.). Благодаря кешированию расходы минимизируются.
  • @e2e-dev/kernel — hosted-браузеры (Kernel): тарификация на стороне провайдера.
  • @e2e-dev/eas — hosted iOS/Android симуляторы через Expo EAS: тарификация Expo.
  • Платформа TesterArmy — облачная платформа для запуска тестов по расписанию и на каждый PR (отдельный продукт, цены уточняются).
⚠ Статус pre-1.0
e2e находится в активной разработке на пути к версии 1.0. API и конфигурация могут меняться между минорными релизами. Не рекомендуется использовать в критических production-пайплайнах без стратегии обновления.

Плюсы и минусы

✅ Плюсы❌ Минусы
Open source, Apache 2.0, без vendor lock-inPre-1.0: API может меняться между релизами
Единый API для Web, iOS и AndroidDesktop-приложения и другие платформы пока не поддерживаются
Кеширование агентных шагов — экономия токеновТребует навыков TypeScript (не no-code решение)
BYOM: любой LLM-провайдер или локальная модельВизуальное регрессионное тестирование (image diff) не поддерживается
MCP-сервер для интеграции с Claude Code, CursorПри миграции с Playwright конфиги нужно переписывать заново
Безопасное хранение credentials вне LLM-контекстаМолодой проект — экосистема плагинов пока мала
GitHub PR-репортер «из коробки»Hosted-инфраструктура (браузеры, симуляторы) — платная

Сравнение с альтернативами

Параметрtester-army/e2ePlaywrightMaestro
ЛицензияApache 2.0, бесплатноApache 2.0, бесплатноApache 2.0, бесплатно
Язык тестовTypeScript (агент + детерм.)JS/TS/Python/Java/.NETYAML (декларативный)
AI-агент✅ Встроен, BYOM⚠️ Через Copilot/MCP❌ Нет
Кеш агент-шагов✅ Да❌ Нет❌ Нет
Web✅ Chromium/Firefox/WebKit✅ Chromium/Firefox/WebKit✅ Ограниченно
Native iOS/Android✅ Да❌ Только эмуляция✅ Да
Кривая обученияСредняя (TypeScript)Средняя–высокаяНизкая (YAML, no-code)
Визуальный регрессион❌ Нет✅ Есть❌ Нет
MCP-сервер✅ Да❌ Нет❌ Нет
Статусpre-1.0, активноСтабильныйСтабильный (~14k ⭐)
GitHub звёзды~2800 (октябрь 2026)70k+~14k

Вывод: e2e занимает уникальную нишу — это единственный фреймворк, объединяющий детерминированные тесты Playwright-стиля с нативным AI-агентом и кешированием, работающий одновременно на web и нативных мобильных платформах.


Вердикт: кому подойдёт?

e2e идеально подходит:

  • Командам на TypeScript, разрабатывающим и веб-, и мобильные приложения одновременно;
  • QA-инженерам и разработчикам, уставшим поддерживать хрупкие Playwright-тесты на динамичных UI;
  • Тем, кто хочет интегрировать AI-агент в тестирование без переплаты за токены благодаря кешированию;
  • Командам, использующим Claude Code, Cursor или Codex — MCP-интеграция позволяет агенту писать тесты самостоятельно.

Подождать стоит:

  • Если нужна production-стабильность прямо сейчас (pre-1.0);
  • Если критичен visual regression testing;
  • Если команда без разработчиков (нет no-code опции).
💡 Итоговый рейтинг
8/10 — Смелая и технически грамотная идея. Кеширование агентных шагов — настоящий прорыв для AI-тестирования. Единственное, что сдерживает более высокую оценку — статус pre-1.0 и отсутствие visual regression. Следить за проектом стоит прямо сейчас.

Полезные ссылки