Использование 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 ответа

Решение

У меня также было немного проблем с ограничением обезьяны категориями. Я думаю, что он не предназначен для работы, как вы предполагаете. Как это работает тогда? Понятия не имею, просто экспериментирую с этим. Документация довольно скудная.

Для вашей проблемы вы можете рассмотреть следующие подходы

  1. Поместите свои субактивности в один подпакет и разрешите доступ только к этому подпакету с опцией -p
  2. Добавьте некоторые ограничения в ваш код, которые мешают навигации внутри приложения. Например, настройте 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
});
Другие вопросы по тегам