Skip to content

Espresso как основа

Kaspresso основан на фреймворке Espresso от Google (если вы не знакомы с Espresso, подробности можно найти в официальной документации). Espresso позволяет вам работать с элементами вашего приложения нативно и методом белого ящика (тестирование белого ящика). Найти нужный элемент на экране можно с помощью matcher-ов, а затем выполнить с ними различные действия или проверки.

Использование только фреймворка Espresso недостаточно

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

Что мы хотим:

  1. Хорошая читабельность. У Espresso с этим проблема из-за огромной иерархии matcher-ов. Когда у нас много matcher-ов, код становится трудно читаемым. Плохая читаемость означает сложность в дальнейшей поддержке теста.
  2. Высокая стабильность. Espresso плохо работает с интерфейсами, элементы которых отображаются асинхронно. Можно настроить Idling, но это все равно не решит всех проблем.
  3. Логирование. После прохождения теста с Espresso у вас нет пошаговой последовательности выполненных действий.
  4. Скриншоты. Мы также хотим иметь несколько скриншотов в отчетах о прохождении теста.
  5. Работа с ОС Android. В некоторых случаях нам нужно взаимодействовать с устройством, системными окнами и ОС Android. В этом случае функционала Espresso будет недостаточно. Вам понадобится UiAutomator.
  6. Архитектура кода. Мы хотим иметь чистую архитектуру не только в основном коде, но и в наших тестах, возможность повторного использования кода, перемещение некоторых блоков в абстракции. Иметь единый стиль кода для всех разработчиков.

Как Kaspresso решает все эти проблемы?

Читаемость

Kaspresso основан на Kakao - Android фреймворке для автотестов пользовательского интерфейса. Он основан на Espresso. Kakao предоставляет простой Kotlin DSL. Это делает тесты более читабельными. Вам больше не нужно использовать длинные конструкции с matcher-ами для поиска элементов на экране для взаимодействия из теста. Результат вызова метода Espresso onView() кэшируется. Затем вы можете обратиться к необходимому элементу как к свойству по ссылке. Kakao также предоставляет реализацию паттерна Page object с объектом Screen. Вы можете описать все элементы интерфейса, с которыми будет взаимодействовать ваш тест, в одном месте (в одном объекте Screen).

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

Kaspresso обернул некоторые вызовы Espresso в более стабильную реализацию. Например, метод flakySafely().

Логирование

Kaspresso обернул некоторые вызовы Espresso не только для большей стабильности. Мы также внедрили перехватчик, который печатает больше отладочных сообщений в логи.

Работа с ОС Android

Мы создали интерфейс Device как фасад для всех интерфейсов, с которыми можно работать. UiAutomator может помочь вам только в некоторых случаях, но чаще вам нужна возможность выполнять различные команды (adb, shell). Например, с помощью команды adb emu вы можете эмулировать различные действия или события. Тесты Espresso запускаются непосредственно на устройстве Android, поэтому нам нужен какой-то внешний сервер для отправки команд. В Kaspresso вы можете использовать AdbServer.

Архитектура кода

Используя описанную выше реализацию паттерна Page object, вы можете сделать свой код в тестовых файлах более читабельным, удобным для дальнейшей поддержки, повторно используемым и понятным. Kaspresso также предоставляет различные методы и абстракции для улучшения архитектуры (такие как step, Scenario, тестовые разделы и многое другое).