вторник, 30 августа 2011 г.

Функциональное тестирование AIR приложений с FlexMonkey, часть 1.

Это мой перевод статьи о тестировании AIR apps FlexMonkey от MICHAEL PORTUESI от 18 декабря 2009 годя. Оригинал можно найти здесь.

FlexMonkey, пожалуй, наилучшее средство для функционального тестирования Flex и AIR приложений. Оно бесплатное (и это хорошо для старта!), идет в комплекте со средством созданияч тестов, хорошо интегрируется как с FlexUnit, так и с Fluint юнит-тестовыми фрэймворками. А что самое приятное - исходный код доступен для  изменений.
Я в недавнее время работаю с функциональным тестовым фрэймворком для приложения AIR, включая интеграцию с автоматическими билдами.  Выяснилось, что это огромный проект, поэтому я бы хотел поделеться несколькими уроками, которые мне пришлось выучить.


Дискуссия будет представлена в 5 частях:



  • Часть первая (этот артикул) сконцентрирована на общем процессе, как запустить ваше AIR приложение вместе с FlexMonkey, и предпосылках для этого.
  • Часть вторая 
  • Часть третья
  • Часть четвертая
  • Часть пять
Пожалуйста, обратите внимание: эти статьи сфокусированны на тестировании AIR приложений, основанных на Flex, что противоположно приложениям построенными с помощью Flex-фрэймворка, что запускается внутри браузера. Хотя FlexMonkey хорошо приспособлен для работы как с браузерными, так и с десктопными приложениями, конфигурация для этих случаев будет  различаться.

Три типа автоматизации с FlexMonkey 

Часть затруднений при работе с FlexMonkey происходит по причине того, что он пытается покрыть множество сценариев тестирования юз кейсов, и из-за того, что вы можете запускать ваше приложение в FlexMonkey тремя различными способами.
Хотя рабочая конфигигурация является одним из наиболее важных решений, документация не содержит достаточно помощи. Она содержит множество голых фактов о конфигурациях, но не разделяет юз кейсы, не помогает с выбором и фокусировкой на конкретной выбранной конфигурации. По факту, эта тема даже не затрагивается в первой половине FlexMonkey User Guide.
Затруднения встречаются даже чаще из-за того, что эти три конфигурации управляются различными компонентами FlexMonkey, каждый из которых имеет путающее название, состоящее из перестановок слов “Easy”, “Monkey”, “Agent”, “Link”, and “Library”. В поисках нужных частей FlexMonkey вы будете должны выполнить задачу отбрасывания незначащей информации.
Коротко три тестовые конфигурации FlexMonkey упоминаются в документации следующим образом:
  1. Target SWF Window: загружает ваш неизмененный SWF файл приложения в FlexMonkey IDE. Вы запускаете набор тестов над приложением прямо под IDE.
  2. MonkeyAgent: Специальная страница  MonkeyAgent.html загружает  ваш неизмененный SWF файл в браузере. Вы также можете запускать тесты в IDE. IDE контролирует тесты, пока приложение удаленно работает в браузере.
  3. MonkeyLink: Вы получаете специальную версию своего приложения, которое содержит как среду FlexMonkey , так и классы тестового набора, сгенерированные FlexMonkey IDE. FlexMonkey и тесты запускаются непосредственно внутри вашего приложения. Тесты проводятся и контролируются внешней программой, управляемой заданием Ant. В этом случае, FlexMonkey IDE не используется для запуска теста, только для его создания.
Можно долго обсуждать относительные достоинства этих способов, но на самом деле единственный жизнеспособный способ для AIR это (3).
Можно попробовать опцию 1, но поверьте мне, вы будете разочарованы. Документация содержит значительный список того, что может пойти не так, если вы будете использовать первый подход для запуска вашего приложения.
Я начинал с первого подхода, но быстро попал в непреодолимое прпятствие. Path, используемый AIR для локации своих ассетов отличается от того, который используется когда приложение запущено в FlexMonkey IDE. Это послужило причиной тому, что мое приложение умерло, когда не смогло найти скины, звуки и избражения, требуемые для правильного функционирования. Тогда я  быстро решил, что первая опция неприменима для AIR приложений.
Опция 2 предназначена для flex-приложений, запущенных в браузере. Если ваше приложение не использует каких-либо AIR  API фич, вы можете перепаковать свое приложение для запуска в браузере. Но большинство AIR приложений не удовлетворяют этому критерию, как например мое - используют специфичные HTMLLoader и File API.
Поэтому, опция три - единственный применимый метод для автоматизации как части ваших билдов.

Перед началом

Опция MonkeyLink имеет значительный недостаток: вам нужно иметь Flex Automation Library от Adobe. Когда писалась эта статья единственный доступный пакет Flex Builder Professional стоял 700$. С другой стороны, если вы работаете с чистыми Flex/AIR SDK  и редактируете Flex код в TextMate, как и я, тогда вы получаете замечательное IDE как часть сделки.
Вы также должны иметь представление о средствах AIR SDK для била и запуска приложений из командной строки, особенно amxmlc и adl. У Adobe есть документация по ним
Вы также должны проверить FlexMonkey  код из FlexMonkey SVN project репозитория на сайте Google Code. Вероятно он вам понадобится в следующих статьях так как, мы продолжим изучение работы тестируемого AIR приложения и интеграцию его с билдом.
И наконец, если вы пожелаете - учебное введение в FlexMonkey, Gorilla Logic - создателей FlexMonkey. 
В следующих артикулах этой серии, мы получим билд AIR приложения от MonkeyLink  и используем его с FlexMonkey IDE.

Adobe Air и с чем его едят

Пришлось автоматизировать AIR, что сделаешь чтоб только руки не напрягать хD . Оставалось искать.
Мой привычный Selenium не способен тестировать desktop apps. Test Complete... сразу покрываюсь липким потом и начинаю трястись в истерике.

Мое спасение - FlexMonkey . Что это и с чем его едят я пока не понимаю. Совсем . Читаю вот отсюда - http://www.gorillalogic.com/flexmonkey5/docs. Ну что пообезьнничаю я))) 


А вот здесь говорят о том , что


"построение FlexMonkey на FlexUnit дает возможность интегрироваться в Ant и Maven через flex-mojos. Также это позволяет скриптам, которые генерируются ActionScript, интегрироваться с через CruiseControl и Hudson/Jenkins. В дополнение есть плагин FlexMonkium, которые может запускать Selenium и генерировать JUnit скрипты для Selenium RC. "

Ну что ж . Lets Try it