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,就可以玩转。

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

python uiautomator,比 appium 更简单的 app 测试工具的更多相关文章

  1. App测试工具大全,收藏这篇就够了

    随着移动互联网的高速发展,App 应用非常火,测试工程师也会接触到各种 app 应用.除了人工测试之外,也可以通过一些测试工具来提高我们的测试效率,以下对于我用过或听过的 app 测试工具做了一个统一 ...

  2. Android App 测试工具及知识大集合

    简介: 作者从事测试将近11年,有8年的团队管理经验,经历了上市公司,外包,日企,股份制公司的企业文化洗礼,擅长测试团队的组建,流程建立,改造,质量体系建建设,有三次经历在不同企业文化从"0 ...

  3. gulp:更简单的自动化构建工具

    目前最流行的两种使用JavaScript开发的构建工具是Grunt和Gulp.为什么使用gulp?因为Gulp更简单.Grunt任务拥有大量的配置,会引用大量你实际上并不需要的对象属性,但是Gulp里 ...

  4. APP测试工具与技术

    AndroidDevTools Android Dev Tools官网地址:www.androiddevtools.cn 收集整理Android开发所需的Android SDK.开发中用到的工具.An ...

  5. 几个移动App测试工具

    介绍几款移动App测试的工具: 腾讯测试:http://bugly.qq.com/优测:http://utest.qq.com/fir.im测试:http://bughd.com/ 大致介绍如下: b ...

  6. App测试工具

    1.App性能测试与安全测试工具 性能测试工具:Itest(众测平台) 安全测试:Utest

  7. 简单的并发测试工具 ab.exe ab.zip可下载 -摘自网络

    ab.exe是一个性能检测工具,是apache server中的一个小组件,使用简单,方便    下载地址:http://files.cnblogs.com/files/gossip/ab.zip   ...

  8. App测试工具选择

    一.功能测试自动化 a) 轻量接口自动化测试: jmeter, b) APP UI层面的自动化 android:UI Automator Viewer,Android Junit,Instrument ...

  9. 测评:华为最新移动应用/APP测试工具MobileTest

    一.目前移动应用/App的测试痛点及可选方案 移动互联网市场进入下半场,同质化竞争激烈,平均获客成本增加.屏幕不适配.闪退.无响应.UI异常等兼容性问题严重影响用户体验,影响用户转化率和用户粘性.如何 ...

随机推荐

  1. .Net Core 商城微服务项目系列(十四):分布式部署携程Apollo构建配置中心

    一.开场白 在系统设计里我们有很多配置希望独立于系统之外,而又能够被系统实时读取.但是在传统的系统设计里,配置信息通常是耦合在系统内的,比如.net里通常会放在App.config或者web.conf ...

  2. Vue-cli连接mysql

    本文把前后台一起串起来,前端使用vue-cli后台用nodejs连接数据库,vue-cli请求接口其数据是来自于mysql数据. 一.vue-cli请求接口部分 <template> &l ...

  3. php一行代码获取本周一,本周日,上周一,上周日,本月一日,本月最后一日,上月一日,上月最后一日日期

    <?php //本周一 echo date('Y-m-d', (time() - ((date('w') == 0 ? 7 : date('w')) - 1) * 24 * 3600)); // ...

  4. 正则表达式在Java中使用

    正则表达式 定义 用一组特殊的字符来描述一组字符串的格式 用于验证字符串是否满足格式 不关心字符串的内容是否有效 1. 基本正则表达式所谓正则表达式就是使用一系列预定义的特殊字符来描述一个字符串的格式 ...

  5. Python3 学习笔记之 类型/运算符

    类型/运算符: 类型: 整数 字符串 浮点数 布尔类型 类型转换: 检查类型: 算术操作符: 逻辑操作符: 优先级:

  6. MongoDB 学习笔记之 group聚合

    group聚合: key: 分组字段 cond:过滤条件 reduce: curr是当前行 result是每组的结果集 initial : 组变量初始值 finalize: 统计一组后的回调函数 用g ...

  7. MongoDB 学习笔记之 手动预先分片

    手动预先分片: 目的:手动预先分片是为了防止未来chunk的移动,减少IO. sh.shardCollection("shop.users",{"userId" ...

  8. Linux虚拟机中配置JDK环境变量(Ubuntu系统)

    首先通过Xshell中文件传输想你的虚拟机上传你的jdk,如图所示:(需要本机安装Xftp:链接: https://pan.baidu.com/s/1sWHmywZ2C6V2n4aa1FqqFg 提取 ...

  9. 网络游戏开发-客户端1(开始Hello world)

    打开Egret Launcher ,新建一个EUI项目,起名为 EQiPai 这里需要勾选的是socket网络库,game游戏库.如果要面向海外用户的话,建议勾上Facebook的小游戏sdk. 然后 ...

  10. A-04 坐标轴下降法

    目录 坐标轴下降法 一.坐标轴下降法流程 二.坐标轴下降法和梯度下降法的异同 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等着你:http ...