Использование Monkey только в субактивности (отладка Android)
Я пытаюсь использовать инструмент отладки Monkey (из adb) для стресс-тестирования части моего приложения. Поскольку Monkey действует совершенно случайным образом, я бы хотел сосредоточиться на той части кода, которая может содержать искомую ошибку (очень редкая ошибка, и я не знаю, как ее воспроизвести).
Итак, в моем основном задании у меня есть 6 кнопок, каждая из которых запускает новое действие. Я бы хотел, чтобы обезьяна смотрела только на одно из этих действий, и каждое действие было доступно из этого. Я не могу найти разумный способ сделать это.
Я попробовалadb shell monkey -p my.package.name -c android.intent.category.MONKEY 1000
и в моем файле манифеста я включил некоторые действия, которые меня интересуют:
<intent-filter>
<category android:name="android.intent.category.MONKEY"/>
</intent-filter>
Но это не сработало. Обезьяна все еще запускает действия, которые не классифицированы этим тегом. Для Monkey крайне важно работать в выбранных субактивах, потому что это тратит около 95% времени на роуминг через мое приложение, за исключением субактивностей, которые я действительно хочу протестировать.
Также я попробовал несколько простых скриптов для запуска желаемой активности, но безуспешно.
Ищу любую помощь,
веселит,
kajman
2 ответа
У меня также было немного проблем с ограничением обезьяны категориями. Я думаю, что он не предназначен для работы, как вы предполагаете. Как это работает тогда? Понятия не имею, просто экспериментирую с этим. Документация довольно скудная.
Для вашей проблемы вы можете рассмотреть следующие подходы
- Поместите свои субактивности в один подпакет и разрешите доступ только к этому подпакету с опцией -p
- Добавьте некоторые ограничения в ваш код, которые мешают навигации внутри приложения. Например, настройте onClickListeners, чтобы он ничего не делал, или отключите кнопку "Назад" для тестируемого действия, когда выполняется какое-то конкретное условие.
PS Вы можете использовать adb shell am start для запуска желаемой субактивности. Опять плохая документация, нет примера, но действие - это имя действия, которое вы определили внутри intent-filter для действия в вашем AndroidManifest. Имя - это название деятельности, например
adb shell am start -a my.package.app.ACTION1 -n my.package.app/.sub.MyActivity
Я знаю, что уже немного поздно, но вот более надежный способ - используйте такой код:
ActivityManager activityManager;
activityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
if(!activityManager.isUserAMonkey()) {
//stuff you want to execute anywhere but monkey test
});