前言
如果大家对于移动端UI自动化比较了解的话,都应该知道几个主流框架,Appium、Airtest、Macaca.这些框架都有一个共同点,必须手机插在电脑上.当然有些也可以使用WIFI连接电脑,但是目前使用USB方式连接电脑是最稳定的.
我们公司跑自动化是macpro笔记本,插上这种USB转接头,一个USB大概能带3到4台机器.如果太多了以后,就会出现USB供电不足的情况,手机不在充电状态.
image
其实当时看了一些解决方案,使用有独立供电的USB HUB,但是公司采购申请不下.
image
另外的方案就是现在的多节点运行,Android和iOS分布在两台jenkins节点中运行,降低单台电脑的功耗.但是如果以后测试设备增加的话,这个方案成本太大.
有幸之前了解过"树莓派"也是可以运行Linux系统,只要是Linux系统,理论上就可以安装adb、appium等软件.
另外"树莓派"虽然体积小,但是功耗低并且价格便宜.如果使用"树莓派"作为自动化节点机,分布式执行自动化测试的方案应该是可行的.
关于树莓派
请阅读树莓派入门这篇文章,先对树莓派有一定的了解.
环境准备
安装node
如下这种方式,是一键命令行安装,非常简单
代码语言:javascript复制curl -sL https://deb.nodesource.com/setup_11.x | sudo -E bash -
sudo apt-get install -y nodejs
设置npm淘宝镜像
设置淘宝镜像,目的是提升下载安装速速
代码语言:javascript复制npm install -g cnpm --registry=https://registry.npm.taobao.org
npm config set registry https://registry.npm.taobao.org
python3
使用python3来执行脚本
代码语言:javascript复制sudo apt-get install python3
安装lrzszp
Liunx上传和下载文件命令行工具
代码语言:javascript复制sudo apt-get install lrzsz
adb
我们这次是运行的Android自动化测试,自动化框架在底层都会调用adb工具.
由于安装的树莓派是arm32位,直接下载的adb是不能用,找一个32位的adb二进制文件.
代码语言:javascript复制https://github.com/NetEaseGame/AutomatorX/releases/tag/1.0.12
image
赋予权限
代码语言:javascript复制mv /usr/local/bin
sudo chown root:root /usr/local/bin/adb
sudo chmod 0755 /usr/local/bin/adb
sudo chmod s /usr/local/bin/adb
android环境
下载Linux平台的sdk
代码语言:javascript复制wget http://dl.google.com/android/android-sdk_r24.2-linux.tgz
tar -zxvf android-sdk_r24.2-linux.tgz
mv android-sdk-linux /usr/local/Android-SDK
tools/android update sdk --no-ui
这个错误是找不到swt.jar,这个jar包是一个图形化界面库
image
image
image
解决方法:
代码语言:javascript复制sudo apt install libswt-gtk-3-java
https://packages.debian.org/stretch/armhf/libswt-gtk-3-jni/download
/usr/share/java
cp swt-gtk-3.8.jar /usr/local/Android-SDK/tools/lib/arm
cp swt.jar /usr/local/Android-SDK/tools/lib/arm
再执行如下命令,就可以更新相关工具包了
代码语言:javascript复制tools/android update sdk --no-ui
image
appium
如果安装不需要chromedriver,安装的时候可以通过命令行跳过
代码语言:javascript复制
sudo npm install appium --chromedriver-skip-install --registry=https://registry.npm.taobao.org
)
安装appium-doctor来检查环境
代码语言:javascript复制npm install appium-doctor -g
脚本代码
脚本代码是基于python3写的,就是启动app就可以了,主要是验证appium是否可以运行成功.
源码地址:
代码语言:javascript复制https://github.com/xinxi1990/python_appium_demo.git
jenkins
master机器
jenkins分为master机器和slave机器.
准备在我的mac笔记本作为master机器,使用war包启动即可.
代码语言:javascript复制java -jar /usr/local/Cellar/jenkins/2.186/libexec/jenkins.war
设置jenkins url地址,默认的是127.0.0.1
image
slave机器
slave机器也就是树莓派机器,也是使用jar包启动.
image
启动节点命令:
代码语言:javascript复制java -jar agent.jar -jnlpUrl http://192.168.1.104:8080/computer/raspberrypi/slave-agent.jnlp -secret ed2d0877fd55d575f58cfa0fc9d5b8c97b76d2caaa928dc0af859e9307586f37
image
启动完成后,可以看到slave节点已经连接成功了
image
关于slave节点的功耗,可以看出还有一些剩余内存.
image
image
脚本运行
命令行执行
代码语言:javascript复制git clone https://github.com/xinxi1990/python_appium_demo.git
cd python_appium_demo & python3 run.py
在通过脚本执行后,出现如下问题
image
提示zipalign执行有问题,单个执行zipalign工具的确有问题.可能是sdk下载版本和系统不兼容.
解决方案如下:
代码语言:javascript复制sudo apt-get install zipalign
which zipalign
cp /usr/bin/zipalign /usr/local/Android-SDK/platform-tools
再执行脚本运行成功,到此证明树莓派的确可以执行自动化脚本.
image
jenkins创建任务
在jenkins上创建任务,在树莓派上运行.
image
image
jenkins配置多个任务达到并发执行效果
image
并发任务配置触发下游任务完成并发执行
image
并发任务配置
image
构建队列中有两个任务
image
结语
经过一番折腾,树莓派的确是可以跑自动化测试,但是我用树莓派3B内存仅1G,如果真想玩的话,建议入手树莓派4B性能和内存都有所提升.
下次继续介绍在树莓派上搭建个人博客,还请继续关注.