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