---
title: "Встроенный исполнитель"
id: "2236"
type: "page"
slug: "runner"
published_at: "2026-10-04T02:26:05+00:00"
modified_at: "2026-10-19T18:55:42+00:00"
url: "https://pastukhov.com/agents/test/docs/runner/"
markdown_url: "https://pastukhov.com/agents/test/docs/runner.md"
excerpt: "Прогоны выполняет исполнитель — то, что открывает страницы и проходит шаги теста. Раньше им мог…"
---

# Встроенный исполнитель

[https://pastukhov.com/agents/test/docs/runner/.md](https://pastukhov.com/agents/test/docs/runner/.md)

Прогоны выполняет **исполнитель** — то, что открывает страницы и проходит шаги теста. Раньше им мог быть только Chrome с нашим дополнением, и рядом приходилось держать постоянно включённый компьютер. Теперь исполнитель встроен в сам продукт: это безоконный браузер Chromium внутри контейнера, который выполняет прогоны сразу после установки — без дополнения и без второй машины. Ниже — когда его достаточно, а когда удобнее Chrome.

## Зачем он нужен

Смысл в том, чтобы «тест поставлен в очередь» и «тест выполняется» были одним и тем же событием. Только что установленный продукт уже умеет выполнять прогоны: расписание срабатывает ночью, когда никто не сидит за компьютером, а результат к утру ждёт вас в сводке.

Раньше этого не было: страницы открывало только дополнение в вашем Chrome, поэтому прогоны зависели от того, включён ли компьютер и открыт ли браузер. Исключение было одно — тест, целиком собранный из скриптов, выполнял сервер. Теперь браузерные прогоны тоже идут без вас.

## Встроенный исполнитель или Chrome с дополнением

Дополнение Chrome никуда не исчезло и обязательным для прогонов больше не является. Вот чем два способа отличаются:

| Что сравнить | Встроенный исполнитель | Chrome с дополнением |
| --- | --- | --- |
| Где работает | в контейнере продукта, на сервере | на вашем компьютере, в обычном Chrome |
| Нужен ли отдельный компьютер | нет | нужен, если прогоны идут по расписанию |
| Видно ли, как идёт прогон | нет — браузер безоконный | да — можно смотреть своими глазами |
| Ручная съёмка экранов и запись действий | нет | да |
| Прогоны, расписание и снимки для визуальных проверок | да | да |

Короткое правило: для расписаний и повседневных прогонов хватает встроенного исполнителя, а Chrome с дополнением держат там, где нужны глаза — посмотреть, как идёт тест, снять экран вручную, записать действие или дать модели поработать с живой страницей. Что умеет дополнение — в разделе [Дополнение Chrome](/agents/test/docs/addon)
.

## Очередь одна, а исполнителей может быть несколько

Прогон забирает тот, кто первый успел. Если онлайн и встроенный исполнитель, и Chrome, — выполнит кто-то один, а второй за этот прогон не возьмётся: дважды он не запустится. В истории прогона рядом со строкой исполнителя видно, кто именно его выполнял.

У каждого исполнителя свой **движок** — так называется браузер, в котором идёт прогон. Встроенный работает на движке Chromium, дополнение — на вашем Chrome. Это разные движки, и страницы они отрисовывают чуть по-разному, поэтому **эталоны у них раздельные**: продукт никогда не сравнивает снимок одного движка с образцом другого — иначе каждая сборка выглядела бы как сплошная переделка страницы. Движок выбирают на проект и не смешивают: переход на другой движок даёт новые эталоны, их нужно один раз просмотреть и одобрить, дальше сравнения снова стабильны. Подробности — в разделе [Эталоны](/agents/test/docs/baselines)
.

## Два режима работы

- **По требованию** — так настроено по умолчанию. В простое исполнителя нет вообще: ни браузера, ни процесса, который его обслуживает. Когда в очередь попадает прогон, продукт запускает исполнителя сам, а после работы тот завершается. Первый прогон после паузы стартует на пару секунд дольше, дальше всё идёт как обычно.
- **Постоянный** — исполнитель работает всё время, а после долгого простоя перезапускается сам, чтобы вернуть занятую память. Этот режим выбирают, когда прогоны идут непрерывно или нужен неизменно быстрый отклик.

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

## Настройки

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

| Переменная | Что задаёт | По умолчанию |
| --- | --- | --- |
| TEST_APP_RUNNER_ENABLED | включает встроенного исполнителя: 0 — выключить совсем, тогда прогоны остаются только за Chrome с дополнением | 1 |
| TEST_APP_RUNNER_ON_DEMAND | 1 — запуск по требованию, процесса в простое нет; 0 — постоянный исполнитель | 1 |
| TEST_APP_RUNNER_RECYCLE_MINUTES | в постоянном режиме: через сколько минут полного простоя перезапускать исполнителя, чтобы вернуть память; 0 — не перезапускать | 30 |
| TEST_APP_RUNNER_NAME | как встроенный исполнитель называется в списке исполнителей | Playwright (built-in) |
| TEST_APP_RUNNER_POLL_SEC | сколько секунд сервер держит запрос исполнителя, ожидая прогон из очереди (не больше 30). Поставленный в очередь прогон забирается за миллисекунды — это значение задаёт только ритм пустых проверок | 15 |
| TEST_APP_RUNNER_HEADLESS | 1 — безоконный режим (в продукте только такая сборка браузера); 0 — оконный, для него нужна полная сборка | 1 |
| TEST_APP_RUNNER_SANDBOX | изоляция браузера: 0 — выключена (так нужно для работы в контейнере), 1 — включена | 0 |
| TEST_APP_RUNNER_BROWSER_IDLE_SEC | через сколько секунд без прогонов закрывать браузер и возвращать память; 0 — не закрывать | 600 |

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

## Где это видно в интерфейсе

- **«Настройки → Тестирование UI»** — отдельная строка «Встроенный исполнитель»: доступен ли он и когда последний раз связывался с сервером. Она не путается с надписью «Дополнение подключено» — та относится только к Chrome.
- **«Операции»** — в списке исполнителей у встроенного есть пометка «встроенный». Там же видно, онлайн он или нет и какая версия браузера у него в работе.
- **Осушение и возобновление** — работают так же, как у Chrome: осушенный исполнитель доработает текущий прогон и перестанет брать новые, а после снятия паузы снова встанет в очередь за прогонами.

## Честные ограничения

- **Только безоконный режим.** В продукте одна сборка браузера — безоконная, поэтому посмотреть прогон глазами нельзя. Нужно наблюдать — оставляйте Chrome с дополнением. Оконный режим потребует доставить полную сборку браузера вручную — её в продукте нет.
- **Изоляция браузера выключена.** Так нужно, чтобы браузер вообще работал в контейнере. Он открывает только те адреса, которые вы сами задали в тестах.
- **Браузер уже включён в продукт.** Ничего не скачивается при запуске — это плюс: продукт работает и на медленном, и на закрытом от интернета сервере. Обратная сторона — браузер обновляется только вместе с продуктом, отдельно от него.
- **Один прогон за раз.** Как и Chrome, встроенный исполнитель выполняет один прогон единовременно. Если прогонов много, добавляют исполнителей: например, встроенного плюс Chrome с дополнением на другом компьютере.

Дальше: как проходит прогон и что означает его результат — в разделе [Запуски](/agents/test/docs/runs)
. Поставить исполнителя на паузу или посмотреть их список — в разделе [Операции и работоспособность](/agents/test/docs/ops)
. А если нужны ручная съёмка, записи и прогоны в живом окне — в разделе [Дополнение Chrome](/agents/test/docs/addon)
.

[← Оглавление документации](/agents/test/docs)
