STF -тестовая ферма Android смартфонов
Начинали мы тестирование мобильных устройств с 3 реальных смартфонов. Выбирали мы эти устройства по статистике обращения к нашему проекту Sravni.ru. На текущий момент парк мобильных устройств расширен более чем до 20 аппаратов. С самого начала мы столкнулись с проблемой доступности устройств. Кто-то взял из сейфа смартфон/планшет для работы, и забыл вернуть. Кто-то работает сейчас, а кто-то вставив симку может ждать и пару дней ответа.
Или вот так да :). Соотвественно в такие моменты, устройства становились не доступны. Перед нами встала задача использовать некое решение не создавая его с 0, желательно без больших затрат.
Первый способ — использование Облачных ферм мобильных устройств:
SAMSUNG Developres: Remote Test Lab
На самом деле облачных ферм много: бесплатные и платные, с большим парком устройств и с маленьким выбором под конкретную фирму. Многое могло быть полезно, но многое нас и не устраивало. Поэтому мы пришли к решению попробовать создать свою реальную тестовую ферму на основе openstf.io
Немного о проекте STF
STF — это проект GitHub с открытым исходным кодом, называемый Smartphone Test Farm, который описывается авторами как «веб-приложение для удаленной отладки смартфонов, умных часов и других гаджетов, не выходя из браузера». С помощью этого инструмента можно получить доступ к реальному устройству Android через веб-браузер и удаленно управлять устройством и его программным обеспечением. Инструмент предоставляет много информации, начиная с общей информации об устройстве, возможности запуска автоматических тестов через Android Studio, а также удаленного управления. Особенности можно почитать тут.
Установка
Этот раздел можете пропустить если пока просто смотрите описание работы фермы:)
Требования:
- Node.js 8.x (некоторые зависимости не поддерживают новые версии)
- ADB
- RethinkDB >= 2.2
- GraphicsMagick (для изменения настроек скриншотов)
- ZeroMQ установленные библиотеки
- Protocol Buffers установленные библиотеки
- yasm (для компиляции встроенного libjpeg-turbo)
- pkg-config иначе Node.js не найдет библиотеки
К слову, разработчики предоставляют Docker- контейнер в Docker Hub как openstf / stf . Инструкция есть тут Dockerfile.
Установка на 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-адрес машины>
Подключение устройств
На самом деле тут все просто если у вас 1–3 устройства берете любой USB hub (даже пассивный) и подключаете к компу где установлен и запущен STF. Но вот если у вас больше чем 3 смартфона/планшета. то возникают сложности :(. Вам нужен активный USB hub с отдельным питанием, и даже так его мощности может не хватить на все порты (Подсказка используйте N портов убавляя по 1, до бесперебойной работы)
Мы используем:
И скажу честно, занимаем обычно 8–9 портов, часть подключается напрямую к Серверу.
Но и это еще не все, в каждом Устройстве вам нужно активировать Режим разработчика. Для этого вам нужно открыть настройки, пролистать меню в самый низ и открыть раздел «О телефоне» либо раздел «О планшете», если у вас планшетный компьютер. После этого доступные настройки нужно снова пролистать в самый конец, аж до пункта «Номер сборки». Далее для включения режима разработчика нужно 7 раз нажать на пункт «Номер сборки». В результате, после седьмого нажатия на «Номер сборки» включится режим разработчика, и вы увидите сообщение «Вы стали разработчиком». К слову, если на Андроиде уже был включен режим разработчика, то при нажатии на номер сборки появится сообщение «Вы уже разработчик».
Далее, в настройках ищите раздел «Система», переходите в него и пролистываете в самый низ, до
Заходите в раздел «Для разработчиков» тут вам надо найти 2 пункта:
- Выбор настройки USB -> установить в Media Transfer Protocol (MTP)
- Отладка по USB -> установить в «включено» (и доверится подсоединенному ПК, будет автоматический запрос)
Особенности фермы:
- Все Ваши устройства будут постоянно подключены к USB HUB, т.е. все время будут заряжаться. Из этого следует, что надо внимательно следить за аккумуляторами, скорее всего их жизнь будут активной, но не долгой (1–3 года). Если хотите немного растянуть это время отключите режим постоянной работы экрана при зарядке (STF самостоятельно его включит при обращении к устройству).
- В STF нет распределения прав и корректной авторизации, поэтому подключайте ферму только через корпоративный VPN.
- В STF нет администрирования системы и подключенных устройств. Это означает, что если кто-то занял устройство, и забыл его “отпустить” то оно будет заблокировано пока таймаут фермы его не освободит. Еще вариантом является физическое переподключение устройства.
- В этом пункте я расскажу, о очень полезной особенности “Чистый телефон”. Если пользователь удаленно подключен к телефону и загружает приложение, а затем отключается от телефона, приложение автоматически удаляется, а это означает, что сам телефон всегда находится в чистом состоянии. А главное позволяет тестировать разные версии приложений (быстрым способом).
Скрины / картинки / STF
Имя используется только для идентификации, почта вообще любая (никаких рассылок нет).
Доступные устройства:
Что очень удобно, что используется, кем занято, используемое устройство можно освободить.
Детали по каждому устройству (показываю мои настройки)
Слева, можно обращаться к устройству и использовать его (Или увидеть его Status). Я показал, то что посчитал нужным добавить/убрать для информативности и удобства в работе. Возможно себе вы подберете другую конфигурацию столбцов.
Настройки (Settings)
Легко можно поменять язык на русский и не только :)
В заключение: Друзья и Коллеги, если вам понравился пост, то “Рекомендуйте”, “Делитесь”, “Заносите в закладки” и конечно я очень жду ваших откликов. Возможно эту статью можно улучшить или расширить, сделать более интересной и информативной