Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Системное тестирование игры (http://www.flasher.ru/forum/showthread.php?t=178242)

expl 18.04.2012 23:36

Цитата:

Сообщение от PainKiller (Сообщение 1075821)
как вариант можно написать бота, например как здесь, но мне это кажется перебором, кликанье ничем не заменить.

Ссылка битая

2 Psycho Tiger: т.е. все равнозначные контроллеры наследуются от общего, который использует одно и то же хранилище вьюшек? Ну да не суть. Идею понял, в настоящий момент пытаюсь воплотить со своими поправками, интересно, что получится.

2 wvxvw:
У меня была скриптовая система, но заточить на что-то большее чем составные читы не вышло. В итоге я её выпилил, т.к. оказалось, что на as3 тоже самое налепить эффективнее по многим параметрам (даже учитывая небыстрый наш компилятор mxmlc). А вот о возможности динамической генерации скрипта при записи сценария и позабыл. Вчитываюсь...

Действительно, тяжеловато понять что тут происходит. Итересно, как бы эта система выглядела для простого сценария:
- юзер нажал кнопку "открыть окно"
- юзер дождался, пока пройдут все асинхронные процессы и окно таки откроется
- юзер нажал кнопку "сделать ерунду"
- убедиться что в ответ на нажатие кнопки "сделать фигню" появился Alert "вы делаете фигню, нельзя!"

С глобальным регистром view[class of view] еще что-то могу представить:
Не мудрствуя лукаво, создаем конвеер Потапенко и добавляем туда задачи:
- юзер нажал кнопку "открыть окно"
берем у главной вьюшки кнопку по геттеру и эмулируем нажатие:
Код AS3:

_mainView.openWindowButton.dispatchEvent(new MouseEvent(MouseEvent.CLICK));

- юзер дождался, пока пройдут все асинхронные процессы и окно таки откроется
долбим по ENTER_FRAME следующее
Код AS3:

   _window = register.getView(Window)
  if (_window == null)
  {
      _numTicks++;
      if (_numTicks > waitLimith)
      {
          throw "не дождались!";
      }
  }
  else
  {
        //дождались
        _conveyor.play();
    }

- юзер нажал кнопку "сделать ерунду"
Код AS3:

_window.makeBadThingButton.dispatchEvent(new MouseEvent(MouseEvent.CLICK));

- убедиться что в ответ на нажатие кнопки "сделать ерунду" появился Alert "Вы делаете ерунду, нельзя!"
Код AS3:

   var alert:Alert  = register.getView(Alert);
  if (alert == null)
  {
      _numTicks++;
      if (_numTicks > waitLimith)
      {
          throw "мы ждали, ждали, а окно Вы делаете ерунду так и не всплыло";
      }
  }
  else
  {
        if (alert.text != "Вы делаете ерунду, нельзя!")
        {
            throw "Вообще-то, мы ожидали другое окно";
        }
        _conveyor.play();
    }

А вот со скриптом как это будет вообще не представляю :(

PainKiller 19.04.2012 00:09

Цитата:

Сообщение от expl (Сообщение 1075849)
Ссылка битая

попробую еще раз: http://active.tutsplus.com/tutorials...lay-web-games/

wvxvw 19.04.2012 00:12

Ну как бы в этом как раз и смысл, чтобы часть программы, которая должна взаимодействовать с пользователем сделать через "посредника" - этот посредник и будет вести лог + этот же лог будет самой программой выполнив которую тестируемая программа в точности воспроизведет то, что делал с ней до этого пользователь.
Самым неудачным местом в этой системе будет то, что нужно будет решить какие вызовы делать через встроенный язык - и они будут однозначно медленнее прямых вызовов, кроме того, у встраиваемого языка могут быть ограничения связаные со всякими особенностями окружения (констуирование объектов со сложными ссылками, например).

Я когда-то думал о вариантах для встроенного языка, и собственно вот размышления по этому поводу:

Что-то совсем примитивное бейсикоподобное - легко написать, ни использовать - у меня тавма детства от бейсика :) Да и я толком не знаком ни с одной из реализаций. Но, в принципе, как скриптовый язык - нормально.

ЭкмаСкрипт - очень плохо подходит для работы с интерактивной консолью (объявление функций, сложный синтаксис). Но зато близко по духу АС3.

Баш - есть ограничения на то, что можно сделать интерактивно + очень много внимания уделяется раскрытию путей к файлам, которое в такой ситуации не нужно.

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

Из лисповых вариантов - Анси Лисп - было бы здорово почти по всем параметрам, но очень уж он громоздкий. ЕмаксЛисп - вполне бы даже подошло. Схема - отравить жизнь ближним функциональным стилем. :)
Но даже еЛисп очень уж большой и полная реализация заняла бы много места. Поэтому кропаю какую-то часть чего-то очень похожего на него.

Можно, кстати, подумать об Эрланге - он довольно простой язык, но есть специфические конструкции которые в однопоточной среде тяжело реализовать. Кроме того, интерактивный шел хоть и есть, но не полноценный.

expl 19.04.2012 01:04

Это что же получается, сначала мы кликаем по кнопкам и записываем скрипт
А потом запускаем скрипт, который кликает по кнопкам и записывает скрипт :)
И мы же ручками ещё должны дописать проверки(assert'ы) к этому скрипту после записи?
Генеральная идея понятна, просто не понятно что вообще в примере происходит :(

Ещё некоторые опасения не понятны:

По-моему, как раз взаимодействие с особенностями окружения не проблема, если выбрать скрипт на базе экма. Сам использовал hscript (но пришлось вдоль и поперек перепилить логику, ибо в оригинале для использования внутри as3 неудобен и даже не совсем работает - первым делом как заставил работать выпилил итераторы, бесполезные в as3, и впилил нормальный для as3 for each/for in, еще функции пришлось подрасширить)
После "доточки" на нем строчилось как на as3, только без типизации и дерганье as3-функций/создание объектов через new выполнялось без проблем.
Чем так плох java-script-подобный язык для консоли?

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

Цитата:

Сообщение от PainKiller (Сообщение 1075857)

Ага, теперь открылось

wvxvw 19.04.2012 02:23

http://code.google.com/p/flash-embedded-language/
Вот, залил что есть. Оно конечно страшненько пока что выглядит, но в принципе, при желании, я думаю, что можно будет разобраться.

Ассерты - не, это не из той серии... это скорее CI тест / чтобы проверить, что ничего не испортили / программа вообще запускается и выполняет запланированные сценарии. Т.е. возможно, в теории можно будет как-то написать скрипт, чтобы он не просто воспроизводил действия пользователя, а еще и ошибки ловил и сам себя восстанавливал после ошибок и продолжал дальше... но мне это видится очень сложным... Т.е. ассерты - это для юнит тестов. Код, который идет на CI в принципе "считается" рабочим, т.е. он не должен сразу же падать с кучей ошибок, скорее задача найти трудновоспроизводимые баги.
Цитата:

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

Экма для последовательного исполнения - ну как бы совсем не айс... в том смысле, что например:

Код:

var foo = bar();
function bar() { return ""; }

нормально - но чтобы отследить что же на самом деле происходило (т.е. bar не должен был вызваться т.как его еще не было) не получится.

expl 19.04.2012 11:14

Цитата:

С событиями скорее всего будет гораздо тяжелее, т.как на уровне плеера это не возможно контролировать, кроме того на разных устройствах разные события будут и с разными настройками мыши и т.д. Все ето никак не получится "мокапом" заменить т.как до такой степени флеш не разобрать на части...
Видимо у меня несколько другие задачи: на других устройствах запускать всё равно социалку не будем - просто если дойдёт до мобилок - единственный вариант - родить 2-ю версию на С++ ибо иначе тормоза и память не позволят. Буду кликать напрямую и не парится.
Единственное - непонятно как эмулировать движения мыши - всех наследовать от одного спрайта с перегруженными mouseX и mouseY чтоли...

wvxvw 19.04.2012 12:17

Я думал в совсем другом направлении... Можно было бы попробовать эмулировать работу мыши, например, с помощью такой штуки: http://www.semicomplete.com/projects/xdotool/ и писать скрипты не во флеше а сделать оболочку запускающую плеер. Но тут фишка в том, что это будет не скоррелировано с действиями настоящих пользователей, т.е. прийдется самому писать сценарии / выдумывать.
Можно, конечно, попрововать во флеше ловить все события на уровне capture - но будет очень много шума, особенно от передвижения мышки, печатания текстов и т.п.


Часовой пояс GMT +4, время: 01:06.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.