Appium 树莓派搭建 UI 自动化环境

xinxi · 2021年02月21日 · 最后由 xinxi 回复于 2021年02月22日 · 4747 次阅读

前言

如果大家对于移动端 UI 自动化比较了解的话,都应该知道几个主流框架,Appium、Airtest、Macaca.这些框架都有一个共同点,必须手机插在电脑上.当然有些也可以使用 WIFI 连接电脑,但是目前使用 USB 方式连接电脑是最稳定的.

我们公司跑自动化是 macpro 笔记本,插上这种 USB 转接头,一个 USB 大概能带 3 到 4 台机器.如果太多了以后,就会出现 USB 供电不足的情况,手机不在充电状态.

image

其实当时看了一些解决方案,使用有独立供电的 USB HUB,但是公司采购申请不下.

image

另外的方案就是现在的多节点运行,Android 和 iOS 分布在两台 jenkins 节点中运行,降低单台电脑的功耗.但是如果以后测试设备增加的话,这个方案成本太大.

有幸之前了解过"树莓派"也是可以运行 Linux 系统,只要是行 Linux 系统,理论上就可以安装 adb、appium 等软件.

另外"树莓派"虽然体积小,但是功耗低并且价格便宜.如果使用"树莓派"作为自动化节点机,分布式执行自动化测试的方案应该是可行的.

关于树莓派

请阅读树莓派入门这篇文章,先对树莓派有一定的了解.

环境准备

安装 node

如下这种方式,是一键命令行安装,非常简单

curl -sL https://deb.nodesource.com/setup_11.x | sudo -E bash -

sudo apt-get install -y nodejs

设置 npm 淘宝镜像

设置淘宝镜像,目的是提升下载安装速速

npm install -g cnpm --registry=https://registry.npm.taobao.org

npm config set registry https://registry.npm.taobao.org

python3

使用 python3 来执行脚本

sudo apt-get install python3

安装 lrzszp

Liunx 上传和下载文件命令行工具

sudo apt-get install lrzsz

adb

我们这次是运行的 Android 自动化测试,自动化框架在底层都会调用 adb 工具.

由于安装的树莓派是 arm32 位,直接下载的 adb 是不能用,找一个 32 位的 adb 二进制文件.

https://github.com/NetEaseGame/AutomatorX/releases/tag/1.0.12

image

赋予权限

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

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

解决方法:

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

image

appium

如果安装不需要 chromedriver,安装的时候可以通过命令行跳过


sudo npm install appium --chromedriver-skip-install --registry=https://registry.npm.taobao.org

image)

安装 appium-doctor 来检查环境

npm install appium-doctor -g

脚本代码

脚本代码是基于 python3 写的,就是启动 app 就可以了,主要是验证 appium 是否可以运行成功.

源码地址:

https://github.com/xinxi1990/python_appium_demo.git

jenkins

master 机器

jenkins 分为 master 机器和 slave 机器.

准备在我的 mac 笔记本作为 master 机器,使用 war 包启动即可.

java -jar /usr/local/Cellar/jenkins/2.186/libexec/jenkins.war

设置 jenkins url 地址,默认的是 127.0.0.1

image

slave 机器

slave 机器也就是树莓派机器,也是使用 jar 包启动.

image

启动节点命令:

java -jar agent.jar -jnlpUrl http://192.168.1.104:8080/computer/raspberrypi/slave-agent.jnlp -secret ed2d0877fd55d575f58cfa0fc9d5b8c97b76d2caaa928dc0af859e9307586f37

image

启动完成后,可以看到 slave 节点已经连接成功了

image

关于 slave 节点的功耗,可以看出还有一些剩余内存.

image

image

脚本运行

命令行执行

git clone https://github.com/xinxi1990/python_appium_demo.git

cd python_appium_demo & python3 run.py

在通过脚本执行后,出现如下问题

image

提示 zipalign 执行有问题,单个执行 zipalign 工具的确有问题.可能是 sdk 下载版本和系统不兼容.

解决方案如下:

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 性能和内存都有所提升.

下次继续介绍在树莓派上搭建个人博客,还请继续关注.

共收到 6 条回复 时间 点赞

厉害!

赞一个。同时想问下,树莓派大概能支持连多少台手机?我们这边也有类似的问题,app 自动化测试要跑多台机器,然而我们没有什么多余的 PC 可用。

iOS 也可以在树莓派上被支持的。你瞅瞅这个项目 tidevice

codeskyblue 回复

iOS 不需要 xcode 编译什么的吗?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册