
Источник изображения
В данной статье я хочу ознакомить вас с еще одним фреймворком для автоматизации тестирования мобильных приложений, а именно с Calabash – кроссплатформенным решением для приемочного тестирования Android и iOS приложений. Статья рассчитана на новичков, которые тестируют или хотели бы тестировать Android приложения.
Calabash
Calabash – это кроссплатформенный фреймворк с открытым исходным кодом для автоматизации приемочного тестирование Android и iOS приложений. Разработкой и поддержкой занимается компания Xamarin. Также компания Xamarin предоставляет коммерческую возможность тестирования в «облаке».
Calabash состоит из библиотек, которые дают возможность тесту программно взаимодействовать с нативными и гибридными приложениями. Взаимодействие заключается в виде реализованных действиях пользователя. Такими действиями могут быть:
- Жесты
Касания и жесты (tap, swipe, rotate и т.п.).
- Проверки
Например: Должна присутствовать кпопка «Login» на экране.
- Получения снимка с экрана мобильного устройства
Calabash можно сравнить с Selenium WebDriver. Однако, следует понимать, что взаимодействие с вэб-приложением с компьютера существенно отличается от взаимодействия нативных приложений использующих сенсорный экран.
Calabash поддерживает Сucumber. Cucumber позволяет нам описать поведение программы используя простой «человеческий» язык, который понятен бизнес-аналитику, менеджеру и тестировщику без знаний программирования. Взгляните на пример:
Feature: Rating a stand
Scenario: Find and rate a stand from the list
Given I am on the foodstand list
Then I should see a "rating" button
And I should not see "Dixie Burger & Gumbo Soup"
When I touch the "rating" button
Then I should see "Dixie Burger & Gumbo Soup"
When I touch "Dixie Burger & Gumbo Soup"
Then I should see details for "Dixie Burger & Gumbo Soup"
When I touch the "rate_it" button
Then I should see the rating panel
When I touch "star5"
And I touch "rate"
Then "Dixie Burger & Gumbo Soup" should be rated 5 stars
Более подробно ознакомится с Cucumber можно, например, прочитав статью: habrahabr.ru/post/62958
Преимущества Calabash для тестирования приложений:
- Простота написания тестов
- Возможность написания кроссплатформенных тестов (для Android и iOS)
- Написания сценариев в стиле Cucumber
- Отличный Ruby API
- Возможность запускать тесты в облаке
- Возможность запускать тесты на эмуляторе
Недостатки:
- Порой, трудно идентифицировать объекты
- Не всегда хватает предписанных шагов для написания тестового сценария
- Необходим apk-файл тестируемого приложения
- Достаточно долгое прохождение тестов
Установка
Тестировать с помощью Calabash можно как на Windows, так и на Linux или MacOS, однако в данном случае я использую 64-разрядную ОС Windows 8 (Также проверял на Windows 7 64x). Для начала работы Сalabash необходимо установить некоторые компоненты:
- JDK7 Standard Edition
Если у Вас не установлен JDK7 (или 6), то скачайте и установите его: www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html. После того как установили JDK необходимо создать системную переменную JAVA_HOME, которая будет указывать расположение JDK. Также добавте в переменную окружения PATH путь к java (если Вы не меняли путь установки JDK, то java находится тут: C:\Program Files\Java\jre7\bin).
- Android SDK
Скачайте и распакуйте в удобное место Android SDK (или ADT Bundle): developer.android.com/sdk/index.html?hl=sk. После этого необходимо создать переменную ANDROID_HOME указываящая раположение Android SDK (у меня: C:\adt-bundle-windows-x86_64-20131030\sdk), а также добавьте в PATH расположение adb (например, C:\adt-bundle-windows-x86_64-20131030\sdk\platform-tools)
- Ant
Скачайте и распакуйте Ant (http://ant.apache.org/bindownload.cgi), а затем создайте переменную ANT_HOME, в которой прописывайте путь к Ant и, как прежде, добавляйте разположение ant.exe в переменную окружения PATH, а именно %ANT_HOME%\bin
- Ruby 1.9.3. (не 2.0 !!!)
Скачайте установочный файл с сайта rubyinstaller.org/downloads и устанавливайте, во время установки поставте галочку напротив опции «Add ruby executables to your PATH»
- Ruby Development Kit
Также необходим Ruby Development Kit для доступа к Ruby gems (пакетный менеджер). Скачать установочный файл нужно на сайте: rubyinstaller.org/downloads. Установите, следую инструкции на экране.
После этого проверьте, что Вы правильно добавили переменные:

Все в порядке, устанавливаем Calabash-android из пакетного менеджера Ruby gems (запустите командную строчку windows):
> gem install calabash-android
Все установлено, теперь можно приступить к тестированию.
Разработка тестового сценария
Для ознакомления не будем создавать сложные сценарии: реализуем проверку голландской локализации меню приложения. Тестировать будем известное многим приложение Clean Master (Free) версии 3.8.1, apk которого доступен на сайте: www.androiddrawer.com.
Определим действия, которые будут реализованы в тесте:
- Проверка наличия всех необходимых опций в меню приложения
- Изменения языка приложения на голландский
- Проверка корректности перевода опций меню
Анализ приложения
Для анализа пользовательского интерфейса приложения будем использовать консольную интерективную среду Calabash. Ruby API ( github.com/calabash/calabash-android/blob/master/documentation/ruby_api.md ) позволяет нам получить объекты и их свойства, которые присутствуют на экране. Наиболее нужнымы командами интерактивной среды calabash являются: query для поиска необходимых объектов и их свойств, tap – команда нажатия на объект, а также команда performAction – исполнение определенных действий (нажатие на кнопку «назад», «меню», проскроллить и тому подобное). Анализ UI приложения значительно упростит процесс написания тестового сценария.
Для начала работы необходимо:
- Создать директорию, где будет храниться наш проект:
> mkdir calabash_habr && cd calabash_habr
- Сгенерировать файловую структуру Cucumber, которая включает в себя директории с описанием фич(features), описанием шагов(step definitions), support:
> calabash-android gen
- Поместим apk в корень директории с проект
- После этого необходимо переподписать приложение:
> calabash-android resign "Clean Master_3.8.1.apk"
Если Вам не удалось переподписать, то сначала необходимо выполнить команду:
keytool -genkey -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android -keyalg RSA -keysize 2048 -validity 10000 -dname "CN=Android Debug,O=Android,C=US"
- Подключите устройство
- Установим тестируемое приложение на устройство:
> adb install "Clean Master_3.8.1.apk"
Теперь можем приступить к анализу интерфейса приложения:
- Запуск интерактивной консольной среды calabash-console
> calabash-android console "Clean Master_3.8.1.apk"
- Запускаем тестовый сервер:
irb(main):001:0> start_test_server_in_background
Если у Вас не удалось запустить тестовый сервер, то выполните команду:
irb(main):001:0> reinstall_apps
- Жмем на кнопку «Меню»:
irb(main):007:0> performAction('press_menu')
И получаем:
{ "bonusInformation" => [], "message" => "", "success" => true }
Меню открылось.
- Нам нужно зайти в «Settings», для этого сперва выясняем какой объект имеет текст «Settings»:
irb(main):008:0> query("* text:'Settings'")
В результате узнаем, что объект с текстом «Settings» имеет id “menuSettings”:
[ [0] { "id" => "menuSettings", "enabled" => true, "contentDescription" => nil, "class" => "android.widget.Button", "text" => "Settings", "rect" => { "center_y" => 67.0, "center_x" => 720.0, "height" => 40, "y" => 47, "width" => 160, "x" => 640 }, "description" => "android.widget.Button@4280e6f8" } ]
- Жмем на кнопку с id “menuSettings”:
irb(main):011:0> tap('menuSettings')
После этого открылись настройки приложения
- Этого достаточно, выходим из интерактивной консоли:
irb(main):003:0> exit
Теперь приступим к написанию теста. Calabash имеет достаточное количество созданных шагов, которые практично использовать при описания фичи. С действиями, которые присутствуют по умолчанию ознакомьтесь на сайте: github.com/calabash/calabash-android/blob/master/ruby-gem/lib/calabash-android/canned_steps.md, а если же не хватает действий по умолчанию, то присутствует описание красивого Ruby API доступное по сайту: github.com/calabash/calabash-android/blob/master/documentation/ruby_api.md.
Открываем файл my_first.feature, который находится в директории features и пишем наш тестовый сценарий. В данном примере воспользуемся шагами, которые предлагает Calabash ( github.com/calabash/calabash-android/blob/master/ruby-gem/lib/calabash-android/canned_steps.md описание шагов)
Получаем следующий незамысловатый сценарий
Feature: Menu localization
# Заголовок сценария
Scenario: As a user I can open a menu and verify options
# Нажимаем на кнопку "Меню"
When I press the menu key
# Проверяем, если текст "Settings", "Update" и т.д.
Then I see "Settings"
Then I see "Update"
Then I see "Like us"
Then I see "Rate us"
Then I see "Feedback"
Then I see "FAQ"
Then I see "Fast Clean"
Then I see "About"
Scenario: As a user I can change language app to Nedelrands
When I press the menu key
When I press "Settings"
Then I press "Language"
When I press "Nederlands"
Then I see "Taal"
When I go back
When I press the menu key
Then I see "Instellingen"
Then I see "Moderniseren"
Then I see "Net als wij"
Then I see "Beoordeel ons"
Then I see "Terugcontact"
Then I see "FAQ"
Then I see "Snel schoonmaken"
Then I see "Over ons"
Как видите, все достаточно просто. Запускаем тест:
> calabash-android run "Clean Master_3.8.1.apk"
В результате прохождения сценария получаем:

Из двух сценариев один не прошел так как один из шагов не прошел проверку. В директории проекта calabash генерирует скришот с именем screenshot_х.png.
Действительно, слово «Update»
не переведено на голландский

Вывод
Использование Calabash framework очень удобен для качественного приемочного тестирования приложений. Вы можете писать тестовые сценарии, которые будут работать как для Android, так и для iOS приложений без больших усилий. Фреймворк активно развивается, прост в использовании и интеграции. Со временем я собираюсь написать небольшой пост о том, как программировать свои действия с помощью Calabash Ruby API. Больше информации можно найти на сайте github.com/calabash/calabash-android.
Для удобства Вы можете склонировать готовый проект с GitHub: github.com/amazpyel/calabash_habr