Автоматизированное тестирование Adobe AIR приложений в системе HockeyApp
Приветствую, друзья! О чем статьяВ этой статье будет дано поверхностное описание системы тестирования мобильных приложений HockeyApp. Я расскажу как пройти путь от написания кода в ActionScript, до получения логов в системе HockeyApp. И познакомлю с ANE библиотекой FPHockeyApp. Если вы знакомы с системами тестирования приложений, можете сразу перейти к примерам использования библиотеки FPHockeyApp.Суть проблемы
Если вы разрабатываете мобильное приложение в одиночку, то вы наверняка ощущали дискомфорт от необходимости постоянно подключать разные устройства к компьютеру, чтобы закачать новую версию разрабатываемого приложения, для дальнейшего тестирования. Если же вы работаете в большой команде, то процесс раздачи тестовых сборок тестеровщикам, при ручном подходе превращается в ад… Системы автоматизированного тестирования приложений, вроде HockeyApp, предназначены для решения этой проблемы. Как оно работает, читайте дальше.Как работает HockeyApp
Подробное описание всех возможностей системы HockeyApp вы найдете у них на сайте http://hockeyapp.net/. Если вкратце, то это работает следующим образом. Вы регистрируетесь на сайте hockeyapp.net/ как разработчик, и создаете приложение. После создания приложения вы получаете уникальный идентификатор APP_ID:
Также на сайте регистрируются все тестеры, а вы, как разработчик раздаете тестерам права на получение новых версий приложения. Полученный APP_ID необходимо применить в методе инициализации HockeyApp SDK. Собранный файл .ipa/.apk загружаем в hockeyapp.net: 
И все участники тестирования приложения получают на почту уведомление о новой тестовой сборке. Там же в письме тестеры получают ссылку для автоматического обновления приложения, т.е. новая версия приложение устанавливается сразу на устройство тестера (и не надо ни каких плясок с iTunes и т.п.). Вот скрин с мобильной почты: 
Если по каким то причинам приложение у тестера упало, приложение может отправить логи на сайт для дальнейшего анализа на сайте HockeyApp: 
По мимо стандартных логов операционной системы, вы можете передать на сервер свои собственные логи, облегчающие поиск бага, на сайте свои логи можно увидеть в разделе Data — Description: 
По мимо всего указанного у системы есть еще множество различных плюшек и удобств, попробуйте и вам понравится :)
Инициализация HockeyApp SDK На сайте hockeyapp.net есть подробные инструкции по использованию SDK. Вам необходимо встроить несколько строк кода, вот пример для инициализации в iOS: [[BITHockeyManager sharedHockeyManager] configureWithIdentifier:@«APP_ID»]; [[BITHockeyManager sharedHockeyManager] startManager]; [[BITHockeyManager sharedHockeyManager].authenticator authenticateInstallation]; Этого достаточно для минимальной работы с SDK.
Инициализация в AIR приложении с помощью FPHockeyApp.ane Для работы с HockeyApp в AIR-приложении, необходимо подключить ANE-билиотеку FPHockeyApp, и добавить следующий код: import ru.fp.hockeyapp.FPHockeyApp; import ru.fp.hockeyapp.constants.BITAuthenticatorIdentificationType; // FPHockeyApp.instance.configureWithIdentifier ('APP_ID'); FPHockeyApp.instance.startManager (); FPHockeyApp.instance.authenticateInstallation (); Чтобы в случае краха ваше приложение отправило логи на сервер, добавьте следующий код:
import ru.fp.hockeyapp.FPHockeyApp; import ru.fp.hockeyapp.logger.FPhaLogger; // var logger: FPhaLogger = FPhaLogger.createInStorageDir ('TestLog', 'loggs/myLog1.txt'); logger.add ('my log record'); // FPHockeyApp.instance.init (); FPHockeyApp.instance.setLogFilePath (logger.nativePath); // FPHockeyApp.instance.configureWithIdentifier ('YOU_APP_ID'); FPHockeyApp.instance.startManager (); FPHockeyApp.instance.authenticateInstallation (); Класс FPhaLogger создает файл в файловой системе устройства, в котором хранятся логи. Вы можете использовать любой другой, удобный для вас, логгер, важно только передать в метод FPHockeyApp.instance.setLogFilePath () абсолютный путь до файла, где лежат логи.
По умолчанию когда приложение отправляет логи, на сервер не передается информация о том, от кого отправлены логи. Если же вы хотите знать, кто и когда из тестеров запустил приложение и у кого из них упало приложение, необходимо авторизовать пользователя. Делается это с помощью метода setIdentificationType ():
import ru.flashpress.hockeyapp.FPHockeyApp; import ru.flashpress.hockeyapp.constants.BITAuthenticatorIdentificationType; // FPHockeyApp.instance.configureWithIdentifier ('APP_ID'); FPHockeyApp.instance.setIdentificationType (BITAuthenticatorIdentificationType.HOCKEY_APP_USER); FPHockeyApp.instance.startManager (); FPHockeyApp.instance.authenticateInstallation (); Есть несколько способов авторизации пользователя:
BITAuthenticatorIdentificationType.ANONYMOUS — без авторизации, значение по умолчанию BITAuthenticatorIdentificationType.HOCKEY_APP_EMAIL — Пользователь указывает только свой email для обратной связи BITAuthenticatorIdentificationType.HOCKEY_APP_USER — Пользователь указывает свой логин и пароль от личного кабинета HockeyApp. Окно авторизации отображается прямо в вашем приложении. BITAuthenticatorIdentificationType.DEVICE — Авторизация с помощью UDID приложения. Пользователю будет показано окно с кнопкой Авторизации, нажав на которую будет запущено приложение Safari, которое определяет текущий UDID, и после нажатия на кнопку Авторизации в Safari, UDID будет передан приложению для дальнейшей авторизации в системе HockeyApp BITAuthenticatorIdentificationType.WEB_AUTH — Авторизация по логину и паролю от системы HockeyApp, так же как и тип HOCKEY_APP_USER, только авторизация происходит в Safari. В отличии от типа HOCKEY_APP_USER в том, что Safari может сохранить сессию авторизации, что бы пользователю не вводить каждый раз логин и пароль. Подробное описание всех типов авторизации читайте в документации HockeyApp.
К сожалению в библиотеке FPHockeyApp.ane не поддерживаются типы авторизации BITAuthenticatorIdentificationType.DEVICE и BITAuthenticatorIdentificationType.WEB_AUTH, это связано с определенным техническими сложностями написания ANE-библиотек. Если у меня получится побороть эту проблему, я обязательно расскажу как я это сделал и выкачу новую версию библиотеки. Ну, а пока удачной вам компиляции и быстрого поиска багов :)
Ложка дёгтя и аналоги Самый большой и, на мой взгляд, единственный минус этой системы — это платность. Минимальный тариф — 10$ в месяц с ограничением на 5 приложений. Есть пробный период — 30 дней, за который вы успеете оценить все плюсы/минусы этой системы. Честно сказать я еще не успел опробовать аналоги, но довольно известный среди них это наверно TestFlight, он бесплатный и где то в сети видел ANE библиотеки для работы с этим сервисом. Если кто пользовался аналогами в AIR-приложении — поделитесь опытом.
