Тестирование Android приложений. C чего начать?


(Mykhailo Poliarush) #1

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



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

С ЧЕГО НАЧАТЬ

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



Официальная документация по встроенным средствам тестирования 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 IIpart 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, существует несколько: EasyMonkeyPowerMockAndroid Mock,Mockito

АВТОМАТИЗАЦИЯ
ТЕСТИРОВАНИЯ. МНОГОКРАТНОЕ ВОСПРОИЗВЕДЕНИЕ ЗАПИСАННОГО ТЕСТА.

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



Robotium - фреймворк,
дающий возможность разрабатывать тесты "черного ящика" для Android
приложений. Тесты пишутся на Java. Для тестирования создается стандартный
тестовый проект, в который добавляется библиотека Robotium. Тестовый проект
можно запускать как на эмуляторе, так и на девайсе. Robotium использует
синтаксис JUnit3. Полезная статья: Настройка
среды для разработки 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 QuestZPX. Есть ещеJamo
Solutions: M-eux test
 и SeeTest специально
заточенные под мобильные приложения. 

ОБЛАЧНЫЕ СЕРВИСЫ

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



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



TestDroid, кстати, позволяет записывать тесты в формате Robotium. 

СЕРВИСЫ ДЛЯ
БЕТА-ТЕСТИРОВАНИЯ

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



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



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



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



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



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

MONKEY И Т.Д.

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



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

CODE COVERAGE

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




Варианты для Android: EMMARobotiumSonar, включающий 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 

ОСОБЕННОСТИ ОКРУЖАЮЩЕЙ СРЕДЫ

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.orghttp://fit.c2.com - совместная работа
клиентов, программистов и тестировщиков. GivWenZen -
запись сценариев тестов простым английским языком.