python uiautomator,比 appium 更简单的 app 测试工具
1,场景
在 app 测试的蛮荒时代,如果要进行 app 自动化测试非常麻烦。张大胖如果想做安卓自动化测试,首先必须要学 Java。因为安卓自动化测试都绕不开 google 自己研发的自动化测试框架,于是张大胖哼哧哼哧开始学 java,开始上手 UiAutomator 做自动化测试。2 周过去了,张大胖开始向王哥抱怨:
王哥一看他的代码,demo 都还没跑起来,再让他玩下去,公司都倒闭了。于是王哥给张大胖推荐了一个工具叫 appium, 这个工具强就强在跨平台,跨语言,还开源。张大胖之前学过半个月 python, 搞这个问题应该不大。
过了一天,张大胖果然兴冲冲的跑过来,高兴的说流程跑通了。appium 这玩意真不错,就是有一个不好的地方,通过代码查找 app 上的元素经常要嵌套 java 代码,而且要带上一长串的设备信息。
王哥又给张大胖推荐了一个工具,这个工具叫 python uiautomator。它可以在手机上装一个 http rpc 服务,你可以通过其他语言作为客户端去远程调用 uiautomator 的接口。这个库解决了原始 uiautomator 的 2 个问题:
- 必须要会 Java 代码
- 脚本要传到设备上才能运行
他的原理图类似于这样:
而相比 appium, 这个工具封装的 api 更加简洁,使用起来更加高效。张大胖马上回去研究了一下,15 分钟就把流程跑通了,当天就请王哥搓了顿小龙虾。有了这么好用的工具,张大胖赶紧回来写笔记。
2,安装
安装不要太简单,一行命令搞定。相比 appium 要装的各种依赖,简直不要太幸福。安装好以后,连接手机,输入 adb devices 指令,确认手机连接成功,轻松完成。
# 官方下载安装
pip install automator2
如果官方站点无法访问,可以访问豆瓣源下载:
pip install -i https://pypi.doubanio.com/si
mple/ uiautomator2
3,快速使用
手工怎么测,这个工具的流程完全一样,省心省力,一行多余的代码都没有。而使用 appium 的时候,张大胖为了写长长的 desired capabilities 不知消耗了多少脑细胞。
1, 连接设备;
2, 启动app;
3, 元素定位;
4,元素操作;
5,关闭 app。
import uiautomator2
# 连接手机
d = uiautomator2.connect()
# 启动app
d.app_start("com.lemon.lemonban")
# 定位元素
my = d(resourceId='com.lemon.lemonban:id/navigation_my')
# 操作元素
my.click()
# 关闭 app
d.app_stop("com.lemon.lemonban")
相同版本的 appium 代码,对比了解一下:
from appium.webdriver import Remote
caps = {
"platformName": "Android",
"platformVersion": "5.1",
"deviceName": "Android Emulator",
# "app": r"D:\Program Files\adt-bundle-windows-x86_64-20140702\sdk\build-tools\28.0.3\Future-release-2018.apk.apk",
"appActivity": "com.lemon.lemonban.activity.addition.WelcomeActivity",
"appPackage": "com.lemon.lemonbano",
"noReset": "False",
}
# 连接手机
driver = Remote(desired_capabilities=caps)
# 定位
my = driver.find_element_by_id('com.lemon.lemonban:id/navigation_my')
my.click()
# 退出
driver.quit()
做一个简单的对比, python 版的 uiautomator 具有如下优势:
- 连接手机的时候可以省去大段信息
- 元素定位直接采用更加优雅的
__call__()
机制,不需要调函数名称,而是通过关键字参数的形式直接完成元素定位。 - 将 app 作为一个管理单元(session),会有更大的灵活性。
- 这里还不包括更加灵活的等待和 watcher 机制。
4,使用 weditor 工具查看元素定位
为了更加方便的进行元素定位,可以使用 weditor 辅助获取元素定位表达式,如果不想用,也可以用 uiautomatorviewer 等原生安卓辅助工具。
安装 weditor, 你懂的 pip install weditor。 安装完成后命令行输入 weditor 一键启动,直接弹出图形化界面。
weditor 的优势在于:
- 可以同时管理多个设备;
- 直接在调试界面操作手机,不需要另一只手去动手机;
- 自动生成 uiautotor 代码。
5,总结
本篇介绍了非常简单的 uiautomator 使用,总结一下它的优势:
- 不用会 java, 也可以体验原生测试的“快”感;
- api 封装异常简单,符合 python 的优雅性格;
- 上手迅速,略懂 python,就可以玩转。
不聊了,这么好用的工具,我要赶紧回去吃透它。