Использование Monkey только в субактивности (отладка Android) - PullRequest
5 голосов
/ 11 января 2011

Я пытаюсь использовать инструмент отладки 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% времени на роуминг через мое приложение, за исключением субактивностей, которые я на самом деле хочу тестировать.желаемая активность, но безуспешно.

Ищу любую помощь,
ура,
Каджман

Ответы [ 2 ]

2 голосов
/ 17 декабря 2012

Я знаю, что уже немного поздно, но есть более надежный способ - используйте такой код:

ActivityManager activityManager;
activityManager =  (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);

if(!activityManager.isUserAMonkey()) {
    //stuff you want to execute anywhere but monkey test
});
2 голосов
/ 13 января 2011

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

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

  1. Поместите субактивности в один подпакет и разрешите доступ только к этому подпакету с параметром -p
  2. Добавьте некоторые ограничения в ваш код, которые мешают навигации внутри приложения. Например, настройте onClickListeners, чтобы он ничего не делал, или отключите кнопку «Назад» для тестируемого действия, когда выполняется какое-то определенное условие.

P.S. Вы можете использовать adb shell am start для запуска желаемой активности. Опять плохая документация, нет примера, но действие - это имя действия, которое вы определили внутри intent-filter для действия в вашем AndroidManifest. Имя - это название действия, например

adb shell am start -a my.package.app.ACTION1 -n my.package.app/.sub.MyActivity
...