Как протестировать приложение на андроид
При разработке мобильного приложения для android, важно тестировать приложение на реальном устройстве, прежде чем предоставлять его пользователям. В этом разделе описывается, как настроить среду разработки и систему Android для тестирования и отладки приложений на устройстве.
Вы можете использовать любое Android-устройство как среду для запуска, отладки и тестирования приложений. Инструменты, включенные в SDK обеспечивают процесс установки и запуска приложения на устройстве каждый раз при компиляции. Вы можете установить ваше приложение на устройстве непосредственно из Android Studio или из командной строки с ADB (Android Debug Bridge). Если у вас еще нет Android-устройства самое время его приобрести.
Вы могли бы рассмотреть Nexus. Приобрести телефон Nexus можно в Google Play.
Примечание: при разработке устройства, имейте в виду, что вы должны по-прежнему использовать Android emulator для тестирования приложения на конфигурации, которые не являются эквивалентные тем, которые в вашем реальном устройстве. Хотя эмулятор не позволяет тестировать все особенности устройства (например, акселерометр), это позволит Вам убедиться, что ваше приложение работает корректно в разных версиях Android, в различных размеров экрана и ориентации, и т.п.
Включение на android-устройстве режима разработчика
Android-устройства имеют много опций для разработчиков, которые позволяют:
- Включить отладку по USB.
- Быстро формировать отчеты об ошибках на устройстве.
- Показать загрузку ЦП на экран.
- Рисовать отладочную информацию на экране (например, границы расположения, обновления на GPU видом и аппаратных слоев, и другую информацию.
- Плюс еще много вариантов, чтобы моделировать использование приложения или включить отладку вариантов.
Настройка android-устройства для разработки
Имея Android-устройство, Вы можете разрабатывать и отлаживать приложения для Android так же, как и на эмуляторе. Прежде чем начать, нужно сделать несколько вещей:
В файлеAndroidManifest.xml , добавьте android:debuggable="true" в секцию <application> .
Примечание: если вы вручную включите отладку в файле манифеста, не забудьте отключить ее в релизе сборки (опубликованное приложение обычно не должно иметь возможность отладки).
- На большинстве устройств под управлением Android 3.2 или старше, вы можете найти опцию в разделе Настройки > Приложения > Разработка.
- На Android 4.0 и более новых, это в Настройки > Параметры разработчика.
Примечание: правило синтаксиса может незначительно отличаться в зависимости от среды. Ознакомьтесь с документацией udev для вашей системы по мере необходимости. Общие сведения о синтаксисе правил, см. данное руководство написание правил udev.
Примечание: при подключении устройства под управлением Android 4.2.2 или выше вашего компьютера, система показывает диалог с вопросом о том, следует ли принять ключей RSA, что позволяет производить отладку через этот компьютер. Этот механизм безопасности защищает пользователя устройства, поскольку именно она обеспечивает отладку USB и другие команды adb не могут быть выполнены, если вы сможете разблокировать устройство и признать диалог. Для этого необходимо иметь АБР версия 1.0.31 (доступен с платформы SDK R16 на инструменты.0.1 и выше) для отладки на устройстве под управлением Android 4.2.2 или выше.
При использовании Android Debug Bridge (adb), вы можете задавать команды с флагом -d с именем подключенного устройства.
USB Vendor IDs (идентификаторы производителей USB)
Эта Таблица содержит ссылки на идентификаторы, необходимые для того, чтобы добавить поддержку USB-устройства на Linux.
Взрывной рост использования мобильных смартфонов и разработки мобильных приложений делает автоматизацию тестирования ключевым требованием успешной и быстрой поставки качественных мобильных приложений. Автоматизированное функциональное тестирование помогает обеспечить необходимую функциональность мобильного приложения и надлежащую работу пользовательского интерфейса. Однако существует необходимость выйти за рамки функционального тестирования мобильных приложений. Существует множество аспектов производительности мобильных приложений, которые нужно измерять и улучшать. Есть прямая взаимосвязь между производительностью и удобством использования мобильных приложений.
Тестирование является важной частью процесса разработки мобильных приложений. Для Android оно имеет особенную важность, поскольку используемые устройства довольно сильно отличаются друг от друга по следующим параметрам:
- размером и разрешением экрана;
- версией Android;
- форм-фактор устройства;
- системы команд процессора;
- фронтальная камеры, NFC, внешняя клавиатура и т.д.
Процесс тестирования приложений может включать тесты различных типов. Можно регулярно проводить автоматическое тестирование функциональности без дополнительных затрат. Например, можно на ночь запускать тестирование сборки на всех устройствах, а утром анализировать результаты и исправлять ошибки.
Автоматическое тестирование приложений для Android
Рассмотрим несколько средств для автоматического тестирования функциональности, которые входят в состав Android SDK или распространяются с открытым исходным кодом.
Принцип автоматического тестирования приложений
Наша задача — с наибольшей точностью автоматизировать действия, выполняемые вручную. Рассмотрим эти действия. Будем использовать несколько приложений и несколько устройств с Android. Для каждого приложения и каждого устройства нужно выполнить следующие действия:
- Установить приложение на устройство
- Запустить приложение
- Протестировать приложение, используя выбранный метод
- Удалить приложение
- Сбросить устройство в исходное состояние
- На каждом этапе нужно собирать и анализировать данные (журналы и снимки экрана). Ниже описываются средства для автоматизации этих действий.
- Управление устройствами Android
Прежде всего необходимо выбрать компьютер, который будет использоваться для запуска автоматических тестов, и установить на нем Android SDK. В данном примере мы используем настольный компьютер с операционной системой Linux*. На каждом устройстве необходимо отключить экран блокировки и увеличить «время перед переходом в спящий режим» до максимального значения. Для некоторых методик тестирования также нужно отключить изменение ориентации экрана. В составе Android SDK предусмотрено две программы для управления устройствами с Android: ADB и monkeyrunner* ADB (Android Debug Bridge) — это программа командной строки для управления устройствами с Android.
Методы автоматического тестирования Android
Тестирование с помощью Monkey*
Основное преимущество Monkey в отсутствии затрат на обслуживание. К тому же нагрузочное тестирование может выявлять сложные и малозаметные ошибки.
Недостатки тестирования с помощью Monkey:
- Monkey не может имитировать сложные нагрузки, такие как проверка подлинности. В таких случаях функциональность приложений остается непротестированной.
- Игры со сложным управлением, требующие быстрой реакции пользователей и сложных жестов, будут выполнены с самого начала или же вовсе не запустятся.
- Крайне сложно воспроизводить ошибки, обнаруженные с помощью Monkey.
- Monkey не проверяет состояние приложения во время тестирования.
Автоматическое тестирование с помощью Monkey можно считать неплохой начальной проверкой для любого приложения. Этот метод может дать достаточно полезные результаты для определенного приложения. Но при низком качестве тестирования следует использовать другие методы.
Тестирование с помощью MonkeyRunner
Тестирование с помощью getevent и sendevent
Программы getevent и sendevent позволяют пользователю записывать последовательность действий и затем воспроизводить ее. Для запуска этих программ не требуются права доступа root.
- Последовательности событий можно записать без дополнительных затрат в ходе ручного тестирования, если оно проводится;
- Для записи последовательности событий не требуются навыки программирования.
- Последовательности необходимо записывать отдельно для каждого приложения и для каждого устройства. При изменении интерфейса приложение потребуется переделать все записанные действия;
- Этот метод не проверяет состояние приложения во время тестирования. Если отклик приложения задерживается (например, из-за длительной загрузки веб-страницы), то результаты тестирования будут неверными;
- Воспроизведение быстрых и сложных последовательностей занимает больше времени, чем их запись. Поэтому такой метод не всегда подходит для тестирования динамических игр, где важно быстрое реагирование.
Тестирование с помощью Robotium
Robotium не входит в состав Android SDK, эта программа распространяется с открытым исходным кодом. Сценарии Robotium определяют действия на уровне пользовательского интерфейса приложений, а не на уровне устройства ввода. Например, в сценарии требуется коснуться кнопки «ОК». В этом случае скрипт monkeyrunner будет построен следующим образом: «имитировать касание экрана в точке с координатами (x0, y0)». Скрипт Robotium будет построен иначе: «нажать кнопку с текстом «ОК».
Описание действий на уровне интерфейса позволяет сделать тестовый скрипт независимым от расположения и размеров элементов интерфейса, разрешения и ориентации экрана. Кроме того, в Robotium можно проверять реакцию приложения на действия. Например, предположим, что после нажатия кнопки «ОК» должен появиться список с элементом «Элемент 1». В Robotium можно проверять имена элементов списков. Проверка состояния приложения после каждого шага позволяет с легкостью находить шаг, на котором произошла ошибка.
- Для каждого приложения требуется разрабатывать тестовый сценарий на языке Java*. Для этого требуется время и навыки программирования;
- При смене интерфейса приложения потребуется переделать последовательность событий;
- Создавать сценарии Robotium сложнее, чем записывать события с помощью getevent / sendevent;
В целом, Robotium позволяет создавать тестовые сценарии высшего качества с разумными затратами.
Сравнение методов тестирования мобильных приложений
Метод тестирования | Преимущества | Недостатки |
Monkey — поток случайных действий пользователей | Затраты на обслуживание отсутствуют. |
Независимость от устройства.
Сложно воспроизводить последовательность действий, вызвавших ошибку, в отчетах об ошибках.
При смене интерфейса приложения необходимо переделывать последовательность событий.
Скрипт может не зависеть от разрешения и ориентации экрана.
Автоматическое тестирование не заменяет другие типы тестирования. Продуманный процесс тестирования, сочетающий различные методы, в том числе и автоматическое тестирование, является важнейшей частью процесса разработки высококачественных приложений.
Ручное тестирование Android приложений
Рассмотрим ручное функциональное тестирование. Тестировщик устанавливает на устройство приложение, вдумчиво проверяет всю функциональность, затем возвращает устройство в первоначальное состояние. И так для каждого приложения и каждого устройства. Очевидный недостаток такого способа – большие затраты времени для регулярного тестирования.
Тестирование мобильных приложений существенно отличается от тестирования приложений, предназначенных для использования на персональных компьютерах. Приведем ряд основных моментов, которые нужно протестировать:
- Установка и запуск приложения, выход из приложения, повторный вход, удаление приложения с мобильного устройства;
- Мультитач и размер экрана. Корректность удаления 2-х элементов или просмотр двух элементов, нажатием на них одновременно. Проверка многократного быстрого нажатия на кнопку – часто при этом может случиться падение приложения. В приложении должны отсутствовать пустые экраны, чтобы пользователь не оказался в ситуации, в которой не очевидно, что делать. Также все элементы должны быть такого размера, чтобы пользователь мог однозначно нажать на них.
- Стабильность. Работа приложения при множестве запущенных приложений и долгое время, а также в случае недостатка места для установки или работы приложения. Поведение приложения при отсутствии в некоторых устройствах поддерживаемых приложением функций.
- Адаптация приложения к портретной и альбомной ориентациям устройства.
- Стресс. Реакция приложения на внешние прерывания:
- входящие и исходящие SMS, MMS, звонки, оповещения других приложений;
- переход устройства в режим ожидания;
- выключение устройства, разрядка устройства;
- зарядка устройства;
- отключение интернета;
- переход в другое приложение.
Как показывает практика тестирования мобильных приложений, наиболее корректной работы приложения можно добиться при ручном тестировании на реальных мобильных устройствах.
Особенности альфа/бета тестирования в консоли разработчика Google Play
В консоли разработчика Google Play можно выбирать группы пользователей для альфа- и бета-тестирования различных версий приложения, после чего поэтапно внедрять обновления.
Что нужно знать перед началом тестирования
В аккаунте разработчика доступны инструменты для альфа- и бета-тестирования различных версий вашего приложения. Тестирование приложения возможно без публикации рабочей версии APK-файла. Обратите внимание на следующую информацию:
Мы рекомендуем начать с маленькой группы альфа-тестировщиков, а затем перейти к бета-тестированию с участием большего количества пользователей. Файлы дополнений можно тестировать с помощью альфа-канала распространения в консоли разработчика. Для тестирования нельзя использовать черновики, то есть файл APK должен быть опубликован как альфа-, бета- или рабочая версия. Файлы дополнений нельзя добавлять для первого загруженного файла APK нового приложения.
Компания GETBUG помогаеn обеспечить корректную и стабильную работу мобильного приложения на целевых устройствах, сделать его удобным для пользователя и оптимизировать производительность как самого мобильного приложения, так и мобильного решения в целом.
На дворе 2016 год, и для тестирования разнородных проектов существует уже немало автоматизирующих библиотек, с помощью которых можно проверить поведение даже самых незначительных частей программы. Собрали для вас самые популярные из таких инструментов, предназначенных для мобильной разработки.
Calabash
Это фреймворк для автоматизации функционального тестирования, который является своего рода драйвером, управляющим работой приложения на девайсе или симуляторе. Подходит как для Android-приложений, так и для приложений для iOS. Разработкой и поддержкой занимается компания Xamarin. Также компания Xamarin предоставляет платную услугу тестирования в «облаке». С тем, как это работает, можно ознакомиться тут.
Appium
Это open source фреймворк, который помогает автоматизировать тестирование мобильных приложений. В последнее время Appium часто упоминают на конференциях, а используется он даже Яндексом. Про его установку и настройку можно прочитать здесь.
Robotium
А Robotium предназначен для Android-приложений. С помощью него разработчики могут писать функциональные тесты, охватывающие несколько Android активити. Рекомендуем вот этот вебинар для освоения Robotium.
Espresso
Espresso — это инструмент для тестирования пользовательских интерфейсов Android-приложений. Основной API невелик и прост, но поскольку исходный код инструмента открыт, вы можете расширить его для своих нужд.
iOS UI automation
Это родной инструмент от Apple. Не упомянуть его было нельзя, но сразу стоит оговориться о нескольких минусах:
- Тесты нужно писать на JavaScript.
- Для запуска тестов нужно открывать отдельное приложение, что не слишком удобно, особенно если использовать CI (continuous integration).
- Приложение должно быть подписано. Подписать приложение, может, и не проблема, но делать это, просто чтобы научиться использовать инструмент, мало кому хочется.
UI Automator
Аналог UIAutomation для тестирования Android-приложений. Разрабатывается корпорацией Google и поставляется вместе с Android SDK.
KeepItFunctional
KIF позволит вам проверить то, как ваше iOS приложение воспринимают люди с плохим зрением.
MonkeyRunner
Инструмент monkeyrunner предоставляет API для написания программ, которые управляют Android-устройством или эмулятором извне Android-кода. Вы можете написать программу на Python, которая установит приложение или тестовый пакет, запустит его, отправит нажатия, сделает скриншоты интерфейса и сохранит их.
Ranorex
SeeTest
Ещё один фреймворк для автоматизации тестирования. Код можно расширить с помощью встраиваемых инструментов, а скрипты можно запускать на разных устройствах без изменений. SeeTest также можно использовать для тестирования отзывчивых веб-сайтов и пользовательских интерфейсов.
TestFairy
При публичном тестировании мобильных приложений очень сложно узнать, из-за чего конкретно у пользователя возникла та или иная проблема. TestFairy решает эту проблему, записывая все тесты на видео, а также запоминая технические характеристики устройства.
По разным данным в среднем человек проводит с мобильным устройством от 3 до 6 часов в день. Это большая аудитория, возможно она даже больше аудитории десктопных приложений. Раз мобилками пользуется так много людей, значит там много денег. Чтобы заработать больше деньег качество приложения должно быть на высоте. Конечно же за это качество отвечают в большей степени тестровщики.
Чтобы обеспечить достойное качество мобильного приложения нужно знать основные принципы мобильного тестирования. О них и поговорим ( если что-то забыл, добавляй в комментариях ).
В конце статьи бонусом собрал видео лекции об особенностях мобильного тестирования.
С чего начать
Мобильные приложения делятся на 3 типа:
- Нативное приложение - приложение под определенную платформу доступное через маркетплейс (Google Play, AppStore и т.д.). Еще одно важно отличие - автономная работа в режиме оффлайн. Яркий пример мобильные игры.
- Веб-приложение - открывается через браузер, а значит это просто веб-сайт.
- Гибридное приложение - устанавливается через маркетплейс, а отображается внутри приложения как веб-сайт. Часто это приложения супермаркетов, недорогих доставок еды.
Немного о плюсах и минусах типов
Говорим о плюсах и минусах именно для тестирования. Если говорить в общем, то список будет намного длинее. Например, нативное приложение очень дорогое в ращработке и тестировании, что является минусом для бизнеса.
Плюсы нативного приложения:
- практически вся функциональность доступна в оффлайне
- скорость работы выше других типов моб. приложений
- полный доступ к функциям девайса (FaceID, отпечаток пальца, камера и т.п.)
Минусы нативного приложения:
- правки багов доезжают только при релизе следующей версии
- тестирование на каждой платформе
- занимают больше памяти
- правки багов приезжают быстрее
- тестирование проводится в браузере и не сильно завязано на ОС/модель телефона/платформу
- не требуется тестировать установку, удаление и обновление
- ограниченный доступ к функциональности девайса (FaceID, отпечаток пальца, камера и т.п.)
- не работают в оффлайне
Плюсы гибридного приложения:
- мультиплатформенные, т.е. реализация на всех ОС одна
- правки багов приезжаюь быстрее, т.к. по сути функционал это встроенный веб-сайт в приложение
- могут использовать большинство функций девайса
Минусы гибридного приложения:
- не работают в офлайне
- ограниченный доступ к функциональности девайса
Типы тестирования мобильных приложений
- Функциональное тестирование - проверка реализованного функционала. Чаще всего сравнивается реализация и ТЗ.
- Тестирование пользовательского взаимодействия (также известное, как тестирование удобства использования, тестирование UX) - удобства работы с приложнием: свайпы, тапы, скролы и т.п.
- Тестирование совместимости - установка на разные ОС, платформах, на разных моделях, проверка на разных разрешениях и т.п.
- Тестирование подключения - проверка на разных типах подключения(wi-fi, мобильная сеть), переключение типов и оффлайн работа
- Тестирование производительности - утечка памяти, стабильность работы при большом количестве пользователей и т.п.
Как выбрать устройства для тестирования
Платформа (смартфон или планшет), ОС определяютя техническим заданием.
Выбор версий и моделей базируется на статистике. Это либо внутреняя статистика вашего сервиса (google analytics, яндекс метрика) или общедоступные дашборды:
- официальная статистика использования устройств Apple
- официальная статистика использования устройств Android
- deviceAtlas - позволят получить выборку по разным параметрам (регион, производитель и т.д.)
- statcounter - аналог deviceAtlas
Дальше зависит от технической базы твоей компании. По возможностям выбираете тестирование на физических устройствах, сервисах удаленного доступа к физическим устройствам ( perfecto , Device Everwhere ) или на симуляторах/эмуляторах.
Не стоит забывать про тестирование на пользователях в бете. Это возможно тестирования на широком наборе устройств, с разными ОС, ресурсами и т.д. Например, в Google Play при публикации приложения есть возможность раздать новое приложение только на некоторый процент пользователей.
Основные проверки по типам тестирования
Функциональное тестирование
- Установка приложения
- Тестирование по ТЗ
- Соответствие общепринятым правилам, например, математическим
- Первый запуск приложения
- Открытие приложения из списках активных (горячий старт)
- Открытие приложения, когда его нет в списке активных (холодный старт)
- Открытие приложения интентом, т.е. вызвать другим приложением, например, тап по ссылке в мессенджере вызывает тестируемое приложение
- Закрытие (только тестируемого приложения, всех приложений в менеджере приложений)
- Удаление приложения из разных точек (логнтапом по иконке, из списка установленных приложений)
- Обновление ( важно проверить сохраность пользовательских действий)
Тестирование пользовательского взаимодействия
Про тестирование пользовательского взаимодействия можно говорить много, поэтому поговорим об этом в отдельном посте (не забудь подписаться , чтобы не пропустить).
Тестирование совместимости
- Проверка на платформах: смартфон, планшет. Возможно по ТЗ будет необходимость проверить на умных колонках, часах или навигаторе.
- Тестирование на разных девайсах: модель, производитель, версиях ОС.
- Если это веб-приложение, то проверить на топовых браузерах
- Проверка на разных разрешениях и масштабах, в альбомной и портретных ориентациях экрана
- Перенос приложения на внешний/внутрений носитель
- Проверка доступности 3rd party services (CDN, библиотеки и т.п.)
Тестирование подключения
- Тестирование при подключеном Wi-Fi, 4G/3G/E/etc
- Разрыв и восстановление сети
- Переключение с одного типа сети к другому
- Оффлайн
- Смена, отключение геопозиции
Тестирование производительности
- Если это веб-приложение, то замерить производительность Lighthouse , Яндекс Метрикой и т.п.
- Репорты с маркетплейсов. Например Google Play присылает отчет об опубликованном приложении (безопасность, краши и т.п.)
- Отзывы пользователей
- Нагрузочное/стресс/стабильности тестирование
Особенности, о которых нужно помнить
Некоторые особенности, которые отличают мобильные приложения от десктопных, и как следствие накладывают дополнительные условия тестирования:
- Смена геопозиции в широком диапазоне. Юзер мобильных приложений более подвижные, чем десктопные :)
- Устройства сильно различаются: платформа, ОС, разрешение, ориентация, ресурсы (память, камера, наличие внешней памяти, датчики освещенности, ориентация экрана, датчики bluetooth/NFC/Wi-Fi/4G/etc)
- Способ взаимодействия в 90% тач. Плюс многие сенсоры оснащены мультитачом.
- Отдельно стоит проверить установку/обновление/работы при недостатке памяти
- Работу при отключении/включении функциональности девайса: bluetooth, NFC, режим полета, ночное освещение, движение глазами и т.п.
- Ограничения ОС. Тут куча кейсов с блокировкой кук, передачи геопозиции и т.п. на уровне ОС.
- Извлечение/переключение sim/flash-карты
Бонус
Особенности тестирования мобильных приложений
Читайте также: