Взрывной рост использования мобильных смартфонов и разработки мобильных приложений делает автоматизацию тестирования ключевым требованием успешной и быстрой поставки качественных мобильных приложений. Автоматизированное функциональное тестирование помогает обеспечить необходимую функциональность мобильного приложения и надлежащую работу пользовательского интерфейса. Однако существует необходимость выйти за рамки функционального тестирования мобильных приложений. Существует множество аспектов производительности мобильных приложений, которые нужно измерять и улучшать. Есть прямая взаимосвязь между производительностью и удобством использования мобильных приложений.
Тестирование является важной частью процесса разработки мобильных приложений. Для 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, входящая в состав Android SDK, отправляет поток случайных действий пользователя. В командной строке можно указать количество действий пользователя, долю действий каждого типа и имя пакета (чтобы программа Monkey не вышла за пределы тестируемого приложения и не начала, к примеру, рассылать SMS-сообщения всем контактам из адресной книги).
Основное преимущество Monkey в отсутствии затрат на обслуживание. К тому же нагрузочное тестирование может выявлять сложные и малозаметные ошибки.
Недостатки тестирования с помощью Monkey:
- Monkey не может имитировать сложные нагрузки, такие как проверка подлинности. В таких случаях функциональность приложений остается непротестированной.
- Игры со сложным управлением, требующие быстрой реакции пользователей и сложных жестов, будут выполнены с самого начала или же вовсе не запустятся.
- Крайне сложно воспроизводить ошибки, обнаруженные с помощью Monkey.
- Monkey не проверяет состояние приложения во время тестирования.
Автоматическое тестирование с помощью Monkey можно считать неплохой начальной проверкой для любого приложения. Этот метод может дать достаточно полезные результаты для определенного приложения. Но при низком качестве тестирования следует использовать другие методы.
Тестирование с помощью MonkeyRunner
MonkeyRunner позволяет не только создавать сценарии для управления устройствами с Android, но и создавать сценарии для тестирования приложения на определенном устройстве. Основное преимущество – гибкость, а недостаток в сложности написания скриптов, даже в простых случаях. Создание скриптов monkeyrunner занимает немало времени, поэтому обычно этот метод использовать нецелесообразно. Но в некоторых случаях его применение может оказаться весьма полезным.
Тестирование с помощью getevent и sendevent
Программы getevent и sendevent позволяют пользователю записывать последовательность действий и затем воспроизводить ее. Для запуска этих программ не требуются права доступа root.
Преимущества:
- Последовательности событий можно записать без дополнительных затрат в ходе ручного тестирования, если оно проводится;
- Для записи последовательности событий не требуются навыки программирования.
Недостатки:
- Последовательности необходимо записывать отдельно для каждого приложения и для каждого устройства. При изменении интерфейса приложение потребуется переделать все записанные действия;
- Этот метод не проверяет состояние приложения во время тестирования. Если отклик приложения задерживается (например, из-за длительной загрузки веб-страницы), то результаты тестирования будут неверными;
- Воспроизведение быстрых и сложных последовательностей занимает больше времени, чем их запись. Поэтому такой метод не всегда подходит для тестирования динамических игр, где важно быстрое реагирование.
Тестирование с помощью Robotium
Robotium не входит в состав Android SDK, эта программа распространяется с открытым исходным кодом. Сценарии Robotium определяют действия на уровне пользовательского интерфейса приложений, а не на уровне устройства ввода. Например, в сценарии требуется коснуться кнопки «ОК». В этом случае скрипт monkeyrunner будет построен следующим образом: «имитировать касание экрана в точке с координатами (x0, y0)». Скрипт Robotium будет построен иначе: «нажать кнопку с текстом «ОК».
Описание действий на уровне интерфейса позволяет сделать тестовый скрипт независимым от расположения и размеров элементов интерфейса, разрешения и ориентации экрана. Кроме того, в Robotium можно проверять реакцию приложения на действия. Например, предположим, что после нажатия кнопки «ОК» должен появиться список с элементом «Элемент 1». В Robotium можно проверять имена элементов списков. Проверка состояния приложения после каждого шага позволяет с легкостью находить шаг, на котором произошла ошибка.
Недостатки:
- Для каждого приложения требуется разрабатывать тестовый сценарий на языке Java*. Для этого требуется время и навыки программирования;
- При смене интерфейса приложения потребуется переделать последовательность событий;
- Создавать сценарии Robotium сложнее, чем записывать события с помощью getevent / sendevent;
В целом, Robotium позволяет создавать тестовые сценарии высшего качества с разумными затратами.
Сравнение методов тестирования мобильных приложений
Метод тестирования | Преимущества | Недостатки |
Monkey — поток случайных действий пользователей | Затраты на обслуживание отсутствуют.
Независимость от устройства. Нагрузочное тестирование может выявлять сложные и малозаметные ошибки. |
Качество тестирования может различаться для разных приложений.
Сложно воспроизводить последовательность действий, вызвавших ошибку, в отчетах об ошибках. Monkey не проверяет состояние приложения во время тестирования. |
MonkeyRunner — скрипт для управления устройством | Гибкость | Сложность написания сценариев, даже для простых приложений. |
Getevent/sendevent — запись и воспроизведение действий пользователя | Для записи последовательности событий не требуются навыки программирования. | Записанная последовательность действий подойдет только для одного устройства при фиксированной ориентации экрана.
При смене интерфейса приложения необходимо переделывать последовательность событий. Этот метод не проверяет состояние приложения во время тестирования. |
Robotium — API тестовых скриптов для проверки состояния | Действия описываются на уровне пользовательского интерфейса приложения.
Скрипт может не зависеть от разрешения и ориентации экрана. Скрипт может проверять состояние приложения после действий. |
Сложность написания сценариев на языке Java.
При изменении интерфейса приложения необходимо переделывать скрипт. |
Автоматическое тестирование не заменяет другие типы тестирования. Продуманный процесс тестирования, сочетающий различные методы, в том числе и автоматическое тестирование, является важнейшей частью процесса разработки высококачественных приложений.
Ручное тестирование Android приложений
Рассмотрим ручное функциональное тестирование. Тестировщик устанавливает на устройство приложение, вдумчиво проверяет всю функциональность, затем возвращает устройство в первоначальное состояние. И так для каждого приложения и каждого устройства. Очевидный недостаток такого способа – большие затраты времени для регулярного тестирования.
Тестирование мобильных приложений существенно отличается от тестирования приложений, предназначенных для использования на персональных компьютерах. Приведем ряд основных моментов, которые нужно протестировать:
- Установка и запуск приложения, выход из приложения, повторный вход, удаление приложения с мобильного устройства;
- Мультитач и размер экрана. Корректность удаления 2-х элементов или просмотр двух элементов, нажатием на них одновременно. Проверка многократного быстрого нажатия на кнопку – часто при этом может случиться падение приложения. В приложении должны отсутствовать пустые экраны, чтобы пользователь не оказался в ситуации, в которой не очевидно, что делать. Также все элементы должны быть такого размера, чтобы пользователь мог однозначно нажать на них.
- Стабильность. Работа приложения при множестве запущенных приложений и долгое время, а также в случае недостатка места для установки или работы приложения. Поведение приложения при отсутствии в некоторых устройствах поддерживаемых приложением функций.
- Адаптация приложения к портретной и альбомной ориентациям устройства.
- Стресс. Реакция приложения на внешние прерывания:
- входящие и исходящие SMS, MMS, звонки, оповещения других приложений;
- переход устройства в режим ожидания;
- выключение устройства, разрядка устройства;
- зарядка устройства;
- отключение интернета;
- переход в другое приложение.
- Интернационализация. Проверка корректности работы приложения на разных языках (если данное приложение мультиязычное).
- Обратная связь с пользователем. Наличие информативных сообщений при попытке выполнить какое-либо действие (например, при удалении важной информации), а также присутствие визуальной индикации хода выполнения функций. У всех нажимаемых элементов должно быть «нажатое состояние» (отклик на действие), благодаря этому пользователь всегда будет видеть, действительно ли произошло нажатие.
- Обновление. Корректность обновления приложения до новой версии.
- Орфографические ошибки.
Как показывает практика тестирования мобильных приложений, наиболее корректной работы приложения можно добиться при ручном тестировании на реальных мобильных устройствах.
Особенности альфа/бета тестирования в консоли разработчика Google Play
В консоли разработчика Google Play можно выбирать группы пользователей для альфа- и бета-тестирования различных версий приложения, после чего поэтапно внедрять обновления.
Что нужно знать перед началом тестирования
В аккаунте разработчика доступны инструменты для альфа- и бета-тестирования различных версий вашего приложения. Тестирование приложения возможно без публикации рабочей версии APK-файла. Обратите внимание на следующую информацию:
- Присоединиться к группе тестировщиков может только пользователь с аккаунтом Google (@gmail.com) или Google Apps;
- При тестировании опубликованного ранее приложения обновление его альфа- и бета-версии получат только тестировщики. И только они смогут найти и скачать приложение, которое вы публикуете и проверяете впервые;
- Если вы впервые публикуете файл APK альфа- или бета-версии, ссылка станет доступна пользователям в течение нескольких часов. Примерно такое же время требуется, чтобы тестировщики смогли увидеть изменения, внесенные вами в уже опубликованную версию;
- Любые изменения на странице Цены и распространение (в том числе значения платное или бесплатное) применяются ко всем версиям приложения, включая тестовые, рабочие и будущие.
Мы рекомендуем начать с маленькой группы альфа-тестировщиков, а затем перейти к бета-тестированию с участием большего количества пользователей. Файлы дополнений можно тестировать с помощью альфа-канала распространения в консоли разработчика. Для тестирования нельзя использовать черновики, то есть файл APK должен быть опубликован как альфа-, бета- или рабочая версия. Файлы дополнений нельзя добавлять для первого загруженного файла APK нового приложения.
Компания GETBUG помогаеn обеспечить корректную и стабильную работу мобильного приложения на целевых устройствах, сделать его удобным для пользователя и оптимизировать производительность как самого мобильного приложения, так и мобильного решения в целом.