Пользователь
0,0
рейтинг
17 апреля 2014 в 10:37

Разработка → Автоматизация приемочного тестирования Android приложений с помощью Calabash из песочницы tutorial


Источник изображения
В данной статье я хочу ознакомить вас с еще одним фреймворком для автоматизации тестирования мобильных приложений, а именно с 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 необходимо установить некоторые компоненты:
  1. 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).
  2. 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)
  3. Ant
    Скачайте и распакуйте Ant (http://ant.apache.org/bindownload.cgi), а затем создайте переменную ANT_HOME, в которой прописывайте путь к Ant и, как прежде, добавляйте разположение ant.exe в переменную окружения PATH, а именно %ANT_HOME%\bin
  4. Ruby 1.9.3. (не 2.0 !!!)
    Скачайте установочный файл с сайта rubyinstaller.org/downloads и устанавливайте, во время установки поставте галочку напротив опции «Add ruby executables to your PATH»

  5. 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.

Определим действия, которые будут реализованы в тесте:
  1. Проверка наличия всех необходимых опций в меню приложения
  2. Изменения языка приложения на голландский
  3. Проверка корректности перевода опций меню


Анализ приложения


Для анализа пользовательского интерфейса приложения будем использовать консольную интерективную среду Calabash. Ruby API ( github.com/calabash/calabash-android/blob/master/documentation/ruby_api.md ) позволяет нам получить объекты и их свойства, которые присутствуют на экране. Наиболее нужнымы командами интерактивной среды calabash являются: query для поиска необходимых объектов и их свойств, tap – команда нажатия на объект, а также команда performAction – исполнение определенных действий (нажатие на кнопку «назад», «меню», проскроллить и тому подобное). Анализ UI приложения значительно упростит процесс написания тестового сценария.

Для начала работы необходимо:
  1. Создать директорию, где будет храниться наш проект:
    > mkdir calabash_habr && cd calabash_habr

  2. Сгенерировать файловую структуру Cucumber, которая включает в себя директории с описанием фич(features), описанием шагов(step definitions), support:
    > calabash-android gen


  3. Поместим apk в корень директории с проект
  4. После этого необходимо переподписать приложение:
    > 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"
  5. Подключите устройство
  6. Установим тестируемое приложение на устройство:
    > adb install "Clean Master_3.8.1.apk"


Теперь можем приступить к анализу интерфейса приложения:
  1. Запуск интерактивной консольной среды calabash-console
    > calabash-android console "Clean Master_3.8.1.apk"

  2. Запускаем тестовый сервер:
    irb(main):001:0> start_test_server_in_background

    Если у Вас не удалось запустить тестовый сервер, то выполните команду:
    irb(main):001:0> reinstall_apps

  3. Жмем на кнопку «Меню»:
    irb(main):007:0> performAction('press_menu')

    И получаем:
    {
        "bonusInformation" => [],
                 "message" => "",
                 "success" => true
    }
    

    Меню открылось.
  4. Нам нужно зайти в «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"
        }
    ]
    

  5. Жмем на кнопку с id “menuSettings”:
    irb(main):011:0> tap('menuSettings')

    После этого открылись настройки приложения

  6. Этого достаточно, выходим из интерактивной консоли:
    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
Oleksandr Pylkevych @Amazpyel
карма
5,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (12)

  • 0
    А еще можно использовать calabash-x-platform и шарить pageObject и фичи между iOS/Android. Мы так и поступили :)
  • 0
    Мы тоже так делали, но пришлось самим backdoor фукцию для андройдовой версии писать. Потому что в iOS она есть а в android небыло.
  • 0
    И снова Cucumber :) Важно отметить, что возможность запуска тестов в облаке — коммерческая услуга, которую предоставляет Xamarin.
    Если облачные функциии не нужны, можно еще попробовать Cucumber + Appium.
    • 0
      Appium.

      Да, хорошая вещь. Собираюсь написать о нем в контексте, снова же, андроида.
      • +1
        Мы его используем и для iOS — один набор features, две платформы, все как в книжках :)
        Правда разработка идет не параллельно, а Android приложение копируется с iOS.
  • +1
    Очень заинтересовала эта тема. Решил попробовать. И тут возник вопрос — автор кому этот туториал предназначил?
    Я с Ruby ранее не работал никак, а вот с Android SDK — более чем.
    Ruby DevKit я скачал, надо как-то настроить. init прошел, install — Rubies он хочет. Что это?
    Ладно, едем дальше. Пункт «Calabash из Ruby gems». Что за гемы? Ладно, по ссылке зашел на репозиторий Calabash, иду в хелп «Как ставить». Ммммм… Убунту, Мак. Что мне на Винде делать?
    В общем, либо пишите в начале, какие знания нужны, либо описывайте намного подробнее. И текст далее тоже особой подробностью не отличается.

    Очень надеюсь, что автор из рекламы хорошего продукта сделает полезную для начинающего статью. Сейчас это не туториал.
    • +1
      Обновил статью
      • 0
        Спасибо! Здорово, когда автор откликается на пожелания читателей.
        Будем пробовать.
  • 0
    Переместите, пожалуйста, статью в хаб «Разработка под Android»
  • 0
    Все-таки вопрос, почему непременно версия руби 1.9.3?
    • 0
      На тот момент была такая рекомендация, были проблемы с другими версиями. Сейчас, увы, не знаю как обстоят дела так как я не пользуюсь Calabash уже давненько.
      • 0
        А чем сейчас пользуетесь?

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.