Перейти к содержимому
Testing Beyond Tests
Назад

Почему большинство подходов к автоматизации игр сводятся к двум моделям

Когда инженеры впервые сталкиваются с автоматизацией игр, они обычно начинают искать аналог Selenium или Playwright для GameDev.

Логика кажется очевидной:

На практике такого инструмента до сих пор не существует.

За время работы над несколькими игровыми проектами я заметил, что большинство решений в конечном итоге сводятся к двум фундаментальным моделям:

Практически все остальные подходы являются вариацией одной из них или комбинацией обеих.

Почему GameDev оказался в другой ситуации

Веб-автоматизация опирается на DOM.

Мобильная автоматизация опирается на accessibility frameworks.

У автоматизации существует стандартизированный способ взаимодействия с приложением. Она может найти элемент, получить его состояние и выполнить действие.

Игры устроены иначе.

Они могут использовать Unity, Unreal, собственный движок или полностью кастомный UI-фреймворк. Для внешнего инструмента игра часто выглядит просто набором пикселей.

Нет единого протокола взаимодействия.

Нет универсального дерева элементов.

Нет стандарта, который одинаково работал бы между разными проектами.

Именно поэтому индустрия до сих пор не получила свой Selenium.

Модель №1. Engine Integration

Первая модель строится вокруг прямого взаимодействия с игрой.

Для этого создаётся специальный слой интеграции:

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

Например:

GetPlayerState()
GetQuestStatus()
GetInventory()
GetObjectProperty()

Подобный подход обычно оказывается:

Но требует инвестиций со стороны команды разработки.

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

Почему крупные команды часто приходят к собственным решениям

На рынке существуют готовые инструменты.

Например, AltTester для Unity.

Для небольших Unity-команд это может быть хорошей отправной точкой, позволяющей быстро получить работающую автоматизацию без серьёзных изменений в проекте.

Однако по мере роста проекта требования начинают выходить за рамки поиска объектов.

Появляется необходимость:

В этот момент собственный слой интеграции часто начинает давать больше возможностей, чем универсальный инструмент.

Особенно если проект существует несколько лет и над ним работают десятки или сотни инженеров.

Модель №2. Visual Validation

Вторая модель работает с визуальным представлением игры.

Для этого используются:

Visual Validation отвечает на вопрос:

Правильно ли игра выглядит для игрока?

Такие проверки позволяют находить:

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

Engine и Visual — не конкурирующие подходы

После знакомства с двумя моделями возникает естественный вопрос:

Какой подход лучше?

На практике это часто оказывается неправильным вопросом.

Engine Integration и Visual Validation решают разные задачи.

Они не являются альтернативами друг другу.

Они проверяют разные аспекты качества продукта.

Engine Integration отвечает на вопрос:

Правильно ли работает игра?

Например:

Engine-тесты работают с логикой и состоянием системы.

Visual Validation отвечает на вопрос:

Правильно ли выглядит игра?

Например:

Visual-тесты работают с представлением системы.

Именно поэтому один подход не заменяет другой.

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

И наоборот — сцена может выглядеть идеально, но награда может не начисляться или квест может не завершаться.

Зрелая архитектура автоматизации

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

Engine Driver

Предоставляет доступ к внутреннему состоянию игры.

GetPlayerState()
GetObjectProperty()
GetQuestStatus()

Test Harness / Cheats

Отвечает за подготовку тестовых сценариев и игровых состояний.

SetPlayerLevel()
GrantCurrency()
UnlockCharacter()
TriggerEvent()
ResetAccount()

Visual Validation Layer

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

Каждый слой решает свою задачу и может развиваться независимо от остальных.

Почему всё сводится именно к этим двум моделям

На самом деле в автоматизации игр нет принципиально новых идей.

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

Разница заключается не в самих подходах.

Разница заключается в отсутствии единого стандарта.

Веб пришёл к DOM.

Мобильные платформы пришли к accessibility frameworks.

GameDev пока не пришёл к общему протоколу взаимодействия между автоматизацией и игрой.

Поэтому большинство решений в конечном итоге строятся вокруг двух базовых идей:

На мой взгляд, именно поэтому спустя столько лет индустрия так и не получила единый “Selenium для игр”.

Проблема не в отсутствии инструментов или идей.

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

И для проверки этих двух аспектов качества по-прежнему требуются разные подходы.