TestTrout
TestTrout
Тестовый ассистент для приложений, созданных ИИ.
Запускайте его как приложение или передайте своему кодинг-агенту через MCP. В любом случае он пишет тесты, которых у вашего приложения никогда не было, и сообщает, когда они падают.
Форель — индикаторный вид. Она водится только в чистой, насыщенной кислородом воде — найдёте её в ручье, значит, вода здорова, и проверять её самому не нужно.
Именно так выглядит хороший набор тестов: не рутина, а сигнал, который можно считать с одного взгляда.
Проблема
Кодинг-агенты быстро выпускают код. Они также тихо всё ломают, а в приложениях, которые они создают — Lovable, v0, Bolt, собственный React на Vercel — почти никогда нет тестов. Поэтому цикл заканчивается фразой «выглядит нормально» от того, кто только что написал код.
TestTrout замыкает этот цикл. Он читает репозиторий, подключается к запущенному деплою, выясняет, что не покрыто тестами и в каком порядке это важно, пишет настоящие тесты, запускает их и сообщает результаты, на которые действительно можно опираться.
Related MCP server: Lastest
Запуск
pip install testtrout
trout upЭто запускает всё: хранилище, фоновый воркер и интерфейс на
localhost:7411. Никакого Docker, демонов и баз данных для установки — хранилище на SQLite
в ~/.testtrout, а воркер работает в том же процессе.
Затем привяжите репозиторий через интерфейс или терминал:
trout link ~/code/my-app # a folder you already have
trout link --github owner/name # cloned with your GitHub tokenПривязка локальной папки никогда её не изменяет. Сканирование запускается автоматически, а на вкладке Setup есть все настройки: деплои, Supabase, тестовые аккаунты, провайдер моделей.
Две вещи делают это безопасным и полезным:
Он сообщает, какие учётные данные нужны вашему приложению, обнаруживая их при чтении исходников — какие переменные оно запрашивает, для чего каждая, и в какой строке встречается. Никакого повторного вывода того, что код и так уже заявляет.
Неполный набор даёт неполный набор тестов. Имея только URL, вы можете зондировать и запускать API-тесты; добавьте анонимный ключ и второй аккаунт — и станут возможны тесты авторизации. Каждая заблокированная возможность называет единственную следующую вещь, которая ей нужна, а не «настройте как следует».
Секретные значения записываются в .env, исключённый из git; в коммитимую конфигурацию
попадают только ссылки env:NAME, а буквальный секрет, введённый в поле конфигурации,
отклоняется.
Или оставайтесь в своём кодинг-агенте
Приложение — один из способов входа, но не единственный. Всё, что оно умеет, доступно в виде типизированных MCP-инструментов и CLI-команд, так что тем, кто не хочет покидать свой редактор, и не придётся:
pip install 'testtrout[mcp]'
trout mcp /path/to/your/projectНаправьте своего агента на навык в .claude/skills/ или скажите ему:
Используй MCP-сервер TestTrout. Просканируй репозиторий, покажи, что не покрыто тестами, отсортировав по важности, составь тесты для пяти лучших и запусти их.
Тринадцать инструментов, привязанных к одному проекту, чтобы агент не мог действовать не с тем репозиторием:
| Понимание кодовой базы. Без API-ключа и сети. |
| Посмотреть, что на самом деле делает задеплоенное приложение, в реальном браузере. |
| Ранжировать непокрытое тестами и объяснить почему. |
| Черновик, ревью, компиляция в настоящие тестовые файлы. |
| Выполнить, доказать детерминированность, прочитать доказательства. |
| Чего не хватает и как это исправить. |
Плюс trout://surfaces, trout://intent, trout://config, trout://scenarios
в качестве ресурсов, чтобы объёмное состояние никогда не вытесняло контекстное окно агента.
Что он понимает
trout scan полностью детерминирован — без модели, без сети, безопасен для только что
склонированного репозитория. В типичном приложении на Supabase он находит:
Поверхность | Пример |
Экраны |
|
Операции с данными |
|
RLS-политики |
|
Серверные действия | Функции |
Обработчики маршрутов |
|
Сторонние сервисы | Stripe, Resend — граница подстановки |
Схема | Таблицы, столбцы, внешние ключи, статус RLS |
Он также сообщает, когда таблица записывается из браузерного кода без row-level security — то есть доступна для записи всем через анонимный ключ. Обычно это становится новостью.
Почему тестам можно доверять
Он строит базовую линию, а не догадки по каждому PR. Тест, выведенный из только что изменённого кода, по построению утверждает, что новое поведение корректно — он не может поймать регрессию. TestTrout сначала сертифицирует набор тестов против работающего деплоя, поэтому сбой что-то значит.
Детерминированное ядро, модель по краям. Сканирование, ранжирование, выполнение и классификация сбоев никогда не вызывают модель. Модель только интерпретирует ваше намерение, уточняет формулировки и выбирает, какие наблюдаемые элементы проверять. Каждый рейтинг — это сумма именованных вкладов:
critical authorization A user cannot read another user's rows in payments 100
· critical surface
· policy: exists (select 1 from orders o where o.id = payments.order_id …)Каждое утверждение несёт своё происхождение. derived — из политики, observed — в
реальном браузере, или inferred — моделью, и одно лишь inferred никогда ничего
не блокирует.
Сбой классифицируется до того, как о нём сообщается. Только assertion_failure —
сигнал продукта. Сбои аутентификации, недоступные базы данных и заблокированные сторонние
вызовы относятся к обвязке, и неубедительный прогон никогда не повышается до успешного.
Всё из терминала
trout scan # understand the code
trout init # connect a deployment
trout gaps # what's missing, ranked, with reasons
trout run # execute, with evidence behind every resultКаждая команда поддерживает --json. Полное руководство в docs/setup.md.
Как это хранится
Ваш набор тестов остаётся в репозитории, в коммитах и доступен для ревью:
.trout/scenarios/*.yaml what each test asserts, in plain language
.trout/config.yaml deployments and env: references, never secrets
tests/trout/ generated Playwright and Vitest filesИстория прогонов, покрытие с течением времени и очередь заданий хранятся в SQLite
в ~/.testtrout. Такое разделение неслучайно: набор тестов должен лежать рядом с кодом,
где его может проверить pull request, а вопросы, на которые файлы ответить не могут —
становится ли тест более флакающим, растёт ли покрытие — должны лежать в базе данных.
Необязательное веб-представление
trout webПокрытие с первого взгляда, ранжированный список пробелов, ревью сценариев, история
прогонов с доказательствами, живой журнал. Те же файлы .trout/, что и в CLI — без базы
данных, без хостинга, только loopback. Полностью опционально; CLI и MCP самодостаточны.
Безопасность
Инструменту нужны учётные данные вашей базы данных, и он может управлять вашим деплоем, поэтому гарантии обеспечиваются кодом, а не документацией:
Продакшн по умолчанию доступен только для чтения. Изменяющие запросы блокируются на сетевом уровне, если точка входа явно не помечена как
disposable. Защита находится ниже навигации, потому что «просто загрузка страницы — это чтение» — ложь: многие такие приложения пишут при монтировании. Ни один агент и ни один клик в вебе не может изменить эту настройку.Сторонние сервисы перехватываются. Тестовый прогон не может списать деньги с карты или отправить письмо клиенту. Несопоставленные исходящие запросы громко падают; мок, который молча ничего не сопоставляет, — это способ, которым набор тестов показывает зелёный, ничего не тестируя.
Секреты не попадают в коммитимые файлы.
.trout/config.yamlсодержит только ссылкиenv:. Значения живут в.env, исключённом из git.Ничего не хостится. Ничего не покидает вашу машину, кроме вызовов выбранного вами провайдера моделей. Никакой телеметрии.
Провайдеры моделей
Anthropic, OpenAI или Kimi — или любая OpenAI-совместимая конечная точка через base_url.
model:
provider: anthropic
api_key: env:ANTHROPIC_API_KEYАнализ никогда не вызывает модель, поэтому trout scan, trout gaps и trout run
работают вообще без ключа.
Поддерживаемые стеки
React + Vite (Lovable, v0, Bolt) и Next.js App Router, на TypeScript, с Supabase, задеплоенные где угодно, доступном по HTTP. Аутентификация через Supabase, Clerk или NextAuth.
Осознанно узкий. Глубина на одном стеке лучше поверхностного покрытия многих — а эти кодовые базы достаточно регулярны, чтобы статический анализ был на них по-настоящему точен. Другие стеки — в одном адаптере: см. docs/adapters.md.
Дорожная карта
✅ | Анализ репозитория, зондирование деплоя, ранжирование пробегов |
✅ | Создание сценариев, генерация, выполнение, сертификация |
✅ | MCP-сервер, CLI и локальное приложение с хранилищем и воркером |
✅ | Выбор тестов на основе изменений, дифференциация базовой ветки |
✅ | Мультирепозиторность: привязка локальных папок или клонирование с GitHub-токеном |
✅ | Полная настройка из интерфейса или CLI с обнаружением учётных данных |
🔜 | Проверки GitHub pull request |
🔜 | Индекс наблюдаемого покрытия (сегодняшний выбор использует заявленное покрытие) |
Участие
Добавление фреймворка, провайдера аутентификации или тест-раннера означает реализацию одного протокола и регистрацию точки входа — без форка. См. CONTRIBUTING.md и docs/adapters.md.
Полный набор тестов запускается офлайн без API-ключа. Это осознанное решение, и его стоит сохранить.
Лицензия
Apache 2.0
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn AI-powered MCP server that automates web testing workflows by enabling recording, execution, and discovery of tests through natural language prompts.68Apache 2.0
- FlicenseNot gradedqualityAmaintenanceMCP serverr for Lastest to manage your tests, AI create them, run them, and speed up AI-development.16
- AlicenseAqualityAmaintenanceAn MCP server that brings senior-QA discipline to AI coding assistants, enabling test planning, TDD, mutation testing, and code review.486Apache 2.0
- AlicenseBqualityAmaintenanceAn MCP server for validating AI-generated code through automated browser testing, evidence collection, and intelligent diagnostics.100118MIT
Related MCP Connectors
Official MCP server for Qase — manage test cases, runs, suites, defects via AI tools.
MCP server for generating rough-draft project plans from natural-language prompts.
Conformance checker for MCP servers. Free, no key, verdicts recomputable and re-measured daily.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/DrDroidLab/TestTrout'
If you have feedback or need assistance with the MCP directory API, please join our Discord server