Прогоны выполняет исполнитель — то, что открывает страницы и проходит шаги теста. Раньше им мог быть только Chrome с нашим дополнением, и рядом приходилось держать постоянно включённый компьютер. Теперь исполнитель встроен в сам продукт: это безоконный браузер Chromium внутри контейнера, который выполняет прогоны сразу после установки — без дополнения и без второй машины. Ниже — когда его достаточно, а когда удобнее Chrome.
Зачем он нужен
Смысл в том, чтобы «тест поставлен в очередь» и «тест выполняется» были одним и тем же событием. Только что установленный продукт уже умеет выполнять прогоны: расписание срабатывает ночью, когда никто не сидит за компьютером, а результат к утру ждёт вас в сводке.
Раньше этого не было: страницы открывало только дополнение в вашем Chrome, поэтому прогоны зависели от того, включён ли компьютер и открыт ли браузер. Исключение было одно — тест, целиком собранный из скриптов, выполнял сервер. Теперь браузерные прогоны тоже идут без вас.
Встроенный исполнитель или Chrome с дополнением
Дополнение Chrome никуда не исчезло и обязательным для прогонов больше не является. Вот чем два способа отличаются:
| Что сравнить | Встроенный исполнитель | Chrome с дополнением |
| Где работает | в контейнере продукта, на сервере | на вашем компьютере, в обычном Chrome |
| Нужен ли отдельный компьютер | нет | нужен, если прогоны идут по расписанию |
| Видно ли, как идёт прогон | нет — браузер безоконный | да — можно смотреть своими глазами |
| Ручная съёмка экранов и запись действий | нет | да |
| Прогоны, расписание и снимки для визуальных проверок | да | да |
Короткое правило: для расписаний и повседневных прогонов хватает встроенного исполнителя, а Chrome с дополнением держат там, где нужны глаза — посмотреть, как идёт тест, снять экран вручную, записать действие или дать модели поработать с живой страницей. Что умеет дополнение — в разделе Дополнение Chrome.
Очередь одна, а исполнителей может быть несколько
Прогон забирает тот, кто первый успел. Если онлайн и встроенный исполнитель, и Chrome, — выполнит кто-то один, а второй за этот прогон не возьмётся: дважды он не запустится. В истории прогона рядом со строкой исполнителя видно, кто именно его выполнял.
У каждого исполнителя свой движок — так называется браузер, в котором идёт прогон. Встроенный работает на движке Chromium, дополнение — на вашем Chrome. Это разные движки, и страницы они отрисовывают чуть по-разному, поэтому эталоны у них раздельные: продукт никогда не сравнивает снимок одного движка с образцом другого — иначе каждая сборка выглядела бы как сплошная переделка страницы. Движок выбирают на проект и не смешивают: переход на другой движок даёт новые эталоны, их нужно один раз просмотреть и одобрить, дальше сравнения снова стабильны. Подробности — в разделе Эталоны.
Два режима работы
- По требованию — так настроено по умолчанию. В простое исполнителя нет вообще: ни браузера, ни процесса, который его обслуживает. Когда в очередь попадает прогон, продукт запускает исполнителя сам, а после работы тот завершается. Первый прогон после паузы стартует на пару секунд дольше, дальше всё идёт как обычно.
- Постоянный — исполнитель работает всё время, а после долгого простоя перезапускается сам, чтобы вернуть занятую память. Этот режим выбирают, когда прогоны идут непрерывно или нужен неизменно быстрый отклик.
Зачем так сделано: сервер, на котором почти всегда тихо, не должен держать в памяти браузер просто так. В простое продукт не тратит ни процессор, ни лишнюю память, поэтому его спокойно ставят на небольшую машину, где живут и другие программы.
Настройки
Все они необязательны — прогоны работают сразу после установки. Менять их стоит только по делу: например, если хочется вернуть постоянный режим или дать браузеру дольше жить в памяти.
| Переменная | Что задаёт | По умолчанию |
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 с дополнением на другом компьютере.
Дальше: как проходит прогон и что означает его результат — в разделе Запуски. Поставить исполнителя на паузу или посмотреть их список — в разделе Операции и работоспособность. А если нужны ручная съёмка, записи и прогоны в живом окне — в разделе Дополнение Chrome.