Upload
guestb0af15
View
6.564
Download
0
Tags:
Embed Size (px)
DESCRIPTION
Citation preview
Автоматизация тестирования сложных
Flash-интерфейсов
Комлев Александр, Rambler, отдел QA
Формулировка исходной задачи
• Что нужно тестировать?Сложные клиентские flash-приложения – многопользовательские (realtime) игры, записывающие аудио/видео проигрыватели.
• Зачем автоматизировать?Чрезвычайно неэффективное использование человеческих ресурсов при ручном тестировании, либо отсутствие гарантий качества продукта.
• Что нам в итоге нужно?Простое, быстрое, хорошо интегрированное решение. Тут ничего нового и оригинального.Ключевой момент: поддержка и написание тестов не должны требовать привлечения высококвалифицированных кадров.
Как можно тестировать?
• Топологический принципПодготовка сценариев на основе взаимного расположения элементов интерфейса относительно друг друга.
Ненадежный и абсолютно не универсальный способ. Эффективность трудозатрат по созданию, поддержке и
отладке автотестов сравнима с исходной.
• Системный принципВнедрение существующих мощных, тяжеловесных сред автоматического тестирования, использующих системные средства для доступа к объекту тестирования.
Очевидных проблем нет, надо разбираться что к чему.
Обзор существующих решений
• Признанные «крутые» решения
• Test Complete by AutomatedQAMacromediaFlashPlayerActiveX window class, написанный с использованием Microsoft Active Accessibility (MSAA Open Applications plug-in)
Достоинства- Универсальная, мощная, прекрасно поддерживаемая
система.- Вместе с Flash поддерживается и Flex.
Недостатки- Поддержка только операционных систем линейки Windows.- Поддержка одного типа браузеров – Internet Explorer.- Платное и весьма недешевое решение.
Обзор существующих решений
• Quick Test Professional by MercuryMercury и Macromedia еще в 2005 году договорились о поддержке Flex в QTP.
Кажется, решение найдено?
Достоинства- Универсальная, мощная, прекрасно поддерживаемая система.
- Удобная работа с мощным mx.automation.* package из Flex Framework.
Недостатки- Поддержка только операционных систем линейки Windows.
- Поддержка одного типа браузеров – Internet Explorer.- Платное и весьма недешевое решение.
- Поддержка Flex, а не Flash.
Обзор существующих решений
• «Гиганты» не поддерживающие Flash
• Borland SilkTestСпособен работать с Flash только как с целым нераздельным объектом.
• IBM Rational RobotПросто не поддерживает Flash, при этом полностью поддерживает технологию Java Applets :)
Обзор существующих решений
• SeleniumБесплатное и мощное средство для автоматического тестирования.
Достоинства- Универсальная, мощная, прекрасно поддерживаемая система.
- Полная кроссплатформенность и кроссбраузерность.
- Open Source.- Поддержана работа с Flash с использованием
Macromedia Flash JavaScript Gateway.
Недостатки- Нестабильность работы отдельных компонентов.
- Поддержка Macromedia Flash JavaScript Gateway ограничена.
Обзор существующих решений
• Компоненты, библиотеки
• AFLAXAsynchronous Flash and XML, автор (Paul Colton) позиционирует проект как «замену не поддерживаемому Macromedia Flash JavaScript Gateway».Плохое решение с «неработающим» подходом.
• 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 и выше (NPAPI поддерживает с 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 как оператор: +, *, /, \, ., и т.д.
Как всё это работает?
External Interface ClassExecuteCallBack(script);
CallBackEvalFunction(script);
FLASH application
Return Output results;
FlashObj.ExecuteCallBack(script);
Input scriptOutput results
JavaScript applicationvar FlashObj = findSWF(movieName);
External Interface ClassRegisteredCallBack(args);
FunctionBindedWithCallback(args);
FLASH application
Return Output results;
FlashObj.RegisteredCallBack(args);
Input argsOutput results
JavaScript applicationvar FlashObj = findSWF(movieName);
Рабочий пример
External Interface ClassExternalInterface.addCallback("ui_get_text",this,_getWindowText); ExternalInterface.addCallback("ui_press_ok",this,_okRelease); ExternalInterface.addCallback("ui_press_cancel",this,_cancelRelease
);
UIManager
FLASH application
Return Output results; FlashObj.ui_press_ok(windows_id);
JavaScript applicationvar window_id;var FlashObj = findSWF(movieName);
function ui_callback (window_id_flash, window_classname_flash) { window_id = ui_callback.arguments[0];
}
function ui_remove (window_id_flash_removed) { window_id-- ;
}
public function set ID ( ID : Number ) : Void { _id = ID;ExternalInterface.call("ui_callback",ID,_className); }
AS->JS call
Создание окна
public function remove():Void { ExternalInterface.call("ui_remove",_id); _container.removeMovieClip();
}
Закрытие окна
AS->JS call
Принципиальная схема решения
Selenium JavaScript CORE
Selenium Remote Control
Test::BuilderВнутренний тестовый Framework
Selenium Perl ClientTest::WWW::Selenium
WWW::Selenium
Браузер
HTTP-server
Test::More
Модификация Selenium Core
• Внесение изменений в selenium-api.js
Пример:
Selenium.prototype.doFlashPressOk = 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 => "localhost",
port => 4444,
browser => "*iexplore",
browser_url => "http://localhost",
);
my $flashobj = "sample";
my $window_id = 1;
$sel->start;
$sel->open("http://localhost/flash/testJS.html");
$sel->flash_press_ok($flashobj, $window_id); $sel->stop;
Проблемы• Необходимо разрабатывать дополнительный Action Script
код- Это фактически единственный серьезный минус.
Решение: Использовать предложенную схему генерации callback’ов, но в данном случае требуется более высокая квалификация разработчика тестов.
• Сложности интеграции с уже используемыми home-made решениями.
Варианты использования• Забудем про тестирование
Где можно эффективно использовать такие возможности?
- HTML-элементы управления содержимым flash-объектов.
- Контекстный поиск.
- Интерактивные flash-элементы, реагирующие на действия пользователя.
Автоматизация тестирования сложных Flash-интерфейсов Комлев Александр, Rambler, отдел QA
Вопросы?