40

Я искал для тестовых структур для автоматизации Android UI, и я наткнулся на UI Automator и Espresso и это часть меня путаются -Android Тестирование: UIAutomator против Эспрессо

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

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

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

ответ

9

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

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

+1

Я, возможно, потребуется интеграция с системой для приложения испытуемый, но сочетание 'UIAutomator' и возможно' Espresso'? – Shikhar

+1

Да, оба могут быть использованы –

1

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

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

Внизу this documentation's page вы можете найти введение, а также примеры для обоих этих стилей тестирования.

+0

Минимальная поддержка уровня API не является проблемой, но является ли безопасным предположение, что в случае 'Espresso' исходный код тестируемого приложения должен быть изменен? – Shikhar

33

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

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

+1

Минимальная поддержка уровня API не является проблемой, но при условии, что я не требую никакой интеграции системы во время тестирования, не могут ли быть реализованы одни и те же функции с использованием самой UIAutomator? – Shikhar

+2

Нет. Если вы не тестируете систему/кросс-приложение, я бы лично пошел за эспрессо. например был выпущен только эспрессо-web 2.2, который позволяет тестировать веб-просмотры, которые не поддерживаются UI Automator. Кажется, что эспрессо получает больше внимания. См. Https://code.google.com/p/android-test-kit/wiki/ReleaseNotes –

25

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

Espresso 2.1 Cheat Sheet

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

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

+0

+1 Заметим, что вы можете использовать оба варианта. Даже если вы не используете как UIAutomator, так и Espresso в том же тестовом случае, вы можете использовать их как в отдельных тестовых примерах в одном и том же пакете. –

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

1

Чтобы получить быстрый понятие, как обе вещи работают, давайте приведем пример. Давайте попробуем найти и нажмите кнопку с названием «Start» на леденец, используя UIAutomator и Espresso:

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

TL: DR;

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

0

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

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

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

Смежные вопросы