Эта статья была впервые опубликована на:Уокер ИИ
Основной бизнес компании включает игровой ИИ и автоматизированное тестирование.Нашей команде ИИ необходимо использовать мобильные устройства для постоянного отслеживания и оптимизации производительности роботов ИИ в игре.Команда автоматического тестирования также работает над разработкой автоматизированного тестирования пользовательского интерфейса для игр. Движение, оба необходимы для использования мобильных устройств.
Из-за ограниченности ресурсов мобильных устройств часты взаимные кредиты и забывание их возвращать. Чтобы решить проблемы управления и вызова, мы провели углубленное исследование и, наконец, узнали, что для решения проблемы можно использовать платформу с открытым исходным кодом STF или ATXServer2, чтобы максимизировать производительность ограниченных ресурсов. Ниже приводится краткое введение в создание платформы управления мобильными устройствами с помощью этих двух методов, и в то же время проводится простое сравнение, которое вы можете выбрать в соответствии с бизнес-ситуацией компании.
1. Создайте платформу управления мобильными устройствами на основе STF.
1.1 Введение STF и анализ преимуществ и недостатков
- STF — это самая ранняя платформа для удаленной отладки реальных машин, и теперь вся удаленная отладка реальных машин основана на ее идее реализации.
- адрес 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.
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] и обсудите с ходоками!