- PVSM.RU - https://www.pvsm.ru -
После реализации пары проектов под Android, стало понятно, что, несмотря на их небольшие размеры и кажущуюся простоту, без автоматизированных сборок и тестирования не обойтись. Родилось желание получить следующие возможности:
testdroid.com/ [1], которые предлагает почти всё то же, и даже больше (тестирование на реальных девайсах), но, естественно, за денюжку.
В связи с этим после двухнедельных изысканий выбор был остановлен на связке на Jenkins + билд-скрипты на Ant (под Windows).
Итак, как же всё это поднять?!
Создаём в окружении системы (System variables) переменную ANDROID_HOME и указываем в её значеии путь до папки Android SDK. У меня это путь D:androidandroid-sdk-windows.
Также добавляем в переменную Path значнеие ;%ANDROID_HOME%platform-tools.
Скачиваем zip-архив с http://ant.apache.org/bindownload.cgi и распаковываем в какую-нибудь папку (например d:serverandroidant). Папку antbin также необходимо добавить в системную переменную окружения Path.
Google сделала в Android SDK возможность генерировать ant-скрипты для сборки проектов, для этого в папке trunk проекта нужно выполнить команды:
- android update project -p MyProject
- android update test-project -m ..MyProject -p MyProjectTest
Варианты для Android SDK < 14 версии можно посмотреть здесь [2].
- ant clean debug
в конце выполнения должно быть написано что-ть вроде
- BUILD SUCCESSFUL
- Total time: 5 seconds
Это значит, что проект удалось успешно собрать.
- ant all clean emma debug install test
Билд будет идти несколько дольше, в моём случае это было 35 секнунд. В процессе соберутся debug сборки MyProjeсt и MyProjectTest, установятся на запущенный эмулятор и произведётся прогон тестов.
Заходим на http://jenkins-ci.org/, там справа есть ссылки на дистрибутивы, скачиваем и устанавливаем. По-умолчанию он устанавливается и предоставляет веб-интерфейс по адресу http://127.0.0.1:8080/.
Тут есть небольшая проблема. По умолчанию сервис Jenkins стартует из-под пользовательского аккаунта System, что ведёт к невозможности для плагина, рулящего эмуляторами, создавать AVD в домашней папке аккаунта. Пользователя нужно поменять либо на ваш аккаунт, либо создать специальный аккаунт для Jenkins’а.
Если кто вдруг не знает, для этого нужно зайти в Computer Management (самы простой способ: Start > Computer (правой кнопкой) > Manage (Управление)), там выбираем Services and Applications > Services, находим сервис Jenkins > Properties > закладка LogOn. После смены аккаунта сервис необходимо перезапустить.
Итак, захоидм по адресу http://127.0.0.1:8080/, выбираем Manage Jenkins далее выбираем Manage Plugins. Перейдите на вкладку Available Plugins. Если тут пусто, подождите некоторое время, Jenkins их просто ещё не подгрузил.
Нам понадобятся следующие:
Возможно некоторые из них у вас уже буду установлены изначально.
В моём случае потрбовалось ещё установить Subversion Plugin, поскольку у меня проект лежал в SVN. Если ваш проект находится под другой SCM, не забудьте установить для неё плагин.
Теперь, нажимаем кнопку «Install without restart” внизу, в процессе можно поставить галку »Restart Jenkins when installation is complete and no jobs are running” чтобы Jenkins перезапустился автоматом и плагины заработали.
Далее идём в Manage Jenkins > Configure System. Здесь
Теперь создадим задание для Jenkins. На главной странице нажимаем New Job, вводим название, тип задания выбираем Build a free-style software project.
Тут необходимо заполнить следующие секции:
Собственно, с настройкой Jenkins почти закончили, но не спешите, пока ещё не всё готово.
Есть две проблемы.
Стандартный InstrumentationTestRunner не генерирует xml с результатами прохождения тестов. Поэтому MyProjectTest надо чуть подкрутить.
- <instrumentation
- test.runner=pl.polidea.instrumentation.PolideaInstrumentationTestRunner
- <!-- version-tag: 1 -->
меняем 1 на custom (нужно, чтобы ваши изменения в этом вайле не перетёрлись при следующем выполнении android update).
Xml-файл с результатами прогона тестов и файл с результатами проверки покрытия генерируется на устройстве. Их необходимо оттуда достать, чтобы Jenkins их подхватил.
Основной скрипт ant, который собственно и собирает проект находится в ${sdk.dir}/tools/ant/build.xml и импортируется в билд-скрипт проекта строчкой
- <import file="${sdk.dir}/tools/ant/build.xml" />
- <html outfile="coverage/coverage.html" />
и рядом добавляем
- <xml outfile="coverage/coverage.xml" />
Для этого есть удобный инструиент Robotium. Взять можно здесь code.google.com/p/robotium/. [3]
Настройка:
- super("com.example.myproject", MyActivity.class);
где «com.example.myproject» — пакет тестируемого проекта, MyActivity — тестируемая Activity.
- private Solo solo;
- @Override
- public void setUp() throws Exception {
- solo = new Solo(getInstrumentation(), getActivity());
- }
- @Override
- public void tearDown() throws Exception {
- solo.finishOpenedActivities();
- }
и далее можно писать тесты вида
- public void testPreferenceIsSaved() throws Exception {
- solo.sendKey(Solo.MENU);
- solo.clickOnText("More");
- solo.clickOnText("Preferences");
- solo.clickOnText("Edit File Extensions");
- Assert.assertTrue(solo.searchText("rtf"));
- solo.clickOnText("txt");
- solo.clearEditText(2);
- solo.enterText(2, "robotium");
- solo.clickOnButton("Save");
- solo.goBack();
- solo.clickOnText("Edit File Extensions");
- Assert.assertTrue(solo.searchText("application/robotium"));
- }
Подробности можно почитать тут code.google.com/p/robotium/w/list. [4]
Подробности тут [5].
Релизную сборку собрать попроще, чем запустить тесты.
- Targets:
- release
- Build File:
- MyProjectbuild.xml
- Properties:
- sdk.dir=D:\android\android-sdk-windows
- key.store=..\myproject.keystore (относительный путь к файлу-хранилищу ключа, сам ключ я положил в trunk)
- key.alias=<alias>
- key.store.password=<pass>
- key.alias.password=<pass>
Спасибо за внимание, надеюсь этот пост поможет сделать ваши программы чуточку лучше.
Автор: bivy
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/android/2428
Ссылки в тексте:
[1] testdroid.com/: http://testdroid.com/
[2] здесь: https://wiki.jenkins-ci.org/display/JENKINS/Building+an+Android+app+and+test+project
[3] code.google.com/p/robotium/.: http://code.google.com/p/robotium/.
[4] code.google.com/p/robotium/w/list.: http://code.google.com/p/robotium/w/list.
[5] тут: https://wiki.jenkins-ci.org/display/JENKINS/Android+Emulator+Plugin
Нажмите здесь для печати.