Каков рекомендуемый способ сделать это программно?
Единственный возможный вариант - запустить команду ADB adb shell pm clear packageперед тестом. Самая большая проблема в том, что это своего рода головная боль, сочетающая выполнение тестов и команды оболочки.
Тем не менее, мы (в Mediafe) пришли с некоторым решением, которое может работать для вас на обычном устройстве без рута. Все, что вам нужно сделать, это добавить аннотацию. Все остальное делается с помощью простого скрипта bash .
Просто добавь @ClearData аннотацию до ЛЮБОГО из ваших тестов и tada command, команда ADB clear будет выполнена перед выполнением теста.
Вот пример такого теста:
@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)
- Дамп БД (sqlite)
- Дамп общих настроек по умолчанию (xml)
- Соберите файлы dumpsys, такие как: батарея, netstats и другие.
В общем, легко добавить больше опций, поскольку тесты выполняются один за другим из скрипта bash, а не из задачи gradle.
Post Полный пост в блоге : https://medium.com/medisafe-tech-blog/running-android-ui-tests-53e85e5c8da8
📘 Исходный код с примерами : https://github.com/medisafe/run-android-tests
Надеюсь, что это отвечает на вопрос 6 лет;)