Как автоматически проверить виджеты на главном экране? - PullRequest
1 голос
/ 14 августа 2011

Я ищу способы автоматизировать тестирование виджета приложения Android.Таким образом, очевидно, что частью теста является размещение виджета на главном экране.Я придумал решение, но оно на мой вкус слишком хакерское, поэтому мне интересно, есть ли лучший способ.

Мне нужно, чтобы это работало на эмуляторе с использованием внешнего скрипта.Прямо сейчас я использую простой скрипт bash, но метод, который я использую, должен работать и со скриптом monkeyrunner:

Сначала я определяю функцию для отправки ключей в эмулятор, как уже указано на SO * 1006.*:

function send() { ( nc -w 2 localhost 5554  <<EOL
event send $*
quit
EOL
) | grep -E -v "OK|KO|Android Console" ; }

и

function send_many() { for i in $* ; do send EV_KEY:$i:1 EV_KEY:$i:0 ; done ; }

Функция send() эквивалентна вызову MonkeyDevice.send (..., DOWN_AND_UP) .

Теперь я могу надежно отправить последовательность клавиш, чтобы открыть меню, выбрать «Добавить» (клавиша), дважды подняться вверх и вниз, чтобы выбрать «Виджет», выбрать мой виджет (он оказывается первым в списке)подождите секунду или две, пока появится пользовательский интерфейс конфигурации виджета, и выберите в нем кнопку установки:

$ send_many KEY_MENU KEY_A KEY_UP KEY_UP KEY_DOWN KEY_ENTER KEY_ENTER
$ sleep 2s
$ send_many KEY_UP KEY_RIGHT KEY_ENTER

Наконец, я обертываю все это в скрипт, который перебирает кучу AVD (например, "test_avd_N "где N - это номер API из 3..12), закрывает любой запущенный эмулятор, открывает новый, ждет его запуска и запускает тестовые сценарии.Я готовлю все AVD с помощью снимков и использую опцию emulator -no-snapshot-save, чтобы сохранить снимок без изменений между запусками.

Так что в целом это работает, но довольно неприглядно.Интересно, что я мог бы улучшить здесь?

1 Ответ

4 голосов
/ 14 августа 2011

Использование скрипта MonkeyRunner по крайней мере удалит неуклюжесть этой функции send. Одной из очевидных проблем в последовательности клавиш является использование «A» в качестве ярлыка для «Добавить» из главного меню. Это не сработает, если эмулируемое устройство на другом языке, который вы обязательно должны будете проверить в какой-то момент.

Кстати, начиная с API 9 или 10, в эмуляторе есть обновленный CustomLocale.apk, который можно использовать для изменения локали с помощью трансляции:

$ LOCALES=( $( aapt dump configurations "$APK "| sed -e 's/^.*lang=\(..\).*reg=\(..\).*/\1_\2/;s/_--//;s/--//' ) )
$ for LC in ${LOCALES[@]}; do
>   adb -e shell am broadcast -a com.android.intent.action.SET_LOCALE --es com.android.intent.extra.LOCALE $LC
> done

Чтобы проверить, поддерживает ли ваш эмулятор это, проверьте, есть ли у apk CustomLocale v2 в имени пакета:

$ adb shell pm list packages | grep customlocale
...