Продолжаем воевать с нашими UI авто-тестами.
Пригодились предыдущие посты – Android Studio: установка на Linux и работа с Android Virtual Devices и Appium: Android Virtual Device, Original error: Condition unmet after 60159 ms и костыль.
В целом тесты работают, но иногда вылазят интересные проблемки.
Сегодня наш QA-инженер скинул сообщение, что все UI-тесты упали с такой ошибкой:
[simterm]
[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]
[/simterm]
Собственно, первое, что бросается в глаза – сообщение “Failure [INSTALL_FAILED_INSUFFICIENT_STORAGE]’; Code: ‘1’“.
По первому же запросу в Google “android INSTALL_FAILED_INSUFFICIENT_STORAGE” находится вопрос на StackOverflow тут>>>, где есть подходящий ответ, который описывает проблему – тут>>>.
Проверяем.
Запускаем используемый в тестах эмулятор:
[simterm]
projectname@projectname-ci:~$ emulator -avd Nexus_5X_API_26
[/simterm]
Запускаем в нём консольку:
[simterm]
projectname@projectname-ci:~$ adb shell generic_x86:/ $
[/simterm]
Проверяем свободное место:
[simterm]
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
[/simterm]
148M 93% /data – 148 метров, ну да – маловато.
Не посмотрел – сколько весит наша apk-шка, но места явно недостаточно.
Пробуем посмотреть что в каталоге:
[simterm]
1|generic_x86:/ $ ls -l /data/ ls: /data/: Permission denied
[/simterm]
Угу…
Пробуем root:
[simterm]
projectname@projectname-ci:~$ adb root adbd cannot run as root in production builds
[/simterm]
Ну и окей, ну и не надо.
Решения есть, но рутать не хочется – только время тратить.
Просто добавим места – его на билд-машине много.
Гуглим “android emulator disk space“, находим пост Quick Tip: Increase the storage size of your Android Emulator.
Находим наши устройства:
[simterm]
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
[/simterm]
Проверяем каталог ~/.android/avd/Nexus_5X_API_26.avd
:
[simterm]
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
[/simterm]
Вот и config.ini
:
[simterm]
projectname@projectname-ci:~$ cat ~/.android/avd/Nexus_5X_API_26.avd/config.ini | grep data disk.dataPartition.size=2G
[/simterm]
Задаём новое значение – пусть будет 5 гиг:
... disk.dataPartition.size=5G ...
Запускаем эмулятор заново:
[simterm]
projectname@projectname-ci:~$ emulator -avd Nexus_5X_API_26 emulator: WARNING: userdata partition is resized from 2048 M to 5120 M
[/simterm]
Консольку:
[simterm]
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.
[/simterm]
Окей… Убиваем avd
:
[simterm]
projectname@projectname-ci:~$ adb kill-server
[/simterm]
Запускаем ещё раз:
[simterm]
projectname@projectname-ci:~$ adb shell * daemon not running; starting now at tcp:5037 * daemon started successfully
[/simterm]
Проверяем место сейчас:
[simterm]
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
[/simterm]
Запускаем тесты – и всё работает.