середа, 2 листопада 2016 р.

Автоматизаци тестирования Android приложений средствами Android Studio, в частности Espresso

Мне надоело руками проводить регрессионное тестирование приложений после внесения правок. В свободное время начал разбираться с автоматизацией этого процесса. Т.к. программист из меня - никакой, то очень надеюсь на помощь знающих товарищей. Пишите в комментарии ваши замечания и предложения по оптимизации процесса.


Порыскав по просторам интернета я в конечном итоге остановил свой выбор на Espresso, т.к. этот инструмент идёт в комплекте с Android Studio.

Я пока не лезу в дебри автоматизации. Для начала хочу автоматизировать прогон UI. Т.е. мне нужно убедиться, что свайпы выполняются без ошибок и при клике на элемент интерфейса выполняется ожидаемое действие. Очень хорошо что Espresso работает с интерфейсом не по координатам, а по ID. Так что если какой то элемент будет перемещён, то править тесты не придётся. Для нормальной работы вам понадобится полный доступ к коду.  У нас все работают через Git так что я тоже подключился и без опаски могу выкачивать актуальные версии кода.

Для создания файла с кодом теста идём Run - Record Espresso Test

Android Studio предложит выбрать устройство с которого будет записан тест. Я предпочитаю пользоваться эмулятором.
Ждем пока приложение скомпилится и установится на выбранное устройство.
Когда всё будет готово для записи - появится вот такое окно:


Некоторые из выполненных действий будут записаны. Остальные придётся вписывать самому.



После нажатия на кнопку "Complete Recording" это окно закроется и в вашем проекте будет создан файл с заготовкой автоматического теста.


Того что было создано автоматически для меня оказалось мало.



Есть вот такая документация по Espresso
https://developer.android.com/reference/android/support/test/espresso/action/ViewActions.html
Короче, если нужно сделать свайп всего экрана справа налево:
onView(withId(R.id.viewPager)).perform(swipeLeft());

Слева на право:
onView(withId(R.id.viewPager)).perform(swipeRight());

Снизу вверх:
onView(withId(R.id.viewPager)).perform(swipeUp());

Сверху вниз:
onView(withId(R.id.viewPager)).perform(swipeDown());

Длинный тап на экране:
onView(withId(R.id.viewPager)).perform(longClick());

Клик на элементе списка:
onView(withId(R.id.recycler_view)).perform(RecyclerViewActions.actionOnItemAtPosition(positionNumber, click())); 
где positionNumber - номер элемента в списке
Вместо click() можно подставлять необходимый параметр swipeLeft(), longClick() и т.д.

Иногда для отладки теста можно использовать "замедлитель" Thread.sleep(500); 500 - это миллисекунд.


Такие тесты не заменят ручное тестирование, но освободят от рутины.

Немає коментарів:

Дописати коментар