Pull to refresh

Создание фермы Android-устройств с помощью Open STF

Reading time4 min
Views16K
Доля мобильного трафика увеличивается каждый год. Современный человек мобилен и ему проще получить информацию с экрана собственного смартфона. Поэтому в тренде разработка мобильных приложений. При разработке и тестировании важно иметь доступ к разнообразным устройствам, чтобы приложение корректно отрабатывало на всевозможных моделях смартфонов. Рассмотрим различные варианты доступа к устройствам.

Один из способов — облачные фермы мобильных устройств:

SAMSUNG Developres: Remote Test Lab
Firebase Test Lab
BrowserStack
AWS Device Farm
App Center
Sauce Labs

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

Другой способ – создание своей фермы андроид-смартфонов, благодаря которой сотрудники из разных городов и стран могут подключаться к офисным устройствам. Рассмотрим, как можно сделать свою собственную ферму Android-устройств через проект Open STF

Установка на Ubuntu 18.04:


Обновляем apt-get:

sudo apt-get update

Устаналиваем зависимости для OpenSTF (Node.js, NPM, GraphicsMagick, ZeroMQ, Protocol Buffers, yasm, pkg-config, adb).

sudo apt-get install nodejs npm graphicsmagick libzmq3-dev protobuf-compiler libprotobuf-dev yasm pkg-config android-tools-adb

Скачиваем deb пакет RethinkDB (пакет недоступен для Ubuntu 18.04 через apt):

wget https://github.com/srh/rethinkdb/releases/download/v2.3.6.srh.1/rethinkdb_2.3.6.srh.1.0bionic_amd64.deb
sudo dpkg -i rethinkdb_2.3.6.srh.1.0bionic_amd64.deb 

Установка OpenSTF:

npm install -g stf

Если при установке появляются ошибки, что npm не может получить доступ к /usr/local/lib или /usr/local/bin, то предоставьте к ним доступ:

sudo chown -R $USER /usr/local/lib
sudo chown -R $USER /usr/local/bin

И перезапустите

npm install -g stf

Установка на MacOS X:


Установить homebrew:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Скачать и установить все зависимости:

brew install node rethinkdb graphicsmagick zeromq protobuf yasm pkg-config homebrew/cask/android-platform-tools

Если при установке protobuf возникает следующая ошибка:

Error: An unexpected error occurred during the `brew link` step
The formula built, but is not symlinked into /usr/local
Permission denied @ dir_s_mkdir - /usr/local/Frameworks
Error: Permission denied @ dir_s_mkdir - /usr/local/Frameworks

То нужно создать папку /usr/local/Frameworks и дать права на запись в нее:

sudo mkdir /usr/local/Frameworks
sudo chown $USER /usr/local/Frameworks

Установка OpenSTF:

npm install -g stf

Установка на Windows:


Возможна через Cygwin, но официально не поддерживается разработчиками.

Запуск


Для работы OpenSTF нужно прежде запустить RethinkDB.

rethinkdb

Далее запустить сам openstf

stf local --public-ip <ip-адрес машины>

Подключение устройств:


По умолчанию OpenSTF самостоятельно определяет и подключает устройство без перезагрузки при подключении к машине мобильных устройств.

Но в Ubuntu возможны проблемы:

Если в openstf не видно мобильное устройство и выдается следующее сообщение логах openstf:

Unhandled rejection Error: Illegal value for Message.Field .DeviceIntroductionMessage.status of type enum: undefined (not a valid enum value)

а команда adb devices выдает следующий вывод:

List of devices attached
??????? no permissions (verify udev rules); see [http://developer.android.com/tools/device.html]

То придется добавлять устройство вручную:

Для этого запускаем

lsusb

и находим устройство, которое не смогло определиться.
Например,

Bus 001 Device 010: ID 2e04:c026  
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

ID USB-устройства состоит из двух частей — ID производителя (первая часть ID до ‘:’, 2e04, как в примере выше) и ID модели устройства (c026).

Далее запускаем команды, где параметры ATTR{idVendor} и ATTR{idProduct} заполняете в соответствии ID некорректно найденного устройства:

echo 'ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="2e04", ATTR{idProduct}=="c026", MODE="0666"' | sudo tee /etc/udev/rules.d/99-android.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --verbose --action=add --subsystem-match=usb

Стоит учесть, что устройства рекомендуется подключать через отдельный USB-хаб с отдельным питанием (например, вот такой).

Одной из особенностей фермы является то, что из-за постоянной зарядки срок службы аккумуляторов мобильных устройств будет ограничен 2-3 годами, так что если на устройстве аккумулятор съемный — есть смысл заранее его приобрести. На устройствах можно выключить режим, при котором экран устройства постоянно включен при зарядке (достаточно оставить настройку, что отключать экран автоматически после 30 секунд бездействия), т.к. OpenSTF умеет самостоятельно включать экран, когда это нужно — это увеличит срок использования устройства. Важно сказать, что OpenSTF не должен быть доступен извне корпоративной сети, кроме как через VPN, так как нормальной авторизации для него нет.

Скриншоты запущенной программы


Запуск OpenSTF:



Запуск приложения Google Play в OpenSTF



Список подключенных устройств в OpenSTF



Настройка информации по устройствам в OpenSTF



Таким образом, своя ферма Android-устройств помогает настроить доступ к офисным устройствам для удаленных сотрудников, тем самым повышая качество разрабатываемых приложений. Она имеет свои плюсы и минусы, которые стоит учесть.
Tags:
Hubs:
Total votes 17: ↑17 and ↓0+17
Comments2

Articles