分享

基于ATX的安卓自动化测试实践

 wenxuefeng360 2022-11-07 发布于四川

ATX是包含了设备管理、基于web的控件分析和使用Python编写测试的一整套相对成熟的自动化解决方式。

由于包含的控件较多,梳理下方便学习和应用。

1 ATX介绍

大致经历了以下阶段:

  1. adb服务的HTTP接口封装
  2. openstf 的Go重写:atx-server
  3. atx-agent的开发,支持设备无线连接
  4. atx-server2:Python重写

各主要组件的分工如下:

1.1 atx-agent

目的:屏蔽安卓机差异,提供统一的HTTP接口供uiautomator2调用。支持WiFi连接

  • Go开发
  • 日志文件: /sdcard/atx-agent.log
adb push atx-agent /data/local/tmp
adb shell chmod 755 /data/local/tmp/atx-agent
# 启动常驻模式, 默认端口 7912
adb shell /data/local/tmp/atx-agent server -d

1.2 uiautomator2

UI自动化的python实现。分为2部分:

  • python客户端:向移动设备发送HTTP请求
  • 移动设备:运行封装了uiautomator2的HTTP服务,解析请求并执行

注:iOS的支持是通过facebook-wda库。

1.2.1 命令行使用

uiautomator2 --help

# 安装设备端需要的应用
# minicap, minitouch
# atx-agent
# uiautomator-v2 (uiautomator-server)
uiautomator2 init

# 当前应用
uiautomator2 current

# 截屏
uiautomator2 screenshot

1.2.2 python接口

具体使用文档参考 uiautomator2.

  • Shell命令

  • Key Events

  • Selector

  • 支持for 循环

  • 支持部分执行调试

import uiautomator2 as u2
# 支持USB或WiFi连接
d = u2.connect('your_device_ip')
d = u2.connect_usb('your_device_sn')


# Key Events
d.screen_on()   # turn on/off
d.info.get('screenOn')  # 当前屏幕状态
d.press("home")
d.unlock()  # unlock screen
d.swipe_ext("up")

# 等待某元素出现
d(text="Settings").wait(timeout=3.0)  # 返回布尔值,默认超时20s


# 弹窗处理
d.xpath.when(...).click(...)

d.xpath.watch_backgroud()

1.3 atxserver2

设备管理平台的服务端,默认地址为http://localhost:4000

其他组件:

  • 安卓Provider (连接设备的机器)
  • 客户端 atxserver2-python-client
rethinkdb --bind all &
export RDB_HOST=192.168.0.5
export RDB_PORT=28015
export RDB_USER=admin
export RDB_PASSWD=
export RDB_DBNAME=atxserver2
python3 main.py

1.4 adbutils

adb交互库,官方adb shell的封装,支持cli或python接口调用。

python -m adbutils -i *.apk    # 支持远程文件存储

1.5 weditor

基于web的图层分析,类似于安卓自带的uiautomator viewer。

# 启动
python -m weditor
# 会打开 http://localhost:17310/

1.6 其他辅助

下面两个工具来自开源的STF,基于C++开发,性能更好。也是基于web管理的基础组件。

  • minicap :实时屏幕投屏/截图
  • minitouch :实时设备控制

2 使用

2.1 环境部署

# 1. 启动RethinkDB
docker run -it -p 28015:28015 d863
# 2. 启动android-provider
python main.py --server localhost:4000
# 3. 启动weditor
# python -m weditor
# 4. 启动atxserver2
python main.py

2.2 启动日志

atxserver2

PS D:\coding\github\atxserver2> python main.py
Namespace(auth='simple', auth_conf_file=None, debug=False, no_xheaders=False, port=4000)
[I 201026 10:39:28 main:70] listen on port http://10.100.251.46:4000
[I 201026 10:39:28 web:2161] 101 GET /websocket/heartbeat (::1) 0.00ms
[I 201026 10:39:28 provider:42] new websocket connected: ::1
[D 201026 10:39:29 provider:79] A new provider is online pyclient ID:78601648-1734-11eb-a063-f48e388155ad

android-provider

PS D:\coding\github\atxserver2-android-provider> python main.py --server localhost:4000
[I 201026 10:38:04 main:299] Owner: None
[I 201026 10:38:04 main:314] ProviderURL: http://10.100.251.46:3500
>>> Bundle atx-agent verison: 0.9.5
Downloading atx-agent-386.tar.gz 4453385 / 4453385 [Done]
Downloading atx-agent-amd64.tar.gz 4632088 / 4632088 [Done]
Downloading atx-agent-armv6.tar.gz 4353956 / 4353956 [Done]
Downloading atx-agent-armv7.tar.gz 4348419 / 4348419 [Done]
>>> Zip created vendor/atx-agent-0.9.5.zip
>>> app-uiautomator.apk verison: 2.3.1
Downloading app-uiautomator.apk 2165152 / 2165152 [Done]
>>> app-uiautomator-test.apk verison: 2.3.1
Downloading app-uiautomator-test.apk 1212676 / 1212676 [Done]
Downloading WhatsInput-1.0.apk 265471 / 265471 [Done]
Downloading stf-binaries-0.2.1.zip 5400734 / 5400734 [Done]
[W 201026 10:38:18 heartbeat:121] WS connect error: [Errno 10061] Unknown error, reconnect after 2s

3 参考

3.1 ATX作者文章

3.2 官方网站

3.3 其他

  • scrcpy :minitouch替代方案

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多