Продолжаем воевать с нашими UI авто-тестами.
Пригодились предыдущие посты — Android Studio: установка на Linux и работа с Android Virtual Devices и Appium: Android Virtual Device, Original error: Condition unmet after 60159 ms и костыль .
В целом тесты работают, но иногда вылазят интересные проблемки.
Сегодня наш QA-инженер скинул сообщение, что все UI-тесты упали с такой ошибкой:
[debug] [W3C] Encountered internal error running command: Error executing adbExec. Original error: 'Command '/android/Android/sdk/platform-tools/adb -P 5037 -s emulator-5554 install -r -g /home/projectname/projectnameMenBuilds/projectnameMen-stage.apk' exited with code 1'; Stderr: 'adb: failed to install /home/projectname/projectnameMenBuilds/projectnameMen-stage.apk: Failure [INSTALL_FAILED_INSUFFICIENT_STORAGE]'; Code: '1'
[debug] [W3C] Error: Command '/android/Android/sdk/platform-tools/adb -P 5037 -s emulator-5554 install -r -g /home/projectname/projectnameBuilds/projectnameMen-stage.apk' exited with code 1
[debug] [W3C] at ChildProcess.proc.on.code (/home/projectname/node_modules/teen_process/lib/exec.js:94:19)
[debug] [W3C] at emitTwo (events.js:126:13)
[debug] [W3C] at ChildProcess.emit (events.js:214:7)
[debug] [W3C] at maybeClose (internal/child_process.js:925:16)
[debug] [W3C] at Process.ChildProcess._handle.onexit (internal/child_process.js:209:5)
[HTTP] <-- POST /wd/hub/session 500 2312 ms - 1165
[HTTP]
[HTTP] --> POST /wd/hub/session
[HTTP]
Собственно, первое, что бросается в глаза — сообщение «Failure [INSTALL_FAILED_INSUFFICIENT_STORAGE]’; Code: ‘1’ «.
По первому же запросу в Google «android INSTALL_FAILED_INSUFFICIENT_STORAGE » находится вопрос на StackOverflow тут>>> , где есть подходящий ответ, который описывает проблему — тут>>> .
Проверяем.
Запускаем используемый в тестах эмулятор:
projectname@projectname-ci:~$ emulator -avd Nexus_5X_API_26
Запускаем в нём консольку:
projectname@projectname-ci:~$ adb shell
generic_x86:/ $
Проверяем свободное место:
1|generic_x86:/ $ df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 611M 4.6M 606M 1% /
tmpfs 756M 488K 756M 1% /dev
/dev/block/vda1 2.4G 1.4G 0.9G 59% /system
/dev/block/vde1 90M 35M 53M 40% /vendor
tmpfs 756M 0 756M 0% /mnt
/dev/block/vdb 61M 56K 60M 1% /cache
/dev/block/dm-0 1.9G 1.7G 148M 93% /data
/data/media 1.9G 1.7G 148M 93% /storage/emulated
148M 93% /data — 148 метров, ну да — маловато.
Не посмотрел — сколько весит наша apk-шка, но места явно недостаточно.
Пробуем посмотреть что в каталоге:
1|generic_x86:/ $ ls -l /data/
ls: /data/: Permission denied
Угу…
Пробуем root:
projectname@projectname-ci:~$ adb root
adbd cannot run as root in production builds
Ну и окей, ну и не надо.
Решения есть, но рутать не хочется — только время тратить.
Просто добавим места — его на билд-машине много.
Гуглим «android emulator disk space «, находим пост Quick Tip: Increase the storage size of your Android Emulator .
Находим наши устройства:
projectname@projectname-ci:~$ ls -l ~/.android/avd/
total 16
drwxrwxr-x 5 projectname projectname 4096 бер 4 11:35 Nexus_5X_API_26.avd
-rw-rw-r-- 1 projectname projectname 127 лис 20 17:50 Nexus_5X_API_26.ini
drwxrwxr-x 4 projectname projectname 4096 гру 18 18:44 test.avd
-rw-rw-r-- 1 projectname projectname 105 лис 19 17:18 test.ini
Проверяем каталог ~/.android/avd/Nexus_5X_API_26.avd
:
projectname@projectname-ci:~$ ls -la ~/.android/avd/Nexus_5X_API_26.avd/
total 2861472
drwxrwxr-x 5 projectname projectname 4096 бер 4 11:35 .
drwxrwxr-x 4 projectname projectname 4096 бер 4 11:41 ..
-rw-rw-r-- 1 projectname projectname 96 бер 4 11:35 AVD.conf
-rw-r--r-- 1 projectname projectname 69206016 бер 12 2018 cache.img
-rw-r--r-- 1 projectname projectname 42598400 бер 4 11:35 cache.img.qcow2
-rw-rw-r-- 1 projectname projectname 1173 лют 14 11:10 config.ini
Вот и config.ini
:
projectname@projectname-ci:~$ cat ~/.android/avd/Nexus_5X_API_26.avd/config.ini | grep data
disk.dataPartition.size=2G
Задаём новое значение — пусть будет 5 гиг:
...
disk.dataPartition.size=5G
...
Запускаем эмулятор заново:
projectname@projectname-ci:~$ emulator -avd Nexus_5X_API_26
emulator: WARNING: userdata partition is resized from 2048 M to 5120 M
Консольку:
projectname@projectname-ci:~$ adb shell
error: device unauthorized.
This adb server's $ADB_VENDOR_KEYS is not set
Try 'adb kill-server' if that seems wrong.
Otherwise check for a confirmation dialog on your device.
Окей… Убиваем avd
:
projectname@projectname-ci:~$ adb kill-server
Запускаем ещё раз:
projectname@projectname-ci:~$ adb shell
* daemon not running; starting now at tcp:5037
* daemon started successfully
Проверяем место сейчас:
generic_x86:/ $ df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 611M 4.6M 606M 1% /
tmpfs 756M 488K 756M 1% /dev
/dev/block/vda1 2.4G 1.4G 0.9G 59% /system
/dev/block/vde1 90M 35M 53M 40% /vendor
tmpfs 756M 0 756M 0% /mnt
/dev/block/vdb 61M 56K 60M 1% /cache
/dev/block/dm-0 4.8G 88M 4.7G 2% /data
/data/media 4.8G 88M 4.7G 2% /storage/emulated
Запускаем тесты — и всё работает.