Пользователь
0,0
рейтинг
29 июня 2011 в 17:59

Разработка → Автоматизированное тестирование мобильных приложений

Я провел настоящее исследование ситуации с автоматизированным тестированием интерфейса мобильных приложений. Речь идет не о тестировании модулей, а именно о тестировании интерфейса финального приложения. И, да, прямо на телефоне!

Зачем это нужно? В первую очередь, для гарантированного улучшения качества вашего ПО и улучшении настроения тестировщиков.

В чем идея? Чаще всего тестирование мобильных приложений осуществляется людьми: тестировщик берет приложение, iPhone 3, iPhone 4, iPad, если ему не повезло, то еще берет пару андроидов и GalaxyTab, и тестирует ваше приложение, 80% тестирования составляют примерно такие сценарии:
— запустить приложение, убедиться, что оно не падает;
— перейти на вкладку места, убедиться, что все пункты на месте;
— зайти в один из пунктов, убедиться, что описание на месте;


Такие тесты проводятся после каждого релиза и занимают очень много времени.

В свое время в вебе на помощь пришел Selenium, который позволил через специальный плагин к браузеру записывать действия тестировщика (все помнят макросы в MS Word?) и затем проигрывать их автоматически с проверкой результата. Можно запускать тесты даже на разных браузерах! Мы использовали это решение в своей компании, и оно, действительно, работает. Усилия на разработку тестов окупились.

По сравнению с вебом мобильная разработка еще очень молодая область, и я не ожидал увидеть хороших решений для автоматизированного тестирования интерфейсов. Оказалось, что их более чем достаточно. Хочу рассказать вам о некоторых из них.

iPhone


UIAutomation

Начну со стандартного решения от Apple, которое входит в Instruments.


UIAutomation позволяет выполнять написанные на JavaScript тестовые сценарии как в эмуляторе, так и на устройстве. Тестировать можно любые свои приложения, включая, production сборки. Компилировать дополнительные библиотеки не требуется. Можно запускать скрипты из консоли.

Apple разработала специальный JavaScript API для тестирования. В нем описаны все стандартные элементы интерфейса. Элементы представлены деревом, есть специальные функции для быстрой выборки элементов по типам (buttons, tableViews, textFields...). Если специально не задавать в программном коде Accessibility Label, то элементы можно выбирать только по номеру.

window.tableViews()[0].visibleCells()[1].tap()

Выбор второй ячейки в первой таблице.

Я написал тестовый скрипт для нашего Goozy приложения, он логинится, проверяет, что выбрана вкладка «All», переходит на вкладку «Settings» и разлогинивается.



На написание этого скрипта у меня ушел час, при этом рядом я держал открытый XCode и смотрел, как же представлены элементы в дизайнере, как они генерируются динамически. Ко всему прочему, скрипты пишутся в маленьком окне (на скришноте UIAutomation показан справа), проверки синтаксиса нет, поддержки систем контроля версий нет.

[Подсвеченный код: paste.ly/7mnG]

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

UPD: В Xcode 4.3 появилась возможность записи тестов. Запуск из консоли практически невозможен.

UPD2: При работе с UIAutomation строго рекомендуется задавать всем компонентам Accessibility Label

FoneMonkey

Record&Play решение, интересно тем, что тесты записываются и редактируются (!) прямо из тестируемого приложения на телефоне или эмуляторе.



Тем не менее, телефон должен быть подключен к компьютеру для сохранения тестов. И само собой, в приложении нужно компилировать несколько дополнительных библиотек.

Fonemonkey умеет сохранять тесты в формате UIAutomation, поэтому вы можете после записи прогонять их на «чистых» приложениях.

На мой взгляд, это единственное решение, которое тестировщики могут использовать самостоятельно. При одном условии, тесты будут запускать или разработчики, или они будут автоматически попадать в систему Continious Integration.

UPD: Экспорт в UIAutomation работает очень криво, мне не удалось запустить полученные скрипты.

Платные собратья

Squish

Squish — это решение для тестирования Windows, Mac, Qt и iOs приложений. Лицензия на конкретного разработчика стоит (named license) $2400.



Система интегриуется в HP Quality Center, Seapine TCM или предоставляет Eclipse based IDE. Тестировать можно приложения на эмуляторе или устройстве, доступна запись тестов (record&play). Скрипты могут быть на Javascript, Python, Perl или Tcl.

У системы два минуса: для работы на устройстве (даже для прогона тестов) необходимо компилировать отдельную версию с их библиотекой; второй минус — это эклипс, если вы не разорились на HPQC, врядли, тестировщики смогут полноценно работать с eclipse-based IDE.

В целом, я не вижу принципиальных отличий от свободного FoneMonkey. Разве что, Squish поддерживает мультитач (support for automatic gestures).

JamoSolution

Одна из самых многообещающих платформ. JamoSolution позволяет тестировать iPhone, Android, Windows Mobile и BlackBerry приложения. При этом для всех платформ поддерживается запись тестов (record&play) и вы можете тестировать iPhone приложения на Windows!

У них есть прекрасные демонстрационные видео, вот тестирование под iPhone:


Под Android:


Очень радует возможность видеть экран телефона в IDE. JamoSolution работает через специального агента на телефоне, то есть ваши приложения останутся не модифицированными. Телефон может быть подключен проводом или по WiFi.

Android


Robotium

Самое популярное решение — это Robotium. «It's like Selenium, but for Android» — утверждают разработчики, но это немного не так. Robotium не поддерживает запись тестов (Record&Play) и не умеет делать скриншоты.



Тесты пишутся на Java, фактически, Robotium — это библиотека для обычных Unit тестов, возможности запускать тесты на устройстве нет (remote control). Чтобы тестировать приложения, необходимо их собрать с этой библиотекой. Возможно тестировать приложения без исходников, но процесс нетривиальный.

TestDroid

testdroid logo

Пока я проводил исследование, появилось новое решение для Android. TestDroid — это плагин для эклипса, который позволяет записывать тесты (record&play) в формате Robotium. Система взаимодейтсвует с телефоном путем стандартного Android debugger.

Одна лицензия на TestDroid Recorder стоит $600 в год. Разработчики обещают выпустить еще и TestDroid server, он позволит создавать кластеры для тестирования. Подключите к серверу несколько Android телефонов и запускайте тесты параллельно и удаленно.

К сожалению, решение еще в стадии бета-тестирования и не генерирует тесты на моем маке.



К тому же, судя по логам, не все действия записываются в тесты. Решение многообещающее, но стоит немного подождать.

Windows Phone 7


На момент написания статьи утилит для автоматизации тестирования интерфейса WP7 приложений не существовало.

Absolute Black Box


Наверняка вам знакомо понятие «Черного ящика», так вот, есть как минимум две системы мобильного тестирования работающих по этому принципу.

Это Perfecto Mobile и Device Anywhere.

Суть этих решений в том, что у них стоит ферма реальных мобильных телефонов, подключенных по кабелю, и веб-камера, передающая изображения с телефона. Выглядит это примерно так:



Внутрь фотографии телефона вставлена картинка с веб-камеры. Управляется полностью мышкой.

Основной бизнес Perfecto Mobile и Device Anywhere это даже не автоматическое тестирование, а продажа времени устройств. У них стоят сотни различных телефонов (iPhone/Android/Blackberry...) и час работы с одним телефоном стоит около $15.

Это очень удобное решение, если вы связаны с многими платформами и особенно с Android, под которые бывают десятки разных устройств.

Но, к сожалению, когда я тестировал обе системы из России, все очень жутко тормозило, большой лаг при взаимодействии с телефоном. Тестировщики бы очень нервничали в таком режиме.

Где же автоматика?


Очень интересно реализовано автоматическое тестирование.

Проверка результатов выполняется сверкой картинок и распознаванием текста на экране OCR. Одна из платформ использует знаменитый ABBYY :-)

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

Плюсы
  • Черный ящик — почти нет вмешательства в ваше приложение;
  • Один инструмент и тестовый скрипт для всех мобильных платформ;
  • Многообразие устройств;
  • Можно тестировать любые приложения: нативные, html5, мобильный сайты.
Минусы
  • автоматическое тестирование дорогое;
  • большой лаг при взаимодействии с телефоном.
Мне очень хочется подискутировать в комментариях. Кто разрабатывает мобильные приложения, ответьте, если не сложно, на несколько вопросов:
  1. Под какую платформу разрабатываете?
  2. Что за приложение? (игры, банковский сектор, бизнес приложения, медицина)
  3. Используете ли unit тесты, почему?
  4. Автоматизируете ли тестирование UI, почему?
  5. Если бы стали автоматизировать, какой инструмент был бы для вас идеален?
Анатолий Ларин @junk
карма
66,7
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

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

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

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

  • +2
    маленькая ремарка. UIAutomation во бете xCode 4.2 научился записывать действия пользователей
    • 0
      Запись действий пользователя была и в более ранних версиях, в виде запоминания координат нажатий в iOS Simulator.
      • 0
        Если не ошибаюсь, раньше это делалось через UI Recorder (даже статья на Хабре на эту тему была). Было это жутко не удобно по двум причинам:
        1) Как вы уже сказали, работало оно только в симуляторе
        2) Требовалось, чтобы положение окна симулятора не менялось

        В 4.2 же Automation может полноценно записывать действия пользователя выдавая вполне человекочитабельный JS-скрипт. Это скрипт впоследствии можно отредактировать, добавить логирование и так же успешно запускать на симуляторе или устройстве
    • –1
      А можно скринов? Очень для меня важно.
      • +1
        Xcode 4.2 Developer Preview, iOS 5 beta, iTunes 10.5 beta and Apple TV Software beta are pre-release software and are considered Apple Confidential Information and are subject to the terms of your iOS Developer Program License Agreement. Unauthorized distribution or disclosure of Apple Confidential Information is prohibited.
      • 0
        Habrstorage почему-то отказывается работать, опишу на словах:
        1) xCode 4.2, Product->Profile
        2) Выбираем Automation
        3) Слева, в группе Scripts, выбираем Add->Create
        4) В правой части окна появится окно для ввода скрипта, в нижней — кнопки для записи и воспроизведения. Нажимаем Record, и начинаем тыкать. В процессе этого действия формируется скрипт
        • –1
          В виде действий с элементами UI? Или по координатам?
          • 0
            Если у вас обычное UIKit приложение, то в виде действий с элементами. Если OpenGL-игра и что-то подобное, то по координатам
  • 0
    Спасибо за статью. Дайте пожалуйста ссылку на JamoSolution и напишите, сколько оно стоит.

    Я правильно понимаю, что это единственное полнофункциональное решение для автоматизированного тестирования под Android?
    • –1
      Почему же, думаю, скоро допилят TestDroid, он выглядит многобещающе.

      www.jamosolutions.net/ к сожалению, цен на сайте нет, и на почту разработчики мне не ответили.

      А расскажите подробнее про себя, какого типа у вас приложение, почему интересует автоматизация тестирования?
      • 0
        У меня несколько приложений. Я интересуюсь автоматизацией пока с теоритической точки зрения. Масштабы пока не те)
      • 0
        Напиши плз если узнаешь чтонибудь. Я им тоже написал, должны же они как-то реагировать )
  • +1
    А среди вышеперечисленного есть аналоги по функционалу Selenium для мобильного браузера? Очень интересует возможность тестировать поведение мобильных веб-страницы в нативных браузерах.
    • 0
      Selenium 2.0 имеет поддержку браузера для Andriod.
      На странице загрузки code.google.com/p/selenium/downloads/list ищите android-server-xxx.apk
      Клиентская часть обычная, как для десктопных браузеров.
    • 0
      Для айфона вот тоже что-то якобы есть: code.google.com/p/selenium/wiki/IPhoneDriver
      Но это не официально поддерживаемый драйвер, так что надо проверять.
  • 0
    отличное исследование
    • 0
      Поможет вам в работе? :)
      • 0
        уже помогает )
        • –1
          А что пишете? Какие требования к качеству? Почему автоматизируете?
          • 0
            Автоматизирую, потому что, релизы каждый день, и рутинные операции полюбому надо автоматизировать. Пока ничего не написал, смотрю на JamoSolution.
  • +1
    Ты герой!
  • –2
    Обзор неплохой, но где же профит?
    • 0
      Какой профит имеется ввиду?
      • 0
        ну вот там про селениум написано, «затраты на разработку тестов окупились»,
        а с этими инструментами как?
        • 0
          Пока никак, это был только обзор. Проектов где стоит внедрить пока нет.

          Но мое мнение, что и для мобильных это окупится. FoneMonkey вполне ок.
          • 0
            Очень бюы хотелось увидеть более развернуто, как оценивается окупаемость автоматических тестов, в особенности record-play типа.
            • 0
              Запрос принят :) Напишу как внедрим.

              В целом нужно оценить три критерия:
              — удовлетворенность тестировщика
              — производительность тестировщика
              — гарантированное улучшение качества продукта

              И противопоставить им время на обучение тестера и запись сценарием.

              Не для всех приложений это подходит, но там где есть хотя-бы 5 итераций и требования к качеству, вполне.
  • 0
    Спасибо! Очень полезный обзор! Сам как раз начинал гуглить эту тему и собирать инфу, а Вы так вовремя выложили на блюдечке!
  • 0
    на самом деле роботиум можно использовать и в функциональном тестировании через Instrumentation. Лично я так делал. Правда вот с заявленной поддержкой multiple activity testing не все так гладко.
  • 0
    >Тестировать можно только приложения собранные в Debug-режиме
    Это голословно :)
    Your test script must be a valid executable JavaScript file accessible to the instrument on the host computer. It runs outside your application, so the tested version of your application can be the same version that you submit to the iTunes App store.
    Тестировала как на дебаге так и на релизе, работает на ура.
    Про UI Automation можно еще добавить, что сам тул запустить не руками нельзя (ну практически нельзя ;))ю
    Статья понравилась :) Автору спасибо!
  • 0
    Спасибо!
  • +1
    В дополнение еще один инструмент eggPlant — использует распознавание изображений для автоматизации тестирования. По заявлению разработчиков работает с любой ОС и любым девайсом используя VNC или эмуляторы
  • 0
    Вот самый полный список инструментов тестирования приложений для мобильных устройств — www.enterra.ru/blog/tools_for_qa/

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