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


Источник изображения
В данной статье я хочу ознакомить вас с еще одним фреймворком для автоматизации тестирования мобильных приложений, а конткретно с Calabash – кроссплатформенным решении для приемочного тестирования Android и iOS приложений. Статья рассчитана на новичков.

Calabash

Calabash – это фреймворк для автоматизации функционального приемочного тестирование, тесты написанные на Calabash (Cucumber-подобные сценарии) позволяют тестировать как Android, так и iOS приложения. Calabash разрабатывается кампанией Xamarin.

Чтобы использовать Calabash, необходимо установить следующие компоненты:

Calabash постоянно развивается, поэтому самую свежую версию документации можно найти на сайте: github.com/calabash/calabash-android.

Преимущества Calabash для тестирования приложений:

  • Простота написания тестов
  • Возможность написания кроссплатформенных тестов (для Android и iOS)
  • Написания сценариев в стиле Cucumber
  • Отличный Ruby API
  • Возможноность запускать тесты в облаке
  • Возможность запускать тесты на эмуляторе

Недостатки:

  • Порой, трудно идентифицировать объекты
  • Не всегда хватает предписанных шагов для написания тестового сценария
  • Необходим apk-файл тестируемого приложения
  • Достаточно долгое прохождение тестов

Разработка тестового сценария:

Для ознакомления я буду писать простые тестовые сценарии на ОС Windows 7, чтобы показать принцип работы. В данном тесте будет реализована проверка голландской локализации меню приложения. Определим действия, которые будут реализованы в тесте:

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

В качестве примера я взял Clean Master (Free) (apk доступен на сайте: www.androiddrawer.com/) – простую программу для очистки телефона.

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

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

Для удобства я использую интрективную командную строку с Ruby:

Для начала работы необходимо:

  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"

  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

  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.

Получаем следующий незамысловатый сценарий

Feature: Menu localization  Scenario: As a user I can open menu and verify options 	When I press the menu key 	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 приложений без больших усилий. Также присутствует возможность развертки тестирования в облаке компании Xamarin. Фреймворк активно развивается, прост в использовании и интеграции. Со временем я собираюсь написать небольшой пост о том, как программировать свои действия с помощью Calabash Ruby API.

ссылка на оригинал статьи http://habrahabr.ru/post/219655/

Один комментарий к “Автоматизация приемочного тестирования Android приложений с помощью Calabash

  1. Не получается переподписать приложение.

    c:\Users\GalkaDA\calabash_habr\features>calabash-android resign «Clean Master_3.
    8.1.apk»
    C:/Ruby193/lib/ruby/gems/1.9.1/gems/calabash-android-0.5.1/lib/calabash-android/
    helpers.rb:77:in `sign_apk’: private method `sign_apk’ called for nil:NilClass (
    NoMethodError)
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/calabash-android-0.5.1/lib/cala
    bash-android/helpers.rb:57:in `block in resign_apk’
    from C:/Ruby193/lib/ruby/1.9.1/tmpdir.rb:83:in `mktmpdir’
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/calabash-android-0.5.1/lib/cala
    bash-android/helpers.rb:51:in `resign_apk’
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/calabash-android-0.5.1/bin/cala
    bash-android:114:in `’
    from C:/Ruby193/bin/calabash-android:23:in `load’
    from C:/Ruby193/bin/calabash-android:23:in `’

    Подскажите пожалуйста как можно решить эту проблему.

    Спасибо!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *