Який рекомендований спосіб зробити це програмно?
Єдиний можливий варіант - запустити команду ADB adb shell pm clear packageперед тестом. Найбільша проблема полягає в тому, що це свого роду головний біль, що поєднує виконання тестів і команд оболонки.
Однак ми (в Mediafe) придумали рішення, яке може працювати для вас на звичайних не вкорінених пристроях. Все, що вам потрібно зробити - це додати анотацію. Все інше робиться за допомогою простого скрипта bash .
Просто додайте @ClearDataанотацію перед будь-яким із ваших тестів та тада 🎉, перед виконанням тесту буде виконано чітку команду ADB.
Це приклад такого тесту:
@Test
@ClearData
public void someTest() {
// your test
}
Ідея така
- Прочитайте всі тести, використовуючи
adb shell am instrument -e log true
- План побудови виконання шляхом аналізу результатів з (1)
- Запустіть план виконання рядки за рядком
Використовуючи ту саму ідею, це всі варіанти, які ви можете легко підтримати:
- Очистити дані
- Очистити панель сповіщень
- Параметризуйте
- Фільтр та запуск тегів
Використовуйте лише примітки. Подобається це:
@Test
@ClearData
@Tags(tags = {"sanity", "medium"})
@Parameterized.Repeat(count = 3)
public void myTest() throws Exception {
String param = params[index];
// ...
}
Бонус! 🎁 Для кожного невдалого тесту:
- Зберіть Logcat + stacktrace
- Запис відео (mp4)
- Dump DB (sqlite)
- Вивантажити налаштування спільного користування за замовчуванням (xml)
- Збирайте файли dumpsys, такі як: акумулятор, нетстати та інші.
Взагалі, легко додати більше варіантів, оскільки тести виконуються по черзі з bash script, а не з завдання gradle.
📗 Повна публікація в блозі : https://medium.com/medisafe-tech-blog/running-android-ui-tests-53e85e5c8da8
📘 Вихідний код із прикладами : https://github.com/medisafe/run-android-tests
Сподіваюся, що це відповідає на 6 років питання;)