Построение платформы управления мобильными устройствами (на базе STF/ATXServer2)

контрольная работа

Эта статья была впервые опубликована на:Уокер ИИ

Основной бизнес компании включает игровой ИИ и автоматизированное тестирование.Нашей команде ИИ необходимо использовать мобильные устройства для постоянного отслеживания и оптимизации производительности роботов ИИ в игре.Команда автоматического тестирования также работает над разработкой автоматизированного тестирования пользовательского интерфейса для игр. Движение, оба необходимы для использования мобильных устройств.

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

1. Создайте платформу управления мобильными устройствами на основе STF.

1.1 Введение STF и анализ преимуществ и недостатков

  • Преимущество

    • Поддержка системы Android 2.3-10.0 (система 10.0 является последней)
    • Дистанционное управление через браузер, поддержка удаленной мыши и клавиатуры для работы с реальной машиной
    • Функция удаленного копирования и вставки
    • снимок экрана
    • Пакет приложений и функция загрузки/выгрузки файлов
    • Поддержка удаленного браузера для доступа к реальной машине
    • вывод журнала и вывод журнала ошибок
    • Запуск скрипта (возможно последующее автоматическое тестирование)
    • Разработчики выполняют функции удаленной отладки
    • Обеспечить мониторинг производительности процессора устройства, памяти, питания и т.д.
    • Версия системы и системные настройки машины для испытаний на отверждение не могут быть изменены.
  • недостаток

    • Поддерживает только удаленное управление телефоном Android, iOS не поддерживает (требуется дополнительная разработка)
    • Он не очень совместим с различными мобильными телефонами Android в Китае, может возникнуть ситуация, когда STF.APK не может быть установлен на мобильный телефон в обычном режиме или служба не может нормально запускаться автоматически.

1.2 Введение в архитектуру (Nodejs+Angularjs+Rethinkdb)

Основная функция STF может быть понята как: «синхронизированное изображение» + «щелчок». Первое выполняется с помощью minicap, второе — с помощью minitouch.

Конкретная структура показана на следующем рисунке:

Сторона устройства

  • STF установит minicap и minitouch на устройства Android. Используйте minicap для захвата экрана, используйте minitouch для запуска событий мультитач и используйте сокет для передачи данных между сервером и устройством через adb.
  • STF также устанавливает файл STFService.apk на устройство Android, который работает в фоновом режиме устройства и предоставляет набор API-интерфейсов сокетов, которые можно использовать для мониторинга и выполнения различных действий. Точно так же он общается с сервером через adb, но использует формат данных буфера протокола.
  • minirev, который перенаправляет локальные службы прямо с порта Android-устройства, даже если не в сегменте сети.

Сервер

  • Серверная часть STF состоит из нескольких различных независимых микросервисов на основе nodejs, которые взаимодействуют через ZeroMQ. Сервер можно разделить на уровень провайдера и уровень приложения.

Уровень провайдера

  • Уровень провайдера (stf-provider) в основном отвечает за связь с устройством.
  • Мониторинг состояния устройства через adb.Когда новое устройство подключено или устройство отключено, оно будет отслеживаться немедленно.
  • Если это новое подключаемое устройство, провайдер будет использовать новый процесс nodejs (stf-device), который в основном отвечает за всю связь с устройством.
  • stf состоит из двух частей: stf-provider и adb.
  • Следует отметить, что службы уровня провайдера должны работать на физической машине, и все устройства должны быть подключены к этой физической машине.

Прикладной уровень

  • Уровень приложения состоит из микросервисов, таких как stf-api, stf-app и stf-auth, которые образуют полную STF.
  • С точки зрения развертывания эти сервисы могут работать где угодно, единственное требование состоит в том, чтобы эти сервисы могли связываться с провайдером по сети, а это значит, что они должны находиться в одном сегменте сети.

Клиентский уровень

  • Реализовано с помощью AngularJS.
  • Связь с сервисом через websocket

1.3 Окружающая среда Строительство

Для сборки под Centos настоятельно рекомендуется использовать docker, поверьте, это однозначно самый лучший и простой способ.

(1) Установите службу докера

  • Входитьофициальный сайт докераЗагрузите соответствующий установочный пакет Docker для установки
  • Запустите версию докера из командной строки, чтобы проверить, прошла ли установка успешно.

(2) Используйте докер, чтобы вытащить файл изображения

  • Запустите службу докера
  • Извлеките файл образа докера
docker pull devicefarmer/stf:latest
docker pull sorccu/adb:latest
docker pull rethinkdb:latest
docker pull openstf/ambassador:latest
docker pull nginx:latest
  • Проверьте, успешно ли файл изображения извлекается через образы докеров.

(3) Запустите контейнер

  • Сначала запустите базу данных
docker run -d --name rethinkdb -v /srv/rethinkdb:/data --net host rethinkdb rethinkdb --bind all --cache-size 8192 --http-port 8090 
  • Перезапустите службу adb
docker run -d --name adbd --privileged -v /dev/bus/usb:/dev/bus/usb --net host sorccu/adb:latest
  • Наконец запустите stf
docker run -d --name stf --net host openstf/stf stf local --public-ip 宿主机IP地址

Обязательно обратите внимание на последовательность запуска, stf зависит от rethinkdb, поэтому сначала запустите rethinkdb и используйте: docker ps -a, чтобы проверить, успешен ли запуск, и, кстати, получить идентификатор контейнера stf.

(4) Запустите программу STF

  • Сначала войдите в каталог зеркала stf
docker exec -it stf的containerID /bin/sh
  • запустить команду стф
stf local --public-ip 宿主机IP地址 --allow-remote  

После запуска браузер LAN вводhttp://IP-адрес хоста: 7100Вы можете открыть интерфейс входа в STF, ввести адрес электронной почты учетной записи и войти в систему по своему желанию, но устройства пока нет.

(5) Подключите устройство

Поскольку это платформа, построенная в виртуальной среде Centos, устройство не может быть подключено напрямую, поэтому устройство подключается к компьютеру Windows в локальной сети для удаленного подключения, а порт adb открыт на компьютере без установленной STF (для собрать среду SDK) Рекомендуется использовать порт по умолчанию: 5037;

Укажите номер порта для связи с сервером:

adb -a -P 5037 fork-server server

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

Закройте adb.exe в диспетчере задач или используйте команду adb kill-server, чтобы закрыть программу adb, и повторно запустите указанную выше команду. Если выполнение по-прежнему не удается, рекомендуется перейти на более низкую версию adb (версия 1.0.32) и повторить попытку.

до тех пор, пока выполнение команды не отобразится нормально.

(6) Переключитесь в среду Centos, чтобы подключить мобильное устройство под Windows.

Введите в командной строке для запуска STF:

stf provider --name localhost.localdomain --min-port 7400 --max-port 7700 --connect-sub tcp://127.0.0.1:7114 --connect-push tcp://127.0.0.1:7116 --group-timeout 900 --public-ip 宿主机IP地址 --storage-url http://localhost:7100/ --adb-host 局域网windowsIP地址 --adb-port 5037 --vnc-initial-size 600x800 --mute-master never --allow-remote

Отображение информации о мобильном устройстве после успешного подключения:

Интерфейс списка устройств STF:

Интерфейс работы с оборудованием СТП:

1.4 Некоторые команды, которые могут использоваться в процессе

docker

docker start 容器名  #启动某个容器
docker stop 容器名   #停止某个容器
docker rm 容器名     #删除某个容器

linux

netstat -anp |grep 端口号   #查看端口占用
kill -9 对应端口PID        #删除进程

2. Создайте платформу управления мобильными устройствами на базе ATXServer2.

2.1 Базовое введение в ATXServer2

ATXServer2 — это фактически платформа управления устройствами, построенная на базе STF и использующая Python3+NodeJS+rethinkdb, по функциям похожа на STF, но может реализовать удаленное управление устройствами IOS.

Адрес гитхаба ATXServer2

2.2 Введение в принцип удаленного управления ATXServer2

Удаленное управление Android в основном основано на minicap+minitouch+atx-agent;

Удаленное управление IOS в основном основано на WebDriverAgent ветки appium.Поскольку appium добавляет сервер MJPEG к WDA, это делает возможной удаленную проекцию экрана. (Однако поддерживается только iOS 12.0 и выше)

2.3 Общая структура проекта ATXServer2

Общий проект в основном включает четыре части:

  • rethinkdb: облегченная база данных с открытым исходным кодом для хранения данных.адрес официального сайта rethinkdb
  • atxserver2: эта часть в основном отвечает за обработку данных, отображение интерфейса взаимодействия с пользователем и т. д., поэтому можно увидеть эффект только при запуске atxserver2.Когда он запущен, он будет доступен позже: IP: 4000 Вы можете увидеть веб-интерфейс.
  • atxserver2-android-provider: Эта часть представляет собой проект, который необходимо запустить при доступе к устройствам Android. Он в основном отвечает за взаимодействие между устройствами Android и платформой. Чтобы получить доступ к устройствам Android, этот проект необходимо запустить.
  • atxserver2-ios-provider: Эта часть представляет собой проект, который необходимо запустить при доступе к устройствам IOS. Он в основном отвечает за взаимодействие между устройствами IOS и платформой. Точно так же этот проект необходимо запустить для доступа к устройствам IOS. (Обратите внимание, что требуется компьютер MAC)

Структура проекта:

|-- static  静态目录
|-- temlates  前端界面
|-- web  网页代码
      |-- urls.py 路由整合文件
      |-- settings.py  配置文件
      |-- database.py  数据库操作相关
      |-- utils.py  常用配置
      |--views  每个界面的逻辑
        |--slave.py  与atxslave通信用
        |--devices.py  设备相关路由
        |--base.py  基于ReguestHandler的基类

И еще несколько папок:

  • Папка scripts: В основном содержит некоторые инструменты для отладки и разработки. Например, если вы хотите отлаживать проекты Android, вы можете запустить fake_android_provider.py и atxserver2-android-provider отдельно, и параметры в нем нужно изменить. вам не нужно уделять слишком много внимания этой папке. .

  • Папка примеров: хранится автоматизированная демонстрация. Используемая среда автоматизации — uiautomator2. Интерфейс занятости устройства относится к API openstf.

Все интерфейсы используют аутентификацию с помощью токена, и каждый запрос добавляет в заголовок Authorization: Bearer xxxxx-token-xxxx.Это значение токена можно получить в интерфейсе личной информации пользователя, а также сохранить в rethinkdb; Все интерфейсы вызываются через веб-запросы, которые можно вызывать с помощью инструмента «httpie» или непосредственно с помощью метода запроса Python.

Конкретный адрес доступа к документу API

2.4 Создание среды (здесь представлен метод ручного развертывания)

(1) Установите и запустите базу данных rethinkdb.

  • адрес загрузки и установки rethinkdb
  • Самый простой способ — извлечь файл образа докера, сначала запустить базу данных rethinkdb, а затем вернуться к описанному выше, чтобы просмотреть шаги.

(2) Скопируйте код на локальный

  • Сначала клонируйте код на локальный
git clone https://github.com/openatx/atxserver2.git
  • Установите зависимости, перейдите в корневой каталог для выполнения
pip3 install -r requirements.txt

(3) Старт

  • Запустите службу atxserver, войдите в каталог, где находится atx2, и выполните
python3 main.py
  • Установить прослушиваемый порт
python3 main.py --port 4000  # 默认监听的就是这个地址

После запуска открывается браузер локальной сети:http://host IP-адрес: 4000,После завершения аутентификации вы можете успешно увидеть страницу со списком устройств. Но все равно пусто, ничего.

(4) Доступ к устройству Android

Затем получите доступ к устройству Android. В настоящее время необходимо использовать другой проект atxserver2-android-provider, для этого проекта требуются Python3.6+ и NodeJS (на официальном сайте подчеркивается, что node должен использовать node8);

  • Сначала клонируйте код локально, я клонировал его на устройство Windows в той же локальной сети, учитывая, что его можно подключить к мобильному устройству.
git clone https://github.com/openatx/atxserver2-android-provider.git
  • Установите зависимости, перейдите в корневой каталог atxserver2-android-provider и выполните
pip3 install -r requirements.txt
  • Проверьте подключение мобильного устройства
adb devices
  • Запустите службу провайдера, чтобы подключиться к хосту, и войдите в корневой каталог atxserver2-android-provider для выполнения.
python main.py --server 宿主机IP地址:4000  

Провайдер может автоматически обнаруживать подключенные устройства через adb track-devices.При подключении телефона к компьютеру он автоматически установит на телефон minicap, minitouch, atx-agent, app-uiautomator-[test].apk, whatsinput-apk.

Введите в браузере IP-адрес хоста: 4000, чтобы получить доступ к системе управления устройствами ATX server2, список устройств отображается следующим образом:

Интерфейс управления устройством системы управления устройствами ATX server2:

3. Резюме

STF в основном использует JAVA, проект старый, обновление и сопровождение несколько медленные, автор находится за границей, общение неудобное, основной язык js, фреймворк относительно законченный и стереотипный, кроме того, он не поддержка удаленного подключения устройств Apple;

ATXserver2 в основном использует python3, автор находится в Китае, что удобно для общения, atxserver2 больше похож на движок ядра, некоторые нужные функции можно сделать своими руками и поддерживать удаленное подключение устройств Apple;

Основываясь на сравнении между STF и ATXserver2, мы, наконец, выбрали разработку на базе ATXserver2 и добавили некоторые функции, которых хотим достичь. Конечно, помимо наслаждения тенью под деревьями, посаженными нашими предшественниками, мы также должны стремиться к новым открытиям! С нетерпением ждем друзей, у которых есть идеи, чтобы присоединиться и внедрять инновации вместе!


PS: Для получения дополнительной технической галантереи, пожалуйста, обратите внимание на [Публичный аккаунт | xingzhe_ai] и обсудите с ходоками!