Подтвердить что ты не робот

Тестирование на Android: UIAutomator против Espresso

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

  • Оба поддерживаются Google
  • Оба используются для тестирования функционального интерфейса.
  • Оба являются Android только фреймворками

Итак, мои вопросы/сомнения здесь -

  • В чем основное отличие между UI Automator и Espresso?
  • Будет ли изменен исходный код для интеграции любой из этих фреймворков?
  • Предоставляет ли одна структура преимущество перед другим? Если да, то какая структура наиболее подходит для автоматизации пользовательского интерфейса Android-приложения?
4b9b3361

Ответ 1

UIAutomator - мощный и имеет хорошую внешнюю системную интеграцию ОС, например. может включать и выключать WiFi и получать доступ к другим настройкам во время теста, но не имеет обратной совместимости, поскольку для этого требуется Jelly Bean или выше. Но также не хватает подробного доступа к виду, поэтому можно сказать, что это может быть более чистый тест с черным ящиком. Если у Espresso есть доступ к внутренним представлениям (см. Ниже). Это рекомендуется на developer.android.com для "Тестирование пользовательского интерфейса для нескольких приложений"

Espresso - немного более легкий вес по сравнению с ui automator и поддерживает 2,2 Froyo, и у него также есть свободный api с мощным hamcrest (https://github.com/hamcrest), делая код более читабельным и расширяемым (он новее, чем Ui automator). Он не имеет доступа к испытаниям системной интеграции, но имеет доступ к внутренним представлениям, например. может протестировать веб-просмотр (полезно для тестирования гибридного приложения или тяжелого тестирования веб-просмотра). Чуть более серое окно по сравнению с UI Automator. Это рекомендуется на developer.android.com для "Тестирования пользовательского интерфейса для одного приложения". Начиная с Android Studio 2.2 теперь предлагается тестовая запись пользовательского интерфейса (например, UIAutomator).

Ответ 2

Собственно, вам не нужно выбирать. UIAutomator и Espresso используют один и тот же инструментарий, поэтому вы можете использовать команды обоих из них в одном тесте. У эспрессо есть множество совпадений, утверждений и действий в пользовательском интерфейсе, который у автомата нет:

Espresso 2.1 Cheat Sheet

Espresso работает в отдельном потоке, и он действительно быстрый по сравнению с другими тестовыми платформами.

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

Ответ 3

Если вы тестируете только одно приложение, то Espresso.

Если вы тестируете несколько приложений или их интеграцию с другими приложениями или системами, то UiAutomator.

Ответ 4

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

http://qathread.blogspot.com/2015/05/espresso-uiautomator-perfect-tandem.html

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

Потратьте время на

  • проверьте примеры использования этих фреймворков Google.

https://github.com/googlesamples/android-testing/tree/master/ui

  • прочитайте документацию по этим фреймворкам:

http://developer.android.com/training/testing/ui-testing/espresso-testing.html

http://developer.android.com/training/testing/ui-testing/uiautomator-testing.html

Ответ 5

При использовании UIAutomator вы должны использовать API 18+, в то время как с Espresso вы можете пойти как API 8.

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

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

Ответ 6

Чтобы получить представление о том, как обе вещи работают, давайте пример. Попробуйте найти и нажать кнопку с названием "Пуск" на Lollipop, используя UIAutomator и Espresso:

  • UIAutomator: Вам нужно искать прописные слова "СТАРТ", потому что кнопки Lollipop отображаются в верхнем регистре. device.findObject(new UiSelector().text("START")).click();
  • Espresso: вы просто используете R.string.start и не должны заботиться о том, как строка фактически отображается платформой. Вам не важно, имеет ли вид textAllCaps=true или он является многоточием. onView(withText(R.string.start)).perform(click());

TL: DR;

UIAutomator ищет представления в стиле нижнего уровня, чем Espresso, - через механизм Instrumentation и обход дерева AccessibilityNodeInfo иерархии представлений. Espresso в свою очередь, как правило, обходит иерархию представлений.

Ответ 7

Ключевым преимуществом использования Espresso является то, что он обеспечивает автоматическую синхронизацию тестовых действий с пользовательским интерфейсом приложения, которое вы тестируете. Espresso обнаруживает, что основной поток не работает, поэтому он может запускать ваши тестовые команды в соответствующее время, повышая надежность ваших тестов. Эта возможность также избавляет вас от необходимости добавлять временные временные решения, такие как Thread.sleep() в тестовом коде.

Основа тестирования Espresso - это API-интерфейс, основанный на инструментах, и работает с тестовым бегуном AndroidJUnitRunner.

Источник: https://developer.android.com/training/testing/ui-testing/espresso-testing.html