Google Espresso или Robotium [закрыто]

116

Мне нужно использовать инструмент автоматического тестирования пользовательского интерфейса, и я не понимаю, использовать ли Robotium и Google Espresso.

Каковы основные различия между ними? Есть ли функции, которые существуют в одном, но нет в другом?

Androidme
источник
20
Я искренне ненавижу, когда люди голосуют против, не оставляя комментариев. Я был бы признателен, если бы человек, голосующий против, напишет несколько комментариев о том, почему он / она это делает
Androidme
9
Думаю, вопрос очень полезный. Об этом спрашивают многие разработчики. Какие отличия? Я думаю, проблема в том, как вы спрашиваете. Вы должны спросить об этом более подробно, а не просто спрашивать, что использовать.
tasomaniac 04
8
Это точный вопрос, на который я хотел ответить. Спасибо за публикацию
Ричард Фанг
8
Мне не нравится, что это не по теме, согласно StackOverflow. Я знаю, что если бы нам пришлось сравнивать каждую отдельную библиотеку и инструмент, можно было бы получить множество ответов, основанных на мнениях, но такой вопрос, который спрашивает о различиях между двумя ресурсами, очень полезен.
Дэвид Аргайл Такер

Ответы:

176

Полное раскрытие: я один из авторов Espresso.

И Espresso, и Robotium - это инструментальные фреймворки, то есть они используют Android Instrumentation для проверки и взаимодействия с тестируемыми Activity .

В Google мы начали с использования Robotium, потому что он был удобнее стандартного инструментария (снимаем шляпу перед разработчиками Robotium за то, что это так). Однако это не удовлетворило нашу потребность в среде, которая облегчила бы написание надежных тестов для разработчиков.

Основные преимущества Espresso по сравнению с Robotium:

  1. Синхронизация. По умолчанию логика инструментального тестирования выполняется в другом (инструментальном) потоке, нежели операции пользовательского интерфейса (обрабатываются в потоке пользовательского интерфейса). Без синхронизации тестовых операций с обновлениями пользовательского интерфейса тесты будут подвержены нестабильности, т.е. будут случайным образом завершаться ошибкой из-за проблем со временем. Большинство авторов тестов игнорируют этот факт, некоторые добавляют механизмы ожидания / повтора и еще меньше реализуют более сложный код безопасности потоков. Ни один из них не идеален. Espresso заботится о безопасности потоков, бесшовно синхронизируя тестовые действия и утверждения с пользовательским интерфейсом тестируемого приложения. Robotium пытается решить эту проблему с помощью механизмов сна / повторных попыток, которые не только ненадежны, но и заставляют тесты работать медленнее, чем необходимо.

  2. API. Espresso имеет небольшой, четко определенный и предсказуемый API, который открыт для настройки. Вы сообщаете фреймворку, как найти элемент пользовательского интерфейса, используя стандартные средства сопоставления hamcrest, а затем инструктируете его либо выполнить действие, либо проверить утверждение на целевом элементе. Вы можете сравнить это с API Robotium, где автор теста должен выбирать из более чем 30 методов щелчка. Кроме того, Robotium предоставляет опасные методы, такие как getCurrentActivity (что в любом случае означает текущий?) И getView, которые позволяют вам работать с объектами вне основного потока (см. Пункт выше).

  3. Четкая информация об отказе. Espresso стремится предоставить обширную отладочную информацию в случае сбоя. Кроме того, вы можете настроить способ обработки сбоев в Espresso с помощью собственного обработчика сбоев. Я давно не пробовал, но предыдущие версии Robotium страдали от непоследовательной обработки сбоев (например, метод clickOnView проглатывал SecurityExceptions).

В отличие от предыдущего ответа, Espresso поддерживается во всех версиях API со значительным количеством пользователей (см. Http://developer.android.com/about/dashboards/index.html ). Он работает с некоторыми из старых версий, но их тестирование было бы пустой тратой ресурсов. Кстати о тестировании ... Espresso проверяется при каждом изменении с помощью комплексного набора тестов (с охватом более 95%), а также большинства приложений для Android, разработанных Google.

ValeraZakharov
источник
Здравствуй ! Спасибо за ответ. Предлагает ли Espresso возможность протестировать несколько приложений в одном тестовом примере? Мне нужно протестировать свое приложение, которое вызывает действие из другого приложения (мое другое приложение с тем же sharedUserId), а затем получает результат. Я не могу этого сделать с Robotium, но, может быть, с Espresso? :-)
nbe_42
1
Нет - вы не можете взаимодействовать с пользовательским интерфейсом вне вашего процесса с Espresso. Это ограничение инструментария.
Валера Захаров
1
@ValeraZakharov :: Привет ... !! Как вы сказали, эспрессо позаботится о синхронизации потоков пользовательского интерфейса, и вам не нужно переводить спящий режим. Но в моем случае я написал несколько тестов, и все тесты работают на моем локальном компьютере (с одним спящим режимом на TestSuite в качестве начала). Но почти 99% тестов терпят неудачу, когда я запускаю с локальным / серверным jenkins. Я отключил все анимации в эмуляторе jenkins. В большинстве случаев я получаю исключение AppNotIdleException. Я не могу понять основную причину. Не могли бы вы мне помочь?
Нареш Гунда,
@Radu Сделали это. Ваш комментарий недействителен и без надлежащего объяснения кажется безрассудной попыткой привлечь внимание.
Ракиб
9

Espresso намного быстрее, чем Robotium, но работает только с некоторыми версиями SDK.

Так что, если вам нужен тест, который работает на всех устройствах, выберите Roboitum. Если нет, попробуйте эспрессо и не забывайте, что вы еще некоторое время будете бета-тестером.

Snicolas
источник
Голосование помогло бы мне создать синоним для этого тега ..;)
Snicolas 03
2
Ссылка выше изменена, это новая: google.github.io/android-testing-support-library/docs/espresso/…
Evin1_