2013-11-18 2 views
103

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

В чем основные отличия между этими двумя? Существуют ли функции, которые существуют в одном, но не в другом?

+16

Я честно ненавижу, когда люди с нисходящей нитью не комментируют. Я был бы признателен, если бы человек, который задумывался, написал некоторые комментарии, как в том, почему он/она делает это – Androidme

+7

Я думаю, что этот вопрос очень полезен. Многие разработчики просят об этом сами. Каковы различия? Я думаю, проблема в том, как вы просите. Вы должны спросить его более подробно, а не просто спросить, что использовать. – tasomaniac

+7

Это точный вопрос, на который я хотел ответить. Спасибо за сообщение –

ответ

168

Полное раскрытие информации: Я являюсь одним из авторов Espresso.

Оба Espresso и Robotium являются инструментальными системами, то есть используют Android Instrumentation для проверки и взаимодействия с действиями, находящимися под контролем.

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

Основные достижения в Espresso над Robotium:

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

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

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

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

+0

Привет! Благодарим вас за ответ. Предоставляет ли Espresso возможность протестировать несколько приложений в одном тестовом случае? Я должен проверить свое приложение, которое вызывает активность из другого приложения (другое приложение, которое использует один и тот же sharedUserId), а затем извлекает результат. Я не могу сделать это с Robotium, но, может быть, с эспрессо? :-) –

+1

Нет - вы не можете взаимодействовать с пользовательским интерфейсом вне вашего процесса с помощью Espresso. Это ограничение рамок инструментария. – ValeraZakharov

+1

@ Валера Захаров :: Hii ... !! Как вы сказали, эспрессо позаботится о синхронизации потоков пользовательских интерфейсов и не будет необходимости спать. Но в моем случае я написал несколько тестовых таблиц, и все тестовые окна работают на моей локальной машине (с одним сном на TestSuite в начале). Но почти 99% тест-систем становятся неудачными, когда я запускаю локальные/серверные jenkins. Я отключил все анимации в эмуляторе jenkins. Большую часть времени я получаю AppNotIdleException. Im неспособный понять основную причину. Не могли бы вы помочь мне. –

7

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

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

+0

Перспектива поможет мне создать синоним этого тега ..;) – Snicolas

+2

Ссылка выше изменена, это новая: https://google.github.io/android-testing-support-library/docs/espresso/ index.html –