skip to content
Зміст

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.

Espresso cheat sheet

Обговорення
Вхід через GitHub
Завантаження коментарів...