Автоматизация тестирования приложений Android: плюсы и минусы популярных инструментов

Для автоматизации тестирования мобильных приложений Android существует множество фреймворков со своими особенностями. Тестировщик IT Test Андрей Кирепко рассказывает о преимуществах и недостатках систем Appium, UI Automator, Espresso и Kaspresso. А также советует ресурсы для освоения этих фреймворков.

Автоматизация тестирования приложений Android: плюсы и минусы популярных инструментов

Для чего нужна автоматизация тестирования приложений Android, и чем мобильные автотесты отличаются от веба

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

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

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

  • прерывания;

  • дефрагментация по экранам и ОС;

  • взаимодействия с сетями;

  • вертикальная и горизонтальная ориентация;

  • разные темы;

  • разные локализации.

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

Appium

Это фреймворк с открытым исходным кодом для тестирования пользовательского интерфейса. Appium работает с языками: Java, Objective-C, JavaScript с node.js, PHP, Ruby, Python, C#.

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

<p><i>Интерфейс Appium</i></p>

Интерфейс Appium

Плюсы и минусы Appium

Кроссплатформенность

Appium — это бесплатный кроссплатформенный инструмент с открытым исходным кодом, который помогает автоматизировать приложения как для Android, так и для iOS. Appium придерживается того же подхода, что и Selenium WebDriver, то есть для тестирования приложения у вас должен быть отдельный код, который через driver мог бы запускать автотесты как на Android, так и iOS.

Однако кроссплатформенность может быть и минусом. Appium — жертва своей универсальности, iOS и Android пишут разные разработчики, и автотестер часто не может найти похожие локаторы или приходится иначе взаимодействовать с платформой из-за особенностей самой ОС.

Гибкость

В Appium можно выбрать ОС версию, тип девайса — реальный или эмулятор — таймаут ожидания ответа от Appium-сервера, а также язык, ориентацию и указать экран приложения, с которого стартует тест. Кроме того, Appium может делать скриншоты и скринкасты при нужной настройке.

Популярность

В 90 % случаев разбор проблемы, возникшей при запуске автотестов и связанной с Appium-сервером, можно найти в интернете. Большинство облачных стеков устройств работает с Appium. Кроме этого, разработчики фреймворка стараются поддерживать актуальную версию инструмента и фиксить баги.

Отсутствие стабильности

Это, на мой взгляд, мега-минус Appium из-за того, что он взаимодействует через AccessibilityService (при использовании UI Automator), и к тому же является сложной структурой.

Низкая скорость

Как и в Selenium, автотесты и взаимодействие с Appium проходят медленно. При запуске локальных автотестов время останавливается: можно ощутить, как движется Земля и как медленно течет электричество по проводам вашего офиса.

<p><i>Вид фреймворка Appium «под капотом»</i></p>

Вид фреймворка Appium «под капотом»

В целом, Appium — мощный и интересный инструмент. Однако проблемы вызывает работа во внешней среде, так как где-то нужно писать код, на что уходит много времени.

Вот ресурсы для освоения Appium:

UI Automator

UI Automator разработан корпорацией Google и поставляется вместе с Android SDK. UI Automator позволяет писать тесты по методу «черного ящика». В целом, алгоритмы написания автотестов здесь несколько похожи с Appium, потому что Appium работает с приложением через UI Automator.

Я изучал UI Automator, потому что мне было интересно попробовать взаимодействие с телефоном (эмулятором) в среде разработки.

<i>Интерфейс UI Automator</i>
Интерфейс UI Automator

Плюсы и минусы UI Automator

Взаимодействие с эмулятором

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

Хранение кода

Код может лежать в самом проекте и его можно использовать в Android Studio.

Поддержка

Если что-то непонятно, можно связаться с разработчиками, они смогут поддержать ваш код, потому что, в основном, тесты тут пишутся на Java и Kotlin.

Низкая скорость и нестабильность

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

Громоздкий код

Да, можно спрятать все в Page классах, но там будет обращение к селектору в формате getDevice().wait(Until.findObject(By.res("com.example.project:id/login")), TIMEOUT).text = "login":

  • возьми устройство;

  • найди объект, отвечающий этому селектору, а именно с ID login;

  • ищи не дольше timeout;

  • установи значение поля text у этого объекта равное login.

Нужны знания Java/Kotlin

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

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

Espresso

Этот инструмент также создан Google, но работает по методу «белого ящика». Соответственно, для понимания работы Espresso нужно быть более подкованным в Kotlin. Espresso — практически стандарт автоматизации на Android, поэтому невозможно обойти его стороной.

Плюсы и минусы Espresso

Скорость

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

Стабильность

Простая структура дает более стабильные автотесты. При этом за счет разных раннеров можно указать FLAC.

Работа в «белом ящике»

Большая часть кейсов на Android устройствах покрывается методом «черного ящика». Но автотесты «белого ящика» еще больше увеличивают покрытие.

Для работы с устройством потребуется UI Automator

Как я говорил ранее, для работы с устройством потребуется помощь UI Automator.

Сложное API

Тест на мой взгляд компактнее, чем на UI Automator, но все равно выглядят немного странно, например: onView(withId(R.id.button)).perform(click()).

Espresso — классный инструмент, а в связке с UI Automator особенно хорош. При помощи этого гибкого фреймворка можно закрыть потребности в автотестах. Вот ресурсы для освоения Espresso:

Kaspresso

Это платформа для тестирования пользовательского интерфейса Android, основанная на Espresso и UI Automator. Я изучал Kaspresso, так как нашел достаточно интересным туториал от авторов этой платформы, кроме того код написанный на Kaspresso выглядит понятно и аккуратно.

Плюсы и минусы Kaspresso

Легкий вход

Несмотря на то что автотесты здесь пишутся на Kotlin, на первых порах, на мой взгляд, происходит это достаточно понятно.

Скорость

Кейсы проходят быстрее, особенно, сравнивая UI Automator и Kaspresso, в котором написали свой dsl.

Поиск решения проблемы на русском языке

Да, большая часть материалов по Kaspresso доступна на русском языке.

Невысокая популярность

При сложностях в написании автотестов, на других платформах будет легче найти готовое решение. Главный материал для изучения Kaspresso — туториал разработчиков.

Я попробовал разные инструменты для автоматизации Android с их плюсами и минусами. Подводя итог, могу сказать, что принципы написания автотестов для мобилок и веба отличаются не очень сильно. Но для тестирования обособленных приложений, отличающихся от веб-версии, я бы выбрал Kaspresso — на мой взгляд, он оптимальнее и быстрее других. Кроме того, знания Kotlin помогут тестировщику написать больше кейсов, понимая структуру проекта. Но если вы работаете с сильно интегрированными друг в друга веб-приложениями или гибридом, лучше всего для подобных проектов подходит Appium.

Больше экспертных материалов читайте в Telegram-канале IT Test.

99
Начать дискуссию