Тестирование на Android: UIAutomator против Espresso
Я искал тестовые рамки для автоматизации пользовательского интерфейса Android, и я наткнулся на UI Automator
и Espresso
, и это та часть, о которой я запутался -
- Оба поддерживаются Google
- Оба используются для тестирования функционального интерфейса.
- Оба являются
Android
только фреймворками
Итак, мои вопросы/сомнения здесь -
- В чем основное отличие между
UI Automator
и Espresso
?
- Будет ли изменен исходный код для интеграции любой из этих фреймворков?
- Предоставляет ли одна структура преимущество перед другим? Если да, то какая структура наиболее подходит для автоматизации пользовательского интерфейса Android-приложения?
Ответы
Ответ 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