Espresso для Android - це легкий, швидкий та налаштовуваний фреймворк для тестування Android-додатків, розроблений для забезпечення компактного та надійного автоматизованого тестування користувацького інтерфейсу. У кінці жовтня 2013 року фреймворк Espresso був представлений громадськості на конференції Google з автоматизації тестування. З цього моменту він набирає популярність серед розробників та спеціалістів з тестування. З версії 2.0 Espresso є частиною Android Support Repository.
На даний момент це найпопулярніша платформа тестування для операційної системи Android, тому що її функціональність постійно вдосконалюється та просувається самим Google та спільнотою Android з відкритим вихідним кодом. Далі ми розглянемо основи Espresso - основні компоненти фреймворка Espresso, які використовуються в автоматизації тестування для відтворення кінцевої поведінки користувача.
Які пакети включає в себе Espresso?
Розглянемо, які пакети є в Espresso, але варто зазначити, що для 90% завдань достатньо основного - espresso-core. Список надається поки для ознайомлення, а детальніше будемо розглядати далі
- espresso-core - основний компонент фреймворка, з яким в основному нам доведеться і працювати. Містить основні та базові матчери, дії та твердження (Matcher, ViewAction і ViewAssertion)
- espresso-contrib - розширення, що містить дії над DatePicker, RecyclerView та Drawer, перевірки доступності та роботи з CountingIdlingResource.
- espresso-intents - розширення для перевірки та підміни Activity через інтенти.
- espresso-idling-resource - механізм Espresso для синхронізації фонових завдань.
- espresso-remote - дозволяє взаємодіяти з різними процесами екземплярів Espresso.
- espresso-web - містить ресурси для підтримки WebView.
Додавання Gradle залежностей
Необхідно виконати наступні кроки:
- Відкрийте файл build.gradle для вашого додатку.
- Переконайтеся, що в
repositories
є Google’s Maven repository:
allprojects { repositories { jcenter() google() }}
- Кожен пакет AndroidX Test, який ви хочете використовувати, додайте до розділу залежностей. Наприклад, щоб додати пакет espresso-core, додайте наступні рядки:
dependencies { androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'}
В AndroidX Test доступні наступні залежності на базі Gradle:
dependencies { // Core library androidTestImplementation 'androidx.test:core:1.0.0'
// AndroidJUnitRunner and JUnit Rules androidTestImplementation 'androidx.test:runner:1.1.0' androidTestImplementation 'androidx.test:rules:1.1.0'
// Assertions androidTestImplementation 'androidx.test.ext:junit:1.0.0' androidTestImplementation 'androidx.test.ext:truth:1.0.0' androidTestImplementation 'com.google.truth:truth:0.42'
// Espresso dependencies androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0' androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.1.0' androidTestImplementation 'androidx.test.espresso:espresso-intents:3.1.0' androidTestImplementation 'androidx.test.espresso:espresso-accessibility:3.1.0' androidTestImplementation 'androidx.test.espresso:espresso-web:3.1.0' androidTestImplementation 'androidx.test.espresso.idling:idling-concurrent:3.1.0'
// The following Espresso dependency can be either "implementation" // or "androidTestImplementation", depending on whether you want the // dependency to appear on your APK's compile classpath or the test APK // classpath. androidTestImplementation 'androidx.test.espresso:espresso-idling-resource:3.1.0'}
Загальна схема взаємодії з Espresso
Є три типи методів, доступних в Espresso:
- ViewMatchers — здійснює пошук об’єкта в ієрархії представлень. Знаходимо View, передавши в метод onView об’єкт Matcher.
- ViewActions — ці методи дозволяють виконувати різні дії з об’єктами. Виконуємо дії над вище згаданою View, передавши в метод perform об’єкт ViewAction.
- ViewAssertions — перевірка стану об’єкта та підтвердження, що його стан відповідає заданим критеріям. Зазвичай для створення об’єкта ViewAssertion використовують метод matches, який приймає об’єкт Matcher.
Розглянемо на “живому” прикладі вищезгадане.
У даному прикладі відбувається клік (click()
) на кнопку R.id.button
з перевіркою стану - isDisplayed
(що даний ID відображається):
onView(withId(R.id.button)).perform(click()).check(matche(isDisplayed()))
withId(R.id.button)
це ViewMatcher,click()
- ViewActions,matches(isDisplayed())
- ViewAssertions.
Основні недоліки Espresso
- Робота тільки з вихідним кодом. На жаль, відсутня можливість запуску тестів на вже зібраній .apk збірці
- Відсутність можливості тестування поза Вашим додатком. Будь-який системний діалог неможливо покрити тестами з допомогою Espresso. Тільки використовуючи в тандемі з практично непідтримуваним фреймворком UI Automator
- З коробки немає неявного очікування
- Залежність від вихідного коду додатку. У свою чергу це залежність від помилок розробників (залежності, підмодули)
Чит-лист Espresso
Представлений нижче чит-лист є коротким довідником, який Ви зможете використовувати при роботі з Espresso. Ця шпаргалка містить більшість доступних екземплярів Matcher, ViewAction і ViewAssertion.