Введение Здравствуйте, меня зовут Евгений.
Я младший разработчик в команде новой мобильной MMORPG. Разработка игры в жанре MMORPG — сложный и трудоемкий процесс.
В этих играх много механик, которые часто накладываются друг на друга.
Изменения в одной части игры могут повлиять на совершенно другую.
Итак, квестов в нашей игре сотни, и каждый из них необходимо протестировать.
Например, с локации удалили моб, а после теста выяснилось, что он нужен в середине сюжетной цепочки квестов.
Для таких случаев можно нанять армию QA, которые каждый день будут тщательно проверять все квесты в игре.
Или вы можете делегировать тестирование квестов ботам!
Почему боты?
Главное преимущество ботов в том, что они действуют по одному алгоритму.Если они застряли на квесте, который спокойно выполняли вчера, то стоит обратить внимание на этот квест. Но неизменность алгоритма является еще и главной слабостью ботов — они не способны выйти за пределы написанного мной кода.
Они не могут воспроизвести сложные случаи.
Поэтому боты — это всего лишь дополнение к большой системе тестирования в моей компании.
Для наших QA они отличные помощники, готовые взять на себя самую монотонную и скучную работу.
Что проверяют боты?
Тестирование ботов охватывает следующие области:- Квесты — боты начинают исследовать игровой мир с первого уровня.
Они выполняют квесты, изучают таланты, улучшают снаряжение и проверяют, можно ли выполнить квест, если следовать стандартному алгоритму.
- Ежедневные газеты — боты проверяют квесты зон дейла, корректность работы сервера при смене пула квестов в зонах дейла.
- ПвП Арена — в игре есть несколько режимов арены, различающихся механикой.
Проверяется доступность всех режимов арены и начисление наград за победу.
Также тестируется работа подбора игроков на арене.
- PvE-подземелья — подземелья в Скайлоре генерируются случайным образом.
Поэтому боты проверяют, можно ли найти и убить финального босса.
Также тестируется подбор игроков для подземелий.
- Стресс-тестирование игровой сервер.
Они помогают проверить, способен ли сервер выдержать нагрузку большого количества активных игроков.
Стек технологий
Для организации системы тестирования мы используем:- Microsoft .
NET 5
— фреймворк, в котором написаны сами боты: их логика и модуль управления. - Дженкинс — инструмент, позволяющий запускать тестирование в назначенное время и с определенной регулярностью.
- ЭластичныйПоиск — Отвечает за сбор и хранение результатов испытаний.
- Кибана — позволяет визуализировать данные из ElasticSearch.
Что это за боты?
Бот-система написана на C#, и выбор языка не случаен.Наш игровой сервер написан на C#, это позволяет повторно использовать код сервера и написанные для него библиотеки.
Проект состоит из двух частей: модуля управления всеми ботами и поведенческого модуля.
Модуль управления представляет собой проект ASP.NET с графическим интерфейсом.
Он отвечает за связь с игровым сервером, подтягивает необходимые серверные API и дает команду на запуск бота модулю поведения.
Модуль управления имеет собственный интерфейс пользовательского интерфейса для простоты использования.
Для каждого модуля также существует набор методов API. Модуль поведения отвечает за поведение ботов.
Важным моментом является то, что с точки зрения игрового сервера боты — это обычные игроки.
Этот модуль обрабатывает и отправляет пакеты клиент-сервер.
На модуль управления ссылаются один или несколько модулей поведения, каждый из которых запускает ботов.
Модули поведения можно запускать на нескольких машинах.
Это делает систему масштабируемой и позволяет создавать огромную нагрузку на игровой сервер.
Поведение бота
Логика ботов довольно проста.Каждые несколько секунд бот выполняет одно из доступных ему действий.
Они расположены в порядке приоритета выполнения.
Например:
- Атакуйте ближайшего врага
- Начать диалог с NPC
- Исследуйте таланты
Бот убил всех противников, но доступных диалогов нет, в этом случае бот попытается изучить новый талант. На самом деле список действий бота гораздо больше, а логика внутри действий сложнее, но суть примерно такая.
Как проводится тестирование?
Как я уже говорил, тесты происходят ежедневно, их запускает спецзадание в Дженкинсе.Конвейер задач состоит из трех этапов:
- Обновите все сервисы, участвующие в тестировании, чтобы тестировалась последняя версия игры.
- Этап тестирования.
Дженкинс отправляет запрос API модулю управления, чтобы начать тестирование.
Получив команду, модуль управления запускает ботов.
Боты выполняют заданные цели и в конце генерируют отчет о тестировании.
- Обработка отчетов и отправка результатов в Elasticsearch, отправка уведомлений в случае провала теста.
Обработка результатов
Получив результаты от всех ботов, модуль управления начинает их проверять.Для примера рассмотрим результат тестирования квестов.
За отведенное время бот должен выполнить определенное количество квестов.
Модуль управления проверяет, истекло ли время тестирования, какие квесты были выполнены успешно, а в каких возникли проблемы.
А если бот отключился и не смог завершить тестирование, то мы увидим код произошедшей ошибки.
Для каждого вида тестирования существует отдельный отчет, но каждый из них должен содержать:
- Статус тестирования — имеет два состояния ОК и Сбой.
- Описание результата — объяснение статуса.
Если боты не уложились в указанное время, будет написано «Время тестирования истекло».
А если один из ботов разбился, то «Разбился какой-то бот»
- Персональные результаты бота — указывают никнейм бота, его класс, прогресс тестирования и причину вылета в случае отключения бота.
Визуализация отчета
Мы используем Kibana для создания отчетов.Он содержит информационную панель с графиком для каждого типа тестирования и ссылкой на последний журнал тестирования.
Kibana — очень удобный и гибкий инструмент, позволяющий получить красивое представление отчета и не требующий специальных навыков программирования.
Особенности и предположения
На первый взгляд тестирование проходит гладко, но, как и везде, здесь тоже есть подводные камни.Например, боты мгновенно убивают всех противников, используя чит-код с одним выстрелом.
Если мы честно атакуем каждого оппонента, тестирование займет гораздо больше времени, а наша цель — протестировать максимальное количество контента в кратчайшие сроки.
В некоторых квестах нужно выбрать правильный ответ, так как боты не могут анализировать текст вопроса, и ответы сортируются в случайном порядке.
Как правило, вариантов ответа не более четырех, поэтому правильный выбирается достаточно быстро.
Иногда доступные квесты заканчиваются, и чтобы получить новые, обычному игроку нужно потратить время на повышение уровня.
Боты делают это проще: с помощью чита они повышают свой уровень и получают доступ к новым квестам.
Есть квесты с интересной и необычной уникальной механикой, но обучение бота выполнению каждого из них занимает слишком много времени и зачастую неэффективно.
Такие квесты мы заранее добавляем в игнор-лист, и бот выполняет их с читом в момент получения.
Одним из таких квестов является стелс-миссия.
В нем вам нужно добраться до точки, путь к которой патрулируется вражеской охраной.
Если они заметят игрока, то отправят его в начало пути.
Стражи постоянно движутся, и вместе с их движением меняется путь к точке.
Бот не умеет строить такие сложные маршруты, поэтому мы добавили этот квест в список игнорируемых.
Возможно, вы заметили этот список на скриншоте результатов теста.
Заключение
Внедрение тестирования ботов в наш проект позволяет нам регулярно находить различные ошибки и недостатки в наших сервисах.Это экономит нам много времени и помогает сосредоточиться на других, не менее важных вещах.
Как сказал мой коллега: «После появления ботов я чувствую себя гораздо спокойнее, меняя что-то в серверном коде, потому что знаю, что за мной стоят боты, которые помогут мне найти ошибку в глубине контента».
Теги: #игры #Разработка игр #разработчик игр #разработка игр #искусственный интеллект #qa #тестирование #C++ #.
NET #Тестирование игр #автоматизация тестирования #автоматизация качества #skylore #skylor
-
Проекту Netbsd Исполняется 15 Лет
19 Oct, 24 -
Красивый Дата-Центр От Mac Pro
19 Oct, 24 -
Установка Twrp 2.0 На Amazon Kindle Fire
19 Oct, 24 -
Открытая Ран
19 Oct, 24