![]() |
Системное тестирование игры
Доброго времени суток всем!
Имеется типичная проблема: - есть более-мене простая социалка as3-клиент/php-сервер - сыт по горло мышкокликаньем при воспроизведении сложных багов в клиенте и сервере(ведь если бага на сервере, то в 50% случаев это ещё нужно доказать, а значит, воспроизводить тебе, а не серверисту) Тут же как: Прогнал цепочку из 50 действий. Ура, бага нашлась! Вроде зачинил, надо проверить - и опять 50 дейсвий. А если только думал, что зачинил - повторяешь на бис :) Да, большинство сложных алгоритмов покрыто unit-тестами (только благодаря ним мы не сидим с дебагером в разборе ответов сервера, и с помощью них удавалось вылавливать баги, воспроизводимые в десяток шагов). Но это unit-тесты и строчить их для компонент, завязанных на многие другие толку нет - только время убивать и дополнительные зависимости в проект вносить. Нужно системное тестирование, например такой тест: - сбросить игру - юзер открыл окно "Инвентарь" - юзер выбрал морковку - проверить "произошёл переход в режим посадки" - юзер посадил морковку - проверить "юзеру дали выполнение квеста quest1_2_3" - проверить "юзеру показали окно с наградой" По крайней мере, спасение видится в этом. Интересно, кто-нибудь таки смог организовать автоматическое тестирование игры целиком? Не появляется внятной мысли, как заставить диалоговые окошки подыматься по сценарию, чтобы в них выбирались заданные элементы списка, эмулировалось нажатие мыши и результат сверялся с ожидаемым. При этом хочется не размазать по всей игре кучу неподдерживаемого кода. Поделитесь опытом пожалуйста. |
У нас есть седеющий тестер.
Мне кажется, что везде такой должен быть - это очень проблемно делать такое автоматическое тестирование. |
Это идея, конечно, хорошая :)
Приходилось работать с тестерами - классное было время: набрушил - вроде должно запускаться - а прогоним ка мы через тестера, а сами ещё чего поделаем - о, тестер нашёл багу и объяснил как она появляется - чиним - сказка! А ещё тестеры умеют обяснять как оно "должно работать", если ты забыл. Но: - мы не можем сейчас позволить себе тестера; - тестер все-таки выдает результат с куда большей задержкой, чем автоматический тест. И он загружен не только твоей задачей. |
Ну блин, какой ответ ты хотел услышать? Такие штуки очень завязаны на архитектуре приложения.
Кликнуть здесь-там-сюда - есть класс, по-моему, у wxvxw, имитирующий клик (рассылка пачки MouseEvent через getObjectsUnderPoint). Осталось только ждать разблокировки экрана в асинхронных местах. Или нужен какой-то механизм адекватного композита вьюх. У меня у главной вью были методы getView(type:Class) - возвращали нужную вью, вне положения иерархии, оттуда я получал ссылки на нужные мне элементы или вообще рассылал события от их имени, вроде Код AS3:
Но опять же, такое тестирование завязано на архитектуре. Не видя как устроено твоё приложение давать адекватные советы - очень странное занятие. |
Хотябы такой ответ получить и рассчитывал.
Цитата:
getView(TypeOfView), кстати, выглядит многобещающе - не ошибешся с типом объекта и интерфейс получения - один метод на всё про всё. Для чего использовал, если не секрет? |
У меня была странная система, в которой можно было получать всё, что присоединено в этот момент.
Контроллеры нарастали горизонтально, то есть любой контроллер мог добавить другой контроллер, и оба этих контроллера были равноправными. Но чтобы общаться между ними - приходилось как-то получать на них ссылку. Для этого и были придуманы getController(type:Class). Аналогично, левому контроллеру иногда нужно было получить ссылку на левое вью - зачем - не вспомню, и эти методы были добавлены именно для этого. Но конкретный профит я получил, когда вдруг нужно было сделать туториал - щелкай здесь, тут, здесь. В неком TutorialController я говорил вьюхам в разных частях приложения подсвечивать нужные элементы и блокировать те, куда в туториале жать не надо да и вообще, получал любую информацию и пользовательских действиях. Вышло достаточно удобно. |
Ничего себе...
Звучит дико, ведь глобальная доступность до добра не доводит. Но для тестового сценария всё-таки попробую. А как ссылки на вьюшки заносил? Всмысле вьюшки сами себя добавляли и удаляли из коллекции, или главная вюшка у себя в детях копалась и рекурсивно их по типу разыскивала при каждом вызове getView()? |
Вложений: 1
Ха, мне вост прямо сейчас дали тестовое задание написать какую-то показательную ерунду, которая бы себя логировала. Ну я решил немного усилить эффект и написать очень простенький встраиваемый язык, которым бы эта штука не только себя логировала, но и записывала команды в таком виде, чтобы потом выполнив их, программа бы точно воспроизвела действия пользователя.
Пример: Код AS3:
Т.е. код выше вызывает функцию: Код AS3:
Код AS3:
Я пока это сделал в очень общих чертах и язык очень-очень мало что умеет. Так только математику + логические операции + какие-то пару утилит. Но я думаю продолжить над этим работать, уже, если честно, то третий раз берусь. Первый раз было только на попробовать. Второй - слишком сильно размахнулся. Вот, посмотрим, что сейчас выйдет. Ближе к вечеру (или завтра), выложу сырцы куда-нибудь. Но они еще в таком состоянии, что людям лучше не показывать :) Вложение 27864 О, вот так на тестах выглядит: клик на одном из выражений - и обрабатываем результат. |
Нет, вьюшки добавляются контроллером через super.addView(). Всего было 3 типа вьюшек - GUI, которые всегда на экране — они, собственно, доступны через геттеры от главного вью, вьюшки экрана и вьюшки окон (они блокируют экран). Композитных вьюшек не было, только Главное вью -> Вью. Внутри вью могли быть свои вложенности (Display List, всё же), но это уже остается на откуп им.
Цитата:
|
как вариант можно написать бота, например как здесь, но мне это кажется перебором, кликанье ничем не заменить.
|
| Часовой пояс GMT +4, время: 19:06. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.