Автоматическое тестирование обновления Android приложения
android, тестирование, эмуляторы
Мы хотим выполнить проверку, что при обновлении версии приложения, пользовательские данные сохраняются. При этом старая версия у нас всегда одна и та же, а новые меняются и прибавляются к старым. Можно решить задачу следующим образом:
- Устанавливаем старую версию приложения.
- Выполняем сценарий для формирования пользовательских данных.
- Устанавливаем новую версию приложения.
- Выполняем сценарий проверки пользовательских данных.
Отличный, простой способ, если все это автоматизировать, но есть пункт 2, который может занимать много времени.
Альтернативный подход - перенос данных старой версии из каталога /data/data/packagename/
. Им мы и воспользуемся.
Для этого необходимо устройство с root правами, неплохо подходит эмулятор.
Идея состоит в том, чтобы заранее, руками сформировать пользовательские данные и подкладывать их на устройство.
В таком случае мы получаем следующий порядок действий
(у нас уже есть содержимое каталога /data/data/packagename/
с устройства,
на котором были нужные нам для проверки данные, сохраняем его в каталог backup):
- Устанавливаем старую версию приложения.
- Запускаем приложение.
- Выгружаем приложение из памяти.
- Смотрим пользователя, для которого установилось приложение
adb shell su -c ls -l /data/data/packagename/
(проблема в том, что каждое приложение получает права на файлы для уникального пользователя, что мешает нам просто подменить данные) - Копируем backup на устройство
adb push backup /data/local/tmp/backup/
- Копируем на устройство скрипт для рекурсивной смены прав (до Android версии 6.0 у команды chown нет флага -r)
adb push chownr.sh /sdcard/
(листинг скрипта ниже). - Меняем владельца для backup на такой же как у браузера из пункта 4
adb shell su -c sh /sdcard/chownr.sh u0_a61 u0_a61 /data/local/tmp/backup
(u0_a61 - пример имени пользователя). - Подменяем данные
adb shell su -c cp -R /data/local/tmp/backup/* /data/data/packagename/
. - Устанавливаем новую версию приложения.
- Выполняем сценарий проверки пользовательских данных.
Шагов получилось больше, но при частых проверках, молниеносные шаги 3-8, сэкономят огромное количество времени, по сравнению с медленным шагом 2 из первого подхода.
chownr.sh
#!/system/bin/sh
recurse() {
for i in "$3"/*;do
if [ -d "$i" ];then
case $i in
*lib) echo "skip lib directory"
;;
*) chown $1:$2 "$i"
recurse $1 $2 "$i"
;;
esac
elif [ -f "$i" ]; then
chown $1:$2 "$i"
fi
done
}
recurse $1 $2 $3