Тестирование – важный момент перед выпуском в свет той или иной утилиты. Если же мы говорим о тестировании мобильных платформ (Android, iOS), то оно имеет свою специфику.

Огромную роль здесь играет так называемая автоматизация. В статье пойдет речь о том, что собой представляют автотесты, каким образом они запускаются, чем помогают программерам и разработчикам. Информация будет полезна как начинающим, так и тем, кто уже знаком с основами создания софта на Андроиде.

Определение

Тестирование автоматического характера на Android называется автоматизацией тестов. Это – метод проверки ПО, выполняемый через специальные программные средства. Они необходимы для обработки и проверки набора тестовых примеров. Каждый шаг проделывается без «рук» юзера.

ПО автоматизационного характера способно:

  • самостоятельно проходить каждый этап приложения;
  • вводить тестовые данные в используемую среду;
  • проводить сравнение ожиданий от теста и фактически полученные данные;
  • формировать отчеты.

Соответствующие тесты приложений обычно требуют немало финансов и задействованных иных ресурсов. Некоторые крупные организации проводят «проверки» многократно. Для реализации поставленной задачи задействуют спецконтент. Он без посторонней помощи справляется с упомянутыми целями. За счет автоматизации удается уменьшить количество тестов, необходимых для ручного запуска.

Классификация

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

Существуют самые разные инструменты для реализации поставленной задачи. Классическое разделение тестов проводится по степени их модульности. Различают три категории:

  1. Модульное. Предусматривает testing конкретных модулей системы в независимом пространстве. Самый распространенный и известный вариант. Позволяет проводить тесты приложений более детально, а также при необходимости быстро исправлять ошибки и вносить коррективы в конкретные «блоки» системы.
  2. Интеграционное. Тесты, относящиеся к взаимодействию модулей между собой. Бывает, что конкретный блок хорошо работает обособлено, но в сочетании с остальными компонентами выдает ошибки. Это – более высокий уровень теста.
  3. Системное. Проводится проверка всей системы приложения. На данном этапе проверяют, насколько получаемые результаты соответствуют первоначальным критериям. Это – глобальный тестинг, нюансы каждого «блока» софта не столь важны. Осуществляется операция по принципам «черного ящика».

В случае с Android можно реализовать все перечисленные методы в автоматическом режиме. Главное подобрать хорошее программное обеспечение для этого.

Преимущества

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

Автоматизация предусматривает огромное множество преимуществ. Среди них выделяют:

  • практически моментальное получение результатов;
  • исключение из процесса тестинга человеческих факторов;
  • разбор утилит сразу на нескольких платформах;
  • наличие возможности покрытия множества локалей.

Это – отличный выход из ситуации, когда нет достаточного количества времени и иных ресурсов на «ручную» проверку. Современный подход к решению поставленной задачи.

Недостатки

Но и минусы при работе с автоматизированными системами для Android/iOS testing тоже встречаются. Некоторые из них для пользователей и разработчиков становятся весьма значимыми.

К недостаткам автоматизации рассматриваемого процесса относят следующие моменты:

  • прекращение деятельности с обновлением операционной системы – каждый раз настройку приходится осуществлять «с нуля»;
  • сложности при создании тестов для приложений;
  • отсутствие стабильной работы для некоторых инструментов;
  • разнообразие UI-компонентов, что приводит к трудоемкости и иногда экономической невыгодности проведения операции;
  • определенные требования для iOS – IPA-документация должна быть подписана разработчиками.

Автоматизация проверки приложений Андроида и iOS – это весьма распространенный вариант развития событий. Главное определиться с инструментарием, который поможет разрешить возникающие проблемы, а также придерживаться определенного алгоритма действий.

Подходы

В случае с приложениями для автоматизации тестинга найти «что-то свое» не так уж трудно. Позже в статье будут приведены примеры софта, который поможет довольно быстро избавиться от «ручной проверки» утилит. Намного труднее определиться с подходом для реализации поставленной задачи.

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

Record and Play

Это – запись всех действий, которые проделываются в приложении. Далее специальный инструмент проводит генерацию понятного задействованной утилитой кода. Следующий этап – это уже автотестинг.

Преимущества:

  • скорость реализации;
  • отсутствие навыков программирования;
  • универсальность.

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

Screen Object

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

При подобном подходе происходит моделирование экранов или страниц для задействованного приложения. Они «генерируются» как объекты кода. В результате выводится набор классов. Каждый будет отвечать за работу с конкретным дисплеем софта.

Сильные стороны:

  • возможность переиспользования кода пока это требуется;
  • низкая чувствительность к изменению параметров системы;
  • надежность кодификаций;
  • понятность структуры.

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

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

Выбор инструментария

Как только подходы реализации поставленной задачи выбраны, пользователям предстоит определиться со «средой». Утилитой, которая будет осуществлять тестинг приложения в том или ином случае.

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

  • Espresso;
  • UI Automator;
  • XCUITest;
  • EarlGrey;
  • Detox;
  • Appium;
  • Ranorex;
  • TestComplete Mobile.

Последние четыре платформы являются универсальными, первые две – для Андроида, вторая пара сверху – для iOS.

Espresso

Довольно простая среда, подходящая далеко не для всех целей. Его не стоит использовать при контактах с внешними утилитами. Предусматривает:

  • тестинг «белого ящика»;
  • доступ к исходным кодам приложений;
  • тестирование «серого ящика» с доступом к некоторым процессам и структуре.

Наделен софт отличным пользовательским интерфейсом. Имеет весьма мощный API.

UI Automator

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

Tests здесь осуществляются не только тестировщиками, но и обычными пользователями. Утилита имеет продвинутую внешнюю интеграцию. Соответственно, фреймворк позволит:

  • проводить тесты тех или иных утилит для мобильных устройств;
  • «общаться» с операционной системой;
  • контактировать с другими утилитами.

UI Automator используется для тестирования «черного ящика». Анализирование здесь проводится с точки внешнего пользователя. Так, словно у разработчика нет доступа к задействованным кодификациям.

Основные преимущества UI Automator:

  • наличие средств для отслеживания и анализа разнообразных отображаемых на экране компонентов и элементов в процессе реализации;
  • мощный API, позволяющих видеть данные о состоянии устройства и происходящих процессов;
  • APIs для кроссплатформенности.

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

Detox

Неплохой вариант для софта, который написан на React Native. Обычно составляются на JavaScript. Генерация приложений для различных мобильных платформ производится из одного и того же кода JS. Они будут максимально схожи между собой.

Основным преимуществом является тестирование по принципам «серого ящика». Фреймворк не будет иметь доступ ко внутренним компонентам. Поэтому останется соотносить внешнее поведение утилиты с тем, что происходит «внутри».

Среда Detox предусматривает возможность обращения к памяти, а также отслеживанию выполняемых процессов. Принципы «серого ящика» способствуют борьбе с неустойчивостью, которые возникают при сквозном тестировании:

  • тест способен вылетать самостоятельно без каких-либо кодовых корректировок;
  • результаты не детерминированы из-за разнообразия функциональности и процессов;
  • требуется осуществлять синхронизацию вручную.

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

Appium

Если пользователь сказал «Хочу провести универсальный тестинг мобильной утилиты», стоит присмотреться к Appium. Написание кодов для платформ возможно через единые API, без дополнительных преобразований.

К принципам работы утилиты относят следующие моменты:

  • не требуется перекомпиляция;
  • корректировки для автотестинга не обязательны;
  • нет необходимости в привязке к одному фреймворку или языку;
  • простая API автоматизация.

Данный вариант используется тогда, когда возникает необходимость проверки работы утилиты сразу на нескольких платформах. Отлично годится для тех, кто имел опыт работы с тестингом веб-приложений.

Ranorex

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

Ranorex позволяет:

  • создавать тесты;
  • проводить настройку тестинга;
  • управлять процессами посредством централизации.

Без проблем интегрируется с CI-средой. Предусматривает подгрузку из баз данных SQL, CSV и Excel. Тесты проводятся всеми существующими походами – «черным», «белым», «серым».

TestComplete

В числе самых востребованных утилит для unit test принято выделять TestComplete. Поддерживает не только мобильные платформы, но и десктопные/веб-софт. Ориентация – функциональное и юнит-тестирование.

Предусматривает:

  • регрессивный тест;
  • data-driven тестинг;
  • распределенное тестирование.

Имеет Recorder. Через соответствующие возможности можно посредством записи действий и настроек корректировать команды в редакторе. После предусматривается возможность запуска не только на заданном устройстве, но и посредством экспорта в сторонние приложения.

TestComplete умеет распознавать объекты и элементы для дальнейшего управления путем предложения спецкоманд. Они задействованы при взаимодействии пользователями. С легкостью поддерживает интеграцию с Git, Jira, Jenkins.

Unit-тестинг

Unit тест – это модульный вариант. Он предусматривает проверку приложений и утилит «по блокам». Позволяет добиваться максимальной эффективности при реализации поставленных задач.

Unit-тестирование на Андроиде разделяют на:

  1. Локальные. Используют исключительно JVM. Подходят для отслеживания бизнес-логики. Она осуществляет взаимодействие с операционными системами.
  2. Инструментальные. Позволяют посмотреть на логику, которая проводится через Android API. Осуществляется через физические устройства и эмуляторы. Отнимает подобный процесс больше времени, нежели локальные тесты.

Выбор зависит напрямую от конечной цели процесса. Но по возможности рекомендуется составлять локальные тесты. Они более универсальны и полезны.

Стоит дополнительно обратить внимание на организацию пакетов:

  • App/scr/main/java – исходный код;
  • App/scr/test/java – локальные тесты;
  • App/scr/androidTest/java – инструментальный тестинг.

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

Настройки

Если программер работает через Android Studio, он может не задумываться над созданием тех или иных пакетов. И предложенная ранее структура не потребуется. В противном случае предстоит запоминать и фиксировать огромное множество данных.

IDE конфигурирует Gradle-файл модуля APP:

Тестирование мобильного софта: все об автоматизации процесса

Процесс написания тестов можно упростить. Для реализации поставленной задачи программеры пользуются фреймворками. Пример – Mockito. Тут предусматриваются возможности имитирования и наблюдения объектов. Поддерживается подключение вспомогательных проверочных средств и утилит. Для его подключения предстоит указать зависимость testComplete ‘org.mockito:mockito-core:1.10.19’.

Локальный тестинг

Для того, чтобы разобраться в нужной мере в тестинге, стоит рассмотреть процесс на примере соответствия объектов. В приведенном примере их два. Используются числа:

Тестирование мобильного софта: все об автоматизации процесса

Чтобы провести тест, потребуется:

  1. Взять созданный класс.
  2. Разместить в пакете для локальных тестов задействованные методы.

Помечаются соответствующие элементы как «Test. Метод assertEquals() выдает ошибки AsserionError тогда, когда первый (ожидаемый) и второй (итог) не совпадают друг с другом.

Для запуска на класс требуется кликнуть правой кнопкой мыши и выбрать Run ‘ExampleUnitTest’. Получится соответствующий результат.

Тестирование мобильного софта: все об автоматизации процесса

Первый метод пройдет стадию выполнения, второй выдаст ошибку. Для настройки теста на ожидаемое исключение используется параметр expected:

Тестирование мобильного софта: все об автоматизации процесса

При подобных обстоятельствах тестинг пройдет успешно, так как исключение ожидаемо. Для длинных операций указывается дополнительное значение timeout. Прописывается в миллисекундах. Если метод не обработается за установленное время, тест потерпит провал:

Тестирование мобильного софта: все об автоматизации процесса

Есть механизм Matchers, который представляет логические операции совпадения:

Тестирование мобильного софта: все об автоматизации процесса

Тут:

  • is() – оператор «равно»;
  • is(not()) – «неравно»;
  • hasItem() – проверка на наличие составляющей в списке.

Также «Мокито» используется, чтобы создавать своеобразные «заглушки». Речь идет о mock-объектах. Это – сложные элементы, которые не требуют тестинга. Объявляются:

Тестирование мобильного софта: все об автоматизации процесса

Для использования аннотации @Mock класс заменяют аннотацией @RunWith или проводят в @Before-методе MockitoAnnotations.

Тестирование мобильного софта: все об автоматизации процесса

Как только появляется «замоканный» элемент, можно творить различные невообразимые вещи. Пример – переопределение названия приложения из строкового ресурса:

Тестирование мобильного софта: все об автоматизации процесса

Далее после вызова getString() осуществляется возврат Fake String. Это проводится даже тогда, когда он вызван неявным методом (за пределами тестинга):

Тестирование мобильного софта: все об автоматизации процесса

Теперь можно заменять все строчки на используемую:

Тестирование мобильного софта: все об автоматизации процесса

Можно исключить Exception и использовать when….thenThrow. Также есть метод verify. Он проваливает тест, если указанный метод ранее не вызывался:

Тестирование мобильного софта: все об автоматизации процесса

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

Полный потенциал открывается при spy-объектах. За ними можно следить как за фейковыми элементами:

Тестирование мобильного софта: все об автоматизации процесса

Но есть и другой вариант развития событий. А именно – «инструментальный» тестинг.

Instrumented-тесты

При реализации этой «версии» тестов для Android юзер получает доступ к настоящему контексту приложения. Дополнительно – ко всем возможностям и функционалу Android API. Предусматривает GodMode, который позволяет управлять жизненным циклом активности.

Чтобы распознавать тест в виде инструментального, размещается класс соответствующей аннотации:

Тестирование мобильного софта: все об автоматизации процесса

Далее проделывается следующее:

  • осуществляется пометка тестов;
  • проверяется пакет на соответствие приложению.
Тестирование мобильного софта: все об автоматизации процесса

Инструментарий позволяет прослушивать состояние активностей:

Тестирование мобильного софта: все об автоматизации процесса

А еще можно управлять их состоянием.

Тестирование мобильного софта: все об автоматизации процесса

Все это поможет проводить Unit-тестирование в том или ином случае. Если заранее подготовиться к процессу, можно довольно быстро воплотить задумку в жизнь. Главное не торопиться, выбрать методы и платформы, а затем действовать поэтапно.

Внимание: «ручную» проверку тоже рекомендуется осуществлять. И не только при мобильных приложениях, но и во всех других ситуациях. Пользователи иногда способны обнаружить то, что «машины» попросту пропустят. Лишь так удается добиться максимальной результативности.

Как стать тестировщиком

Каждый желающий может освоить рассмотренную сферу в информационных технологиях. Но для реализации поставленной задачи приходится изрядно постараться. Особенно это касается тех, кто долгое время не занимался программированием и разработкой.

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

Сделать это можно несколькими способами:

  1. Воспользоваться самообразованием. В Сети полно информации по реализации тестинга. И не только для мобильных платформ. Неплохой вариант, но лучше всего он дается не новичкам.
  2. Обучиться в ВУЗе. Лучше отдавать предпочтение «разработчикам». Особенно, специализирующихся на мобильных утилитах. В процессе ученики освоят все азы процесса, познакомятся с разнообразными способами воплощения задумки в жизнь. Результат – диплом установленной формы.
  3. Пройти спецкурсы. В Москве и других регионах России существуют различные образовательные центры. Они обучают очно, заочно и дистанционно. Предусматривают сегментированное наставничество в выбранном направлении. Обучение длится от нескольких месяцев до года. В конце выдается сертификат.

Последний вариант наиболее популярен на сегодняшний день. Он позволяет быстро научиться тем или иным IT-возможностям по строго намеченному пути.

Научиться автоматизации тестирования мобильных приложений людям, которые уже знают азы программирования, проще. Но и с «нуля» этот процесс вполне удается инициировать. Главное – изучать материалы и много практиковаться. В Сети есть и видеоуроки, и сопутствующая литература. Можно остановиться как на предложениях для новичков, так и для уже опытных программеров.

Внимание: немаловажны для процесса обучения такие черты, как усидчивость, целеустремленность и умение работать в команде.

P. S. Большой выбор курсов по тестированию есть и в Otus. Среди них широко представлено и направление автоматизации. Есть варианты как для продвинутых, так и для начинающих пользователей.

Тестирование мобильного софта: все об автоматизации процесса