1,场景

在 app 测试的蛮荒时代,如果要进行 app 自动化测试非常麻烦。张大胖如果想做安卓自动化测试,首先必须要学 Java。因为安卓自动化测试都绕不开 google 自己研发的自动化测试框架,于是张大胖哼哧哼哧开始学 java,开始上手 UiAutomator 做自动化测试。2 周过去了,张大胖开始向王哥抱怨:

python uiautomator,比 appium 更简单的 app 测试工具-LMLPHP

王哥一看他的代码,demo 都还没跑起来,再让他玩下去,公司都倒闭了。于是王哥给张大胖推荐了一个工具叫 appium, 这个工具强就强在跨平台,跨语言,还开源。张大胖之前学过半个月 python, 搞这个问题应该不大。

过了一天,张大胖果然兴冲冲的跑过来,高兴的说流程跑通了。appium 这玩意真不错,就是有一个不好的地方,通过代码查找 app 上的元素经常要嵌套 java 代码,而且要带上一长串的设备信息。

王哥又给张大胖推荐了一个工具,这个工具叫 python uiautomator。它可以在手机上装一个 http rpc 服务,你可以通过其他语言作为客户端去远程调用 uiautomator 的接口。这个库解决了原始 uiautomator 的 2 个问题:

  • 必须要会 Java 代码
  • 脚本要传到设备上才能运行

他的原理图类似于这样:

python uiautomator,比 appium 更简单的 app 测试工具-LMLPHP

而相比 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 一键启动,直接弹出图形化界面。

python uiautomator,比 appium 更简单的 app 测试工具-LMLPHP

weditor 的优势在于:

  • 可以同时管理多个设备;
  • 直接在调试界面操作手机,不需要另一只手去动手机;
  • 自动生成 uiautotor 代码。

5,总结

本篇介绍了非常简单的 uiautomator 使用,总结一下它的优势:

  • 不用会 java, 也可以体验原生测试的“快”感;
  • api 封装异常简单,符合 python 的优雅性格;
  • 上手迅速,略懂 python,就可以玩转。

不聊了,这么好用的工具,我要赶紧回去吃透它。

11-08 21:40