Автоматизация тестирования сложных  Flash- интерфейсов Комлев Александр,  Rambler,  отдел  QA
Формулировка исходной задачи Что нужно тестировать? Сложные клиентские  flash- приложения  –  многопользовательские ( realtime )   игры, записывающие аудио/видео проигрыватели. Зачем автоматизировать? Чрезвычайно неэффективное использование человеческих ресурсов при ручном тестировании, либо отсутствие гарантий качества продукта. Что нам в итоге нужно? Простое, быстрое, хорошо интегрированное решение. Тут ничего нового и оригинального. Ключевой момент: поддержка и написание тестов не   должны требовать привлечения высококвалифицированных кадров.
Как можно тестировать? Топологический принцип Подготовка сценариев на основе взаимного расположения элементов интерфейса относительно друг друга. Ненадежный и абсолютно не универсальный способ. Эффективность трудозатрат по созданию, поддержке и отладке автотестов сравнима с исходной. Системный принцип Внедрение существующих мощных, тяжеловесных сред автоматического тестирования, использующих системные средства для доступа к объекту тестирования. Очевидных проблем нет, надо разбираться что к чему.
Обзор существующих решений Признанные «крутые» решения Test Complete  by AutomatedQA MacromediaFlashPlayerActiveX window class,  написанный с использованием Microsoft Active Accessibility (MSAA Open Applications plug-in) Достоинства Универсальная, мощная, прекрасно поддерживаемая система. Вместе с  Flash  поддерживается и  Flex.   Недостатки Поддержка только операционных систем линейки  Windows. Поддержка одного типа браузеров –  Internet Explorer. Платное и весьма недешевое решение.
Обзор существующих решений Quick Test Professional by Mercury Mercury  и  Macromedia  еще   в 2005 году договорились о поддержке  Flex  в  QTP. Кажется, решение найдено? Достоинства Универсальная, мощная, прекрасно поддерживаемая система. Удобная работа с мощным mx.automation.* package из  Flex Framework . Недостатки Поддержка только операционных систем линейки  Windows. Поддержка одного типа браузеров –  Internet Explorer. Платное и весьма недешевое решение. Поддержка  Flex , а не  Flash .
Обзор существующих решений «Гиганты» не поддерживающие  Flash Borland SilkTest Способен работать с  Flash  только как с целым нераздельным объектом. IBM Rational Robot Просто не поддерживает  Flash , при этом полностью поддерживает технологию  Java Applets :)
Обзор существующих решений Selen iu m Бесплатное и мощное средство для автоматического тестирования.  Достоинства Универсальная, мощная, прекрасно поддерживаемая система. Полная кроссплатформенность и кроссбраузерность. Open Source. Поддержана работа с  Flash  с использованием Macromedia Flash JavaScript  G ateway . Недостатки Нестабильность работы отдельных компонентов. Поддержка Macromedia Flash JavaScript  G ateway ограничена.
Обзор существующих решений Компоненты, библиотеки AFLAX Asynchronous Flash and XML, автор (Paul Colton) позиционирует проект как «замену не поддерживаемому Macromedia Flash JavaScript  G ateway». Плохое решение с «неработающим» подходом. Flash / JavaScript Integration Kit Идея заключается в использовании FlashProxy для коммуникации с целевым объектом с использованием LocalConnection. Неплохое решение с интересным, но «неправильным» подходом.
Критерии поиски «правильного» решения Кроссплатформенность Кроссбраузерность Open Source,  либо  Open Source + Home made Ключевой момент:   Требования относятся как к способу взаимодействия с  Flash- объектами, так и платформе для запуска автоматических тестов.
Macromedia Flash JavaScript gateway … или « Scripting with Flash » Поддержка платформ и браузеров Netscape Navigator 3.0 и выше (с поддержкой LiveConnect и Java; Windows 95/98/NT/2000 или MacOS) . Internet Explorer 3.0 и выше (с поддержкой ActiveX; только Windows 95/98/NT/2000).  Требования к OBJECT и EMBED Тег  <OBJECT>  и  <EMBED>  должны иметь свойство  ID/NAME  соответственно. Доступные  flash- методы GetVariable() & SetVariable(), LoadMovie(), GotoFrame()  и т.д. FSCommand ( command, args )   -  наиболее востребованный и интересный метод (тип данных – только  String , ограничение на количество передаваемых аргументов).
External Interface Class Поддержка платформ и браузеров -  Internet Explorer 5.0 и выше (без ограничения по платформам). -  Любые   контейнеры (например,  desktop- приложение), использующие экземпляр Flash Player ActiveX control . -  Любой браузер с поддержкой NPRuntime interface . Firefox 1.0 и выше Mozilla 1.7.5 и выше Netscape 8.0 и выше Safari 1.3 и выше Смело добавляем сюда  – Opera  8   и выше (NPA PI  поддерживает с 2004 года).
External Interface Class Качественно новые возможности -  Нет ограничения по количеству передаваемых аргументов и длине имен аргументов. -  Поддержка дополнительных типов данных аргументов ( Boolean, Number ) . -  Получение результатов вызова . FSCommand()   поддерживается, можно использовать как и раньше.  Перенесено в  flash.system.package. Известные ограничения -  External Interface  недоступен в случае, если  flash- объект расположен в теге  <form> .  Проблема решена на уровне  JavaScript. Steve Kamerman  создал патч  SWFFormFIX ,  который внесен в библиотеку  SWFObject . - External Interface  недоступен в случае, если  flash- объект расположенный в теге  <object>   в  id  содержит символ определенный в  JavaScript  как оператор: +, *, /, \, ., и т.д.
Как всё это работает?
Рабочий пример
Принципиальная схема решения
Модификация  Selenium Core Внесение изменений в selenium-api.js Пример: Selenium.prototype.doFlash PressOk  =  function ( locator, window_id ) {  /** *  Press OK button in User Dialog . * * @param locator the locator of the flash object * @param  window_id   User Dialog ID  */  var flashObj = this.page().findElement( locator ) ;  flashObj. ui_press_ok ( window_id );  }
Сборка  Selenium Сборка  Selenium Core  -  mvn -Dnotest=1 -Dmaven.test.skip=true clean install Сборка  Selenium RC + xslt- генерация  Perl client  -  mvn -Dnotest=1 -Dmaven.test.skip=true -Pperl install Установка  Perl Client  – nmake install Примечание: Для сборки проекта необходимы  Ant, Maven, javac, nmake (make) .
Пример автоматического теста use WWW::Selenium;   my $sel = WWW::Selenium->new( host => &quot;localhost&quot;,    port => 4444,    browser => &quot;*iexplore&quot;,    browser_url => &quot;http://localhost&quot;,   );   my $flashobj = &quot;sample&quot;;   my $window_id = 1;   $sel->start;   $sel->open(&quot;http://localhost/flash/testJS.html&quot;);   $sel-> flash_press_ok ($flashobj, $window_id);     $sel->stop;
Проблемы Необходимо разрабатывать дополнительный  Action Script  код -  Это фактически единственный серьезный минус. Решение: Использовать предложенную схему генерации  callback’ ов, но в данном случае требуется более высокая квалификация разработчика тестов. Сложности интеграции с уже используемыми  home-made  решениями.
Варианты использования Забудем про тестирование Где можно эффективно использовать такие возможности? -  HTML- элементы управления содержимым  flash- объектов. - Контекстный поиск . - Интерактивные  flash- элементы, реагирующие на действия пользователя.
Автоматизация тестирования сложных  Flash- интерфейсов     Комлев Александр,  Rambler,  отдел  QA   Вопросы?

Client Side Autotesting Flash

  • 1.
    Автоматизация тестирования сложных Flash- интерфейсов Комлев Александр, Rambler, отдел QA
  • 2.
    Формулировка исходной задачиЧто нужно тестировать? Сложные клиентские flash- приложения – многопользовательские ( realtime ) игры, записывающие аудио/видео проигрыватели. Зачем автоматизировать? Чрезвычайно неэффективное использование человеческих ресурсов при ручном тестировании, либо отсутствие гарантий качества продукта. Что нам в итоге нужно? Простое, быстрое, хорошо интегрированное решение. Тут ничего нового и оригинального. Ключевой момент: поддержка и написание тестов не должны требовать привлечения высококвалифицированных кадров.
  • 3.
    Как можно тестировать?Топологический принцип Подготовка сценариев на основе взаимного расположения элементов интерфейса относительно друг друга. Ненадежный и абсолютно не универсальный способ. Эффективность трудозатрат по созданию, поддержке и отладке автотестов сравнима с исходной. Системный принцип Внедрение существующих мощных, тяжеловесных сред автоматического тестирования, использующих системные средства для доступа к объекту тестирования. Очевидных проблем нет, надо разбираться что к чему.
  • 4.
    Обзор существующих решенийПризнанные «крутые» решения Test Complete by AutomatedQA MacromediaFlashPlayerActiveX window class, написанный с использованием Microsoft Active Accessibility (MSAA Open Applications plug-in) Достоинства Универсальная, мощная, прекрасно поддерживаемая система. Вместе с Flash поддерживается и Flex. Недостатки Поддержка только операционных систем линейки Windows. Поддержка одного типа браузеров – Internet Explorer. Платное и весьма недешевое решение.
  • 5.
    Обзор существующих решенийQuick Test Professional by Mercury Mercury и Macromedia еще в 2005 году договорились о поддержке Flex в QTP. Кажется, решение найдено? Достоинства Универсальная, мощная, прекрасно поддерживаемая система. Удобная работа с мощным mx.automation.* package из Flex Framework . Недостатки Поддержка только операционных систем линейки Windows. Поддержка одного типа браузеров – Internet Explorer. Платное и весьма недешевое решение. Поддержка Flex , а не Flash .
  • 6.
    Обзор существующих решений«Гиганты» не поддерживающие Flash Borland SilkTest Способен работать с Flash только как с целым нераздельным объектом. IBM Rational Robot Просто не поддерживает Flash , при этом полностью поддерживает технологию Java Applets :)
  • 7.
    Обзор существующих решенийSelen iu m Бесплатное и мощное средство для автоматического тестирования. Достоинства Универсальная, мощная, прекрасно поддерживаемая система. Полная кроссплатформенность и кроссбраузерность. Open Source. Поддержана работа с Flash с использованием Macromedia Flash JavaScript G ateway . Недостатки Нестабильность работы отдельных компонентов. Поддержка Macromedia Flash JavaScript G ateway ограничена.
  • 8.
    Обзор существующих решенийКомпоненты, библиотеки AFLAX Asynchronous Flash and XML, автор (Paul Colton) позиционирует проект как «замену не поддерживаемому Macromedia Flash JavaScript G ateway». Плохое решение с «неработающим» подходом. Flash / JavaScript Integration Kit Идея заключается в использовании FlashProxy для коммуникации с целевым объектом с использованием LocalConnection. Неплохое решение с интересным, но «неправильным» подходом.
  • 9.
    Критерии поиски «правильного»решения Кроссплатформенность Кроссбраузерность Open Source, либо Open Source + Home made Ключевой момент: Требования относятся как к способу взаимодействия с Flash- объектами, так и платформе для запуска автоматических тестов.
  • 10.
    Macromedia Flash JavaScriptgateway … или « Scripting with Flash » Поддержка платформ и браузеров Netscape Navigator 3.0 и выше (с поддержкой LiveConnect и Java; Windows 95/98/NT/2000 или MacOS) . Internet Explorer 3.0 и выше (с поддержкой ActiveX; только Windows 95/98/NT/2000). Требования к OBJECT и EMBED Тег <OBJECT> и <EMBED> должны иметь свойство ID/NAME соответственно. Доступные flash- методы GetVariable() & SetVariable(), LoadMovie(), GotoFrame() и т.д. FSCommand ( command, args ) - наиболее востребованный и интересный метод (тип данных – только String , ограничение на количество передаваемых аргументов).
  • 11.
    External Interface ClassПоддержка платформ и браузеров - Internet Explorer 5.0 и выше (без ограничения по платформам). - Любые контейнеры (например, desktop- приложение), использующие экземпляр Flash Player ActiveX control . - Любой браузер с поддержкой NPRuntime interface . Firefox 1.0 и выше Mozilla 1.7.5 и выше Netscape 8.0 и выше Safari 1.3 и выше Смело добавляем сюда – Opera 8 и выше (NPA PI поддерживает с 2004 года).
  • 12.
    External Interface ClassКачественно новые возможности - Нет ограничения по количеству передаваемых аргументов и длине имен аргументов. - Поддержка дополнительных типов данных аргументов ( Boolean, Number ) . - Получение результатов вызова . FSCommand() поддерживается, можно использовать как и раньше. Перенесено в flash.system.package. Известные ограничения - External Interface недоступен в случае, если flash- объект расположен в теге <form> . Проблема решена на уровне JavaScript. Steve Kamerman создал патч SWFFormFIX , который внесен в библиотеку SWFObject . - External Interface недоступен в случае, если flash- объект расположенный в теге <object> в id содержит символ определенный в JavaScript как оператор: +, *, /, \, ., и т.д.
  • 13.
    Как всё этоработает?
  • 14.
  • 15.
  • 16.
    Модификация SeleniumCore Внесение изменений в selenium-api.js Пример: Selenium.prototype.doFlash PressOk = function ( locator, window_id ) { /** * Press OK button in User Dialog . * * @param locator the locator of the flash object * @param window_id User Dialog ID */ var flashObj = this.page().findElement( locator ) ; flashObj. ui_press_ok ( window_id ); }
  • 17.
    Сборка SeleniumСборка Selenium Core - mvn -Dnotest=1 -Dmaven.test.skip=true clean install Сборка Selenium RC + xslt- генерация Perl client - mvn -Dnotest=1 -Dmaven.test.skip=true -Pperl install Установка Perl Client – nmake install Примечание: Для сборки проекта необходимы Ant, Maven, javac, nmake (make) .
  • 18.
    Пример автоматического тестаuse WWW::Selenium; my $sel = WWW::Selenium->new( host => &quot;localhost&quot;, port => 4444, browser => &quot;*iexplore&quot;, browser_url => &quot;http://localhost&quot;, ); my $flashobj = &quot;sample&quot;; my $window_id = 1; $sel->start; $sel->open(&quot;http://localhost/flash/testJS.html&quot;); $sel-> flash_press_ok ($flashobj, $window_id); $sel->stop;
  • 19.
    Проблемы Необходимо разрабатыватьдополнительный Action Script код - Это фактически единственный серьезный минус. Решение: Использовать предложенную схему генерации callback’ ов, но в данном случае требуется более высокая квалификация разработчика тестов. Сложности интеграции с уже используемыми home-made решениями.
  • 20.
    Варианты использования Забудемпро тестирование Где можно эффективно использовать такие возможности? - HTML- элементы управления содержимым flash- объектов. - Контекстный поиск . - Интерактивные flash- элементы, реагирующие на действия пользователя.
  • 21.
    Автоматизация тестирования сложных Flash- интерфейсов Комлев Александр, Rambler, отдел QA Вопросы?