среда, 1 февраля 2012 г.

Тестирование Android приложений

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

Данная статья - это каталогизированный набор ссылок по теме тестирования Android приложений, с краткими аннотациями. Я создал его для того, чтобы самому было удобнее разбираться во всем этом материале и выбирать оптимальную стратегию тестирования собственных Android приложений. Надеюсь, этот набор ссылок пригодится и вам.

С чего начать

В июне 2011 вышла книга, посвященная тестированию Android-приложений: Diego Torres Milano. Android Application Testing Guide. Книга добротная, написана хорошо. Блог автора так же содержит массу полезной информации, например - вот презентацию Introduction to Android Testing @ OSCON 2012 (PDF).

Официальная документация по встроенным средствам тестирования Android Developers Guide. Testing (перевод). Из недостатков: Android testing API основано на стиле JUnit 3 и не поддерживает JUnit 4. Тесты запускаются и работают на эмуляторе/девайсе, т.е. запуск медленный.

Тестирование Android приложений - пример разработки небольшого Android-приложения с тестом на базе стандартного фреймворка android.test.

Best practices for unit testing Android apps - обсуждение инструментов тестирования на stackoverflow.

How to do Unit Testing on Android with Eclipse - видео, демонстрирующее создание тестового проекта в Eclipse.

Автоматизированное тестирование мобильных приложений - обзор инструментов для тестирования интерфейса мобильных приложений.

Серия курсов - Автоматизация мобильных приложений (в настоящее время курсов там мало, но анонс многообещающий).

Шаблоны проектирования при разработке под Android. Часть 2 — MVP и Unit tests. Путь Джедая, Шаблоны проектирования при разработке под Android. Часть 3 — Пользовательский интерфейс, тестирование, AndroidMock - пара статей по теме тестирования на хабре. Содержание местами спорное, но комментарии, как всегда, интересные.

Testing on android - весьма интересная презентация с полезными ссылками.

Серия обзорных статей, посвященных тестированию мобильных приложений: Mobile Application Testing - Part I, part II, part III.

Проблема скорости запуска тестов

При разработке под Android очень не удобно использовать короткие unit-тесты (раз статья, два статья). Дело в том, что стандартные тесты работают только на эмуляторе или на устройстве (т.к. зависят от Android API). Запуск тестов, в этом случае, становится достаточно длительным.

Для ускорения работы можно выделять Android-независимые тесты в отдельный Java проект и запускать их на JVM компьютера, но это, конечно же, не решение проблемы. Вот дискуссия на stackoverflow: Best practices for unit testing Android apps. Основные варианты: использовать библиотеки Robolectric и Robotium .

Библиотека Robolectric действительно решает проблему скорости запуска теста. Тесты запускаются не на эмуляторе/устройстве, а прямо на JVM компьютера, что на порядок быстрее. Robolectric позволяет тестировать большую часть функциональности Android, включая layouts, GUI, сервисы, работу с сетью, виджеты. К тому же, Robolectric использует синтаксис junit4. В то же время следует отдавать себе отчет в том, что Roboelectric эмулирует Android API. Точность и полнота такой эмуляции, естественно, не 100%.

Introducing Calculon – a Java DSL for Android Activity testing - библиотека для удобного тестирования Activity.

Mock-библиотеки под Android

Про то, что такое mock-объекты и как их использовать, есть статьи на хабре: JMock и EasyMock: сравнение и howto в примерах и не только, Глоток МоКито. Mock-библиотек, работающих под Android, существует несколько: EasyMonkey, PowerMock, Android Mock, Mockito.

Автоматизация тестирования. Многократное воспроизведение записанного теста.

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

Robotium - фреймворк, дающий возможность разрабатывать тесты "черного ящика" для Android приложений. Тесты пишутся на Java. Для тестирования создается стандартный тестовый проект, в который добавляется библиотека Robotium. Тестовый проект можно запускать как на эмуляторе, так и на девайсе. Robotium использует синтаксис JUnit3. Порядок установки и создания тестового проекта на Robotium подробно описан в Robotium Tutorials. Полезная статья: Настройка среды для разработки Android приложений и автоматизации на Robotium.

FoneMonkey for Android - бесплатный open source инструмент для тестирования rich interface, разработанный компанией Gorilla Logic (см. интервью с разработчиком FoneMonkey for Android, а так же статью в DrDobbs, посвященную FoneMonkey for IOS). Программа умеет записывать высокоуровневые action-based test automation скрипты на Java/Java Script, которые можно редактировать и (при необходимости) писать вручную.

Sikuli - еще один бесплатный инструмент для автоматизации тестирования GUI. Особенность - скрипт, задающий последовательность действий, позволяет использовать скриншоты. Чтобы дать команду нажать кнопку, достаточно подставить в скрипт скриншот этой кнопки (используется специальная Sikuli IDE). Видео на youtube наглядно демонстрирует процесс создания скрипта. А вот пример видео, где sikuli "играет" в Angry birds. Вот пример использования sikuli для тестирования Android GUI. Преимущества и недостатки использования Sikuli для тестирования мобильных приложений приведены в презентации.

T-PLAN ROBOT (VNCRobot) - универсальный инструмент для тестирования "черных ящиков" (видео, mobile testing brochure (pdf)). Есть платная и бесплатная open-source версия.

На самом деле, инструментов, предназначенных для автоматизации тестирования приложений, очень много. Из платных отмечу: Eggplants,Test Quest, ZPX. Есть еще Jamo Solutions: M-eux test и SeeTest специально заточенные под мобильные приложения.

Облачные сервисы

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

Специальные сервисы предоставляют доступ к стендам, содержащим множество разнообразных устройств, и позволяют провести тестирование на всех этих устройствах разом. Таких сервисов как минимум три: Perfecto Mobile, Device Anywhere и TestDroid. Вот здесь описан принцип работы Device Anywhere и приведены скриншоты. Услуга удобная, но достаточно дорогая.

TestDroid, кстати, позволяет записывать тесты в формате Robotium. Update: Online emulator для множества различных Android-девайсов. В настоящий момент - бесплатен.

Сервисы для бета-тестирования

uTest - сообщество из 45 тыс профессиональных тестеров из 180 стран. Реальные пользователи протестируют работу вашего приложения. Платный.

The Beta Family - бесплатный сервис для тестирования приложения. Заводите аккаунт, заливаете бета-версию приложения, рассылаете приглашение на тестирование, обрабатываете результаты тестирования. На главной странице сайта написано, что сервис предназначен для тестирования iPhone/iPad/iPod приложений. Но Android так же поддерживается, о чем прямо написано в FAQ. Можно выбрать тип бета-тестеров: private или public. Если public, то ваше приложение смогут тестировать все желающие.

Appaloosa - сервис для приватного распространения приложения (например, среди доверенных бета-тестеров или среди работников вашей компании). Заводите аккаунт, даете доступ вашим знакомым бета-тестерам. После авторизации бета-тестеры получают возможность скачивать приложения, которые вы выложили на Appaloosa. Бесплатен на стадии бета тестирования, потом станет платным.

Hockey Kit - еще один подобный сервис для распространения бета-версий среди своих бета-тестеров.

Zubhium. Предоставляет SDK, с помощью которого вы в свое приложение встраиваете код для автоматического сбора информации об ошибках. Выкладываете бету. Ее тестируют в настоящий момент на стадии беты и поэтому - бесплатен. Бета тестеров нужно приглашать своих. Полезная презентация на тему Zibhum.

PushLink. Еще один подобный сервис для приватного распространения приложений (например, бета версий). Добавляете в приложение немного кода для работы с PushLink. Собираете apk и отдаете бета-тестеру. Через некоторое время собираете новую версию apk и заливаете на PushLink. Пользователь автоматически получает уведомление о новой версии и скачивает ее с PushLink. Удобно - нет необходимости рассылать новые версии по email. Сервис бесплатен.

MOTOREADY App Testing: MOTOROLA XOOM - платный сервис Motorola для тестирования Android-приложений.

Approve - Android-приложение, призванное упростить процесс распространения apk-файлов среди тестеров. Фактически, обертка над Gmail. Вы посылаете тестеру письмо и прикладываете APK-файл на тестирование. На стороне тестера Approve получает письмо и берет на себя установку приложения, сбор логов, отправку разработчику отчета об ошибках и т.п.

Monkey и т.д.

Инструменты функционального тестирования — Monkey и MonkeyRunner - обзор двух стандартных инструментов: Monkey (стресс-тестирование) и MonkeyRunner("прокликивающие" тесты, сценарии тестов пишутся на Python).

Android: Using monkey from Java - статья в блоге Diego Torres Milano, посвященная стандартной библиотеке chimpchat, эквиваленту monkeyrunner.

Code coverage

Code coverage инструменты определяют степень покрытия кода тестами.

Варианты для Android: EMMA, Robotium, Sonar, включающий Maven и Cobertura. Так же функциональость code coverage есть в бесплатном статическом анализаторе от Google - CodePro AnalytiX

Сбор информации от пользователей

Библиотека ACRA - пишет креш-репорты в документ Google Docs.

BugSense - real-time bug tracking service.

Системы сбора статистики по работе приложения.

Log collector - приложение для генерирования log-файла и отправки его по email. Удобно использовать в своих приложениях для реализации возможности отправки лога.

Другие инструменты

Vogar - запуск большого количества тестов с записью истории выполнения тестов.

Caliper - open-source фреймворк для создания микробенчмарков, их запуска и просмотра результатов.

Android Junit Report - замена стандартному InstrumentationTestRunner с возможностью генерации XML-отчетов.

Тестировщику на заметку

Интересная презентация.

Чек-лист для тестирования Android приложения: http://www.unifiedtestinginitiative.org/Android-UTC.

Best Practice Guidelines for developing quality mobile applications

Android design guidelines

MOTOREADY Test Criteria и MOTOREADY Public Test Cases (PDF) - критерии тестирования приложений, предназначенных для устройств Motorolla. Без привязки к операционной системе.

Особенности окружающей среды

How to test the 3G or Wi-Fi Connection speed on Iphone and Android Smartphones?

Тестирование поведения приложения в условиях нехватки памяти

Wide Area Network Emulator - позволяет разработчику эмулировать проблемы в сети - Network delay, Packet loss, Packet corruption, Disconnections, Packet re-ordering, Jitter и т.д.

Методологии

Test Driven Development, TDD: Разработка через тестирование.

Behavior Driven Development, BDD:: http://behaviour-driven.org, фреймверк для BDD: JBehave

Fitness: www.fitnesse.org, http://fit.c2.com - совместная работа клиентов, программистов и тестировщиков. GivWenZen - запись сценариев тестов простым английским языком.

Update - еще полезные ссылки

Автоматизация тестирования Android приложений (сентябрь 2012) - статья на хабре, посвященная бесплатным средствам реализации автоматического тестирования.
Инструменты тестирования приложений для мобильных устройств: обзор вариантов и возможностей - хорошая ссылка из комментариев.

3 комментария:

  1. интересная подборка ссылок, можно сделать репостинг?

    ОтветитьУдалить
  2. Конечно, делайте, только пожалуйста укажите ссылку на оригинал.

    ОтветитьУдалить
  3. Вот полный список инструментов тестирования приложений для мобильных устройств http://www.enterra.ru/blog/tools_for_qa/

    ОтветитьУдалить