UI自动化测试环境配置教程

项目位置

ATX-Test项目仓库路径:暂不开放

测试工具说明

Python 3.6+

编程语言版本均使用Python 3.6。所选UI测试框架不支持Python 3.6 以下版本。

adb

Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信。adb 命令便于执行各种设备操作(例如安装和调试应用),并提供对 Unix shell(可用来在设备上运行各种命令)的访问权限。

ChromeDriver

安卓手机从4.4+开始内置使用Chrome内核浏览器,自动化测试Web APP需要操作ChromeDriver来控制浏览器。操作ChromeDriver需要开发在测试APP中加入一行代码打开测试APP的DEBUG模式,或使用已root的手机强制打开DEBUG模式。微信等腾讯APP有专门的开启DEBUG模式的工具,可用于测试小程序。

ATX(Uiautomator2 & facebook-wda)

UI自动化测试主要框架选择 ATX

ATX原项目已停止维护,目前分为Android和IOS两个项目分别维护。因为没有IOS开发和测试环境,以下项目说明暂时以Android版 Uiautomator2 为基础。

注意:Android版本仅支持 4.4+

文档可参见各项目GitHub主页。

weditor

因为uiautomator是独占资源,所以当atx运行的时候uiautomatorviewer是不能用的,为了减少atx频繁的启停,需要使用基于浏览器技术的weditor UI查看器。

weditor用于查看APP控件等信息,提供了一个网页python代码编辑器,并可自动生成一些UI操作代码。

ATX-Server2

ATX-Server2用于进行多设备并行测试管理,同时支持Android和IOS。

atxserver2-android-provider

设备接入ATX-Server需要安装provider。Android测试设备使用atxserver2-android-provider

atxserver2-ios-provider

IOS设备如需连入ATX-Server,需要安装atxserver2-ios-provider

ATX-Test

ATX-Test是基于ATX-Server的UI自动化测试框架,可以实现多设备的并行测试,并生成统一的测试报告。

据说支持Android与IOS,目前只测试了Android设备可用,IOS设备未测试。

本次测试框架代码直接fork了此项目,做了一些改动以使其更适应测试业务。目前还未完全修改完成,正在一边写测试用例一边修改。

测试环境配置步骤

1. 安装Python依赖库

安装python3.6+后,使用requirements.txt下载需要安装的python依赖库。

# requirements内容
adbutils==0.6.2
anytree==2.7.2
apkutils==0.6.6
apkutils2==1.0.0
atomicwrites==1.3.0
attrs==19.3.0
certifi==2019.9.11
chardet==3.0.4
cigam==0.0.3
colorama==0.4.1
decorator==4.4.0
Deprecated==1.2.6
deprecation==2.0.7
facebook-wda==0.4.1
humanize==0.5.1
idna==2.8
imageio==2.6.1
importlib-metadata==0.23
Jinja2==2.10.3
logzero==1.5.0
lxml==4.4.1
MarkupSafe==1.1.1
more-itertools==7.2.0
numpy==1.17.3
packaging==19.2
Pillow==6.2.0
pluggy==0.13.0
progress==1.5
psutil==5.6.3
py==1.8.0
pyelftools==0.25
pyparsing==2.4.2
pytest==5.2.1
pywin32==225
requests==2.22.0
retry==0.9.2
selenium==3.141.0
six==1.12.0
TextWizard==0.0.3
tinydb==3.15.1
tornado==6.0.3
uiautomator2==2.0.1.dev3
urllib3==1.25.6
wcwidth==0.1.7
weditor==0.3.1
whichcraft==0.6.1
wrapt==1.11.2
xmltodict==0.12.0
zipp==0.6.0
pytest-html==2.0.0

将requirements.txt放置于到任意目录, 再在命令行界面输入以下命令:

cd [requirements.txt所在目录]
pip install -r requirements.txt

2. uiautomator2更新

安装完成后如果需要最新版本uiautomator2,可以使用以下命令升级

pip install --upgrade --pre uiautomator2

注: 如pip连接超时可以选择修改pip源为国内源。更换教程可自行搜索。
例如:

3. 创建weditor快捷方式

Windows系统可以使用命令在桌面创建一个快捷方式

python -m weditor --shortcut
  • 注:若Windows上提示,需要安装对应python版本的pywin32,例如python3.6的pywin32为pywin32-221.win-amd64-py3.6.exe。pywin32各种版本的下载方法

4. 安装adb(Windows)

如果Windows系统机器此前未安装过adb(或android SDK),需要下载ADB.zip,将其解压到任意路径,并将该路径设置PATH环境变量。可参考Android ADB超简单的安装教程
在命令行界面输入adb,看见如图所示一长串输出即说明安装成功。

5. 下载测试手机对应的Chrome WebDriver

查看测试手机的 设置 -> 应用 -> 应用管理 -> Android System WebView(部分手机需要打开显示系统进程才能看见)查看ChromeDriver版本信息,如图所示。

淘宝ChromeDriver镜像站中找到自己浏览器WebView版本对应的ChromeDriver,下载后存放在测试代码根目录下chromedriver文件夹中并按照版本号命名,如图所示。
注:如果所用版本和chromedriver文件夹已有的版本一致则不需要做这一步。

6. 安装provider

如果不需要连接设备管理页面做统一测试,也可以跳过这一步,直接使用python -m uiautomator2 init来初始化设备。

此项目安装在测试主机上,用于连接需要测试的设备。provider启动成功后,测试设备使用USB或WiFi ADB连接测试主机,测试设备连入主机后Provider可以通过adb track-devices自动发现已经接入的设备,并在手机接入到电脑上时,自动给手机安装minicap, minitouch, atx-agent, app-uiautomator-[test].apk, whatsinput-apk。

atxserver2-android-provider

  • Install with docker(适用Linux)

推荐用这种方式部署,命令有点长,但是部署简单

如果你还没有安装docker,并且你用的是Linux,有一个很简单的命令就可以一键安装上去。

curl -fsSL https://get.docker.com | sh

使用dockerhub上的image(当前有Linux/amd64和Linux/arm的镜像)

SERVER_URL="http://10.0.0.1:4000" # 这个修改成自己的atxserver2地址
IMAGE="codeskyblue/atxserver2-android-provider"
docker pull $IMAGE
docker run --rm --privileged -v /dev/bus/usb:/dev/bus/usb --net host \
    ${IMAGE} python main.py --server ${SERVER_URL}
  • Install from source (Mac, Windows推荐)

依赖 Python3.6+, NodeJS 8

NodeJS版本太高了也不行,一定要NodeJS 8,推荐使用nvm(Windows / Linux)管理node版本。如未安装其他NodeJS版本,也可以直接下载NodeJS 8安装。nodejs8安装后可能需要手动设置node和npm的环境变量。

# Clone代码到本地
git clone https://github.com/openatx/atxserver2-android-provider

# 进入atxserver2-android-provider目录
cd atxserver2-android-provider

# 安装依赖
npm install

# 启动,需要指定atxserver2的地址
python main.py --server 192.168.31.143:4000

接入的移动设备需要配置好开发者选项, 打开USB调试,不同设备的设置方案放到了该项目的Issue中。

  • 命令行参数

-- --port 本地监听的端口号,默认4000
-- --server atxserver2的地址,默认localhost:4000
-- --allow-remote 允许远程设备,默认会忽略类似10.0.0.1:5555的设备
-- --owner 邮箱地址或用户所在Group名,如果设置了,默认连接的设备都为私有设备,只有owner或管理员账号能看到

atxserver2-ios-provider

暂无。请参考atxserver2-ios-provider

5. git clone UI自动测试框架代码

ATX-Test项目仓库路径:项目地址(暂不开放)
需要找VSTS管理员创建账号,加入Auto-Test项目权限。

可以使用HTTP方式 SSH方式clone代码。

# 使用http方式clone
git clone 项目地址(暂不开放)

# 使用SSH方式clone
git clone git@ssh.dev.azure.com:v3/JL-AutoTest/ATX-Test/ATX-Test

使用SSH方式需要先在自己电脑上创建ssh秘钥,并将秘钥设置到VSTS账号中。

设置SSH秘钥

教程是gitlab的,VSTS类似。

6. 测试准备完成

之后测试环境就安装完成了。将测试设备(手机)使用USB或WiFi通过adb连入安装了atxserver2-android-provider的主机,即可连入ATX-Server,并自动安装所需ATX-agent等控制插件,之后即可运行测试代码进行测试。

注意手机端连接provider需要打开开发者模式(开发人员选项)-> USB调试。手机USB调试打开并连入主机时需要选择传输文件选项,如选择仅充电需要打开仅充电模式下允许ADB调试。如有必要,还可以在测试手机上选择关闭连接USB时总是弹出提示监控ADB安装应用(可能存在安全风险,平时建议关闭)。如无法成功安装测试apk或无法运行测试代码,可能是手机有其他权限要求选项,比如允许USB安装应用允许USB调试模拟点击等,都需要酌情开启。由于手机型号差异选项可能不同,需要自己查看及尝试。

UI测试框架文档及运行方式后续将另外以文档方式阐述。

7. 测试启动流程

  1. 测试手机设置好开发者选项中的对应设置
  2. 测试主机上启动provider
  3. 测试手机连接测试主机,等待provider连接成功,并向手机推送控制app
  4. 修改测试代码config.ini需要修改的参数
  5. 运行测试代码 python [你的路径]\ATX-Test\TestSuite_XXX\run_cases.py

8. 启动问题及解决

  • 如运行测试时启动uiautomator2失败,可USB连接主机后重新手动初始化一次。
# init 所有的已经连接到电脑的设备
python -m uiautomator2 init
  • 如运行provider的计算机重启或provider意外关闭,需要重新运行provider以支持连接。(atxserver2-ios-provider暂无教程。请参考atxserver2-ios-provider
# 进入atxserver2-android-provider目录
cd atxserver2-android-provider

# 启动,需要指定atxserver2的地址
python main.py --server 192.168.31.143:4000
  • 如意外在连接provider时未成功安装手机端所需控制apk,可以重新插拔一次USB使手机重新连接provider尝试自动安装,在连接USB时使用以下命令手动初始化
# init 所有的已经连接到电脑的设备
python -m uiautomator2 init
  • 如果手机USB连接provider无反应,需要打开开发者模式(开发人员选项)-> USB调试。手机USB调试打开并连入主机时需要选择传输文件选项,如选择仅充电需要打开仅充电模式下允许ADB调试。如有必要,还可以在测试手机上选择 关闭 连接USB时总是弹出提示监控ADB安装应用(关闭这两项可能存在安全风险,平时不测试时建议开启)。
    如找不到开发者模式(开发人员选项),需要在手机设置中打开关于手机(或类似项),找到该手机系统版本号,连续多次点击该版本号直到提示开发者模式(开发人员选项)已打开,此时设置中即可找到开发者模式(开发人员选项)
    如仍未成功安装apk或运行测试代码失败,可能是手机有其他权限要求选项,比如允许USB安装应用允许USB调试模拟点击等,都需要酌情开启。由于手机型号差异选项可能不同,需要自己查看及尝试。

  • 如图所示提示 adb device still connecting,可能有多种原因造成,可以使用以下几种方法尝试解决:

  1. 如果连接的接口协议是USB3.0,尝试换成USB2.0
  2. 关闭手机端USB调试,再次打开重新连接
  3. adb服务启动异常,尝试重启服务
adb kill-server
adb start-server
posted @ 2021-03-04 17:43  猫呢家养乌贼Alkaid  阅读(531)  评论(0)    收藏  举报