Google Еспресо або Робоцій [закрито]


115

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

Які основні відмінності між ними? Чи є функції, які існують в одній, а не в іншій?


19
Я чесно ненавиджу, коли люди зволікають без коментарів. Я був би вдячний, якщо людина, яка нахиляється, напише якісь коментарі, тому що це робить вона
Androidme

8
Я думаю, що питання дуже корисне. Багато розробників запитують це у себе. Які відмінності? Я думаю, що проблема полягає в тому, як ви просите. Ви повинні запитати його більш детально, а не просто запитувати, яким користуватися.
Тасоман

8
Це саме те питання, на яке я хотів відповісти. Дякуємо за публікацію
Richard Fung

8
Мені не подобається той факт, що це поза темою відповідно до StackOverflow. Я знаю, що якби нам довелося порівнювати кожну бібліотеку та інструмент, можна було б отримати багато відповідей, що базуються на думках, але таке питання, яке вимагає відмінностей між двома ресурсами, дуже допомагає.
Девід Аргіле Такер

Відповіді:


175

Повне розкриття: Я один з авторів Еспресо.

І Espresso, і Robotium - це основи, що ґрунтуються на приладобудуванні, тобто вони використовують Android Instrumentation для перевірки та взаємодії з тестуваними заходами .

У Google ми почали користуватися Robotium, оскільки це було зручніше, ніж інструментарій для запасів (капелюхи для розробників Robotium, щоб зробити це так). Однак це не задовольнило нашу потребу в рамках, яка спростила написання надійних тестів для розробників.

Основні досягнення в Еспресо над Роботієм:

  1. Синхронізація. За замовчуванням логіка тестування приладів працює на іншому потоці (приладобудування), ніж операції з користувальницьким інтерфейсом (обробляються на потоці інтерфейсу користувача). Без синхронізації тестових операцій з оновленнями інтерфейсу, тести будуть схильні до в’ялості - тобто вийдуть випадковим чином із-за проблем із тимчасовим інтервалом. Більшість авторів тесту ігнорує цей факт, деякі додають механізми сну / повторного спроби та ще менше реалізують більш досконалий код безпеки потоку. Жодне з них не є ідеальним. Espresso піклується про безпеку ниток, безперешкодно синхронізуючи тестові дії та твердження з інтерфейсом користувальницької програми тестованої програми. Робоцій намагається вирішити це за допомогою механізмів сну / повтору, які не тільки є ненадійними, але й призводять до того, що тести працюватимуть повільніше, ніж потрібно.

  2. API. Еспресо має невеликий, чітко визначений та передбачуваний API, який відкритий для налаштування. Ви розповідаєте рамці, як знайти елемент інтерфейсу, використовуючи стандартні відповідники hamcrest, а потім доручаєте йому виконати дію або перевірити твердження на цільовому елементі. Можна порівняти це з API Robotium, де очікується, що автор тесту вибере один із 30 клацань методів. Крім того, Robotium розкриває такі небезпечні методи, як getCurrentActivity (що все-таки означає поточний?) Та getView, які дозволяють оперувати об'єктами за межами основної нитки (див. Пункт вище).

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

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


Привіт ! Дякую за вашу відповідь: Чи пропонує Еспресо можливість протестувати декілька додатків в одному тестовому випадку? Я повинен перевірити свою програму, яка викликає активність з іншої програми (моя інша програма, яка поділяє той самий sharedUserId), а потім отримує результат. Я не можу зробити це з Роботієм, але, можливо, з Еспресо? :-)
nbe_42

1
Ні - ви не можете взаємодіяти з інтерфейсом користувача поза процесом роботи з Еспресо. Це обмеження інструментальної рамки.
ВалераЗахаров

1
@ValeraZakharov :: Привіт ... !! Як ви вже говорили, еспресо буде піклуватися про синхронізацію потоку інтерфейсу і не потрібно укладати режими сну. Але в моєму випадку я написав кілька тестів, і всі тести працюють у моїй локальній машині (з одним сном за TestSuite як початок). Але майже 99% тестів стають невдалими, коли я бігаю з локальними / серверними джинкінами. Я вимкнув усі анімації в емуляторі jenkins. Більшу частину часу я отримую AppNotIdleException. Я не в змозі з'ясувати першопричину. Чи можете ви мені допомогти.
Naresh Gunda

@Radu Зробив це. Ваш коментар недійсний і без належних пояснень схоже на нерозумну спробу привернути увагу.
Ракіб

9

Еспресо набагато швидше, ніж Robotium, але працює лише на деяких версіях SDK.

Тож якщо ви хочете тест, який працює на всіх пристроях, перейдіть на Roboitum. Якщо ні, вирушайте на еспресо, і не забувайте, що ви будете бета-тестером ще деякий час.


Резюме допоможе мені створити синонім для цього тегу ..;)
Snicolas

2
Посилання, змінене вище, це нове: google.github.io/android-testing-support-library/docs/espresso/…
Evin1_
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.