Atxserver2设备平台搭建(docker)
什么是openSTF?
OpenSTF(Smartphone Test Farm)是一个web端移动设备管理平台,可以从浏览器端远程调试、远程管理设备。其实有点类似于我们现在很火热的云测平台,如:testin、百度MTC等等。并且这个项目在Github上开源:https://github.com/openstf/stf, 遵循Apache License 2.0开源协议。很多公司内部团队现在都开始通过STF建设自己的平台。
先看看项目的运行效果截图(摘抄自
支持的功能
- Android 2.3 ~ Android 9.0 (IOS目前不支持)
- 手机不需要root
- 实时屏幕演示(刷新速率可达30-40fps)
- 远程控制(包括点击、输入数据、复制粘贴)
- 安装、卸载应用
- 执行shell命令
- 支持chrome远程调试工具
- 文件资源管理器访问设备文件系统
不使用openSTF原因:本地在mac上部署后(docker部署出现问题较多),使用Android10手机连接后,服务一起出现报错,查看报错结果得知,缺少Android 20,也就是不再支持Android10以上,如果需要支持Android10,需要引入升级版本 DevicesFarm,且目前来说,延迟较大,放弃此方向
Atxserver2介绍
转自:https://zhuanlan.zhihu.com/p/142228748
实现框架图
目前已支持的Feature
- [x] 使用Python重写服务端和客户端(Go语言写服务端速度有点慢,没有Python弄的快)
- [x] 网页控制手机提供更全的功能(原有的atx-server功能非常的少,只有操作手机和一个手机shell终端)
- [x] 支持USB设备的接入 (主要是为了提高稳定性)
- [x] 支持iOS设备 (这个功能的呼声一直很高)
- [x] 全面的REST API文档。(原来可能有,但是不全)
- [ ] 支持WIFI设备的接入(这个暂时还没搞完,不过很快了)
- [ ] 支持跨网段的设备接入 (假如有这个功能的话,感觉家里闲置的手机也能派上用场了)
远程控制原理简介
Android的远程控制主要还是基于 minicap+minitouch+atx-agent (不过感觉最近openstf的作者们,有点太忙了,没空管这个项目。之前adbkit有个bug,我提了一个pr,很久都没有收到回复。)我估计下个版本我就不用minicap+minitouch了。有个 scrcpy看起来不错,或许以后可以合并进来。
iOS的远程控制主要还是基于appium fork的WebDriverAgent。因为appium在WDA中增加了MJPEG Server,所以让远程投屏成为了可能。不过只支持iOS 12.0以上。
REST API接口
这个版本相比之前的atx-agent,有着更全面的权限控制。一旦你释放了设备,安卓或苹果的远程连接地址就会立刻换掉,防止平台上没有占用设备,但是却可能控制设备的事情发生。
See also: https://github.com/openatx/atxserver2/blob/master/API.md
项目地址和部署方法
https://github.com/openatx/atxserver2
目前这个版本提供了Docker的部署方式,可谓是简单快捷。一句docker run ...就可以运行起来。手机连接上去之后,就会自动安装需要的apk和二进制文件。如果需要支持iOS,可能步骤要多点,不要有很详细的步骤供参考。
因为大部分是Python写的,我想这个版本贡献代码的人应该会多起来吧。
Atxserver2部署(win10 docker)
docker部署
参考文档:https://zhuanlan.zhihu.com/p/397311465
解决win10启动docker 出现wls2错误:
https://blog.csdn.net/LeungSr/article/details/117900614
其他软件要求如下(安装教程自行百度):
- python3.6以上版本(建议使用python3.9.6,本人安装版本为python3.8)
- nodejs,必须是8的版本(建议使用v8.17.0,可以使用n模块切换和管理node版本号)
- git
github链接拉取源代码
- atxserver2 设备管理网站 https://github.com/openatx/atxserver2.git
- atxserver2-android-provider安卓手机连接助手 https://github.com/openatx/atxserver2-android-provider.git
atxserver2 搭建
- 进入atxserver2-master代码进入cmd后,执行命令"docker-compose up",构建镜像,构建成功后可关闭窗口,容器已在运行服务
- 安装依赖
代码根目录执行:pip install -r requirements.txt
- 检查服务
在浏览器输入 http://172.19.0.3:4000, 在输入用户名 admin(可自定义其他名称), 即可进入如下页面
android-provider启动
- 进入atxserver2-android-provider-master根目录,输入CMD进入命令行
安装依赖,执行命令:pip install -r requirements.txt
- 连接设备,并打开开发者模式
- 检查移动设备连接
adb devices
- 进入provider-master根目录,执行
python main.py --server 本机IP地址:4000 (本机地址可使用;127.0.0.1)
4.恭喜,搭建成功!!!
部署参考文档:
- https://blog.csdn.net/weixin_41693437/article/details/109379318?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162981320916780271581601%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162981320916780271581601&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-1-109379318.pc_search_result_control_group&utm_term=docker+%E9%83%A8%E7%BD%B2ATXserver2&spm=1018.2226.3001.4187
- https://zhuanlan.zhihu.com/p/358577464?utm_source=wechat_session&utm_medium=social&utm_oi=684053757415788544&utm_campaign=shareopn
常见问题
- 建议直接下载代码zip包,本地解压,克隆代码有文件出现编码字符集问题,如出现'r command not found 等错误
- 安装成功后,页面无法左右滑动
参考解决方案:https://www.cnblogs.com/ShineLeem/p/13785989.html
执行命令:
用Python 安装uiautomator2
pip install --pre -U uiautomator2 手机接到电脑上之后,需要先运行一下命令:
将需要的程序部署到手机上(一次即可)python -m uiautomator2 init
- 如果页面出现卡在如下页面,请重新安装一遍服务
4.出现报错:
Python3.8 tornado报错NotImplementedError
解决方案:(7条消息) Python3.8 tornado报错NotImplementedError_hehui1uu的博客-CSDN博客
https://blog.csdn.net/hehui1uu/article/details/117017616
修改文件路径:
C:\Users\13457\AppData\Local\Programs\Python\Python38\Lib\site-packages\tornado\platform
修改文件:asyncio.py
将第30行:import asyncio
替换为:
import platform if platform.system() == "Windows": import asyncio asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
5.修改文件:
1. android-provider-master package.json 修改加入 "private": true
{ "private": true, "dependencies": { "adbkit": "^2.11.1", "commander": "^2.19.0" } }
2.atxserver2-master Dockerfile ,第6行 需要从pip切换pip3,或者pip3切到pip
FROM python:3.6 ADD . /app WORKDIR /app RUN pip3 install -r requirements.txt ENTRYPOINT [ "bash", "scripts/wait-for-db.sh" ] CMD ["python", "-u", "main.py"]