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. asp.net 开源工作流-ccflow关于 “ 是否自动计算未来的处理人”的功能变更

    关键字:流程未来节点处理人  工作流快速开发平台  工作流流设计  业务流程管理   asp.net 开源工作流 业务背景:一个流程在启动起来后,是可以对一些节点计算出来处理人是谁,流程的走向.对于另 ...

  2. Spring Boot 2.X(七):Spring Cache 使用

    Spring Cache 简介 在 Spring 3.1 中引入了多 Cache 的支持,在 spring-context 包中定义了org.springframework.cache.Cache 和 ...

  3. mybatis的环境搭建以及问题

    1.mybatis中3个重要的类或者接口 1)SqlSessionFactoryBuilder类 用它来创建工厂对象,它重载了9次build()方法,我们常用build(inputstream)来创建 ...

  4. 使用Spring-boot-starter标准改造项目内的RocketMQ客户端组件

    一.背景介绍 我们在使用Spring Cloud全家桶构建微服务应用时,经常能看到spring-boot-xxx-starter的依赖,像spring-boot-starter-web.spring- ...

  5. 利用 turtle库绘制简单图形

    turtle库是python的基础绘图库,这个库被介绍为一个最常用的用来介绍编程知识的方法库,其主要是用于程序设计入门,是标准库之一,利用turtle可以制作很多复杂的绘图. turtle名称含义为“ ...

  6. 设计模式常见面试知识点总结(Java版)

    设计模式 这篇总结主要是基于我设计模式系列的文章而形成的的.主要是把重要的知识点用自己的话说了一遍,可能会有一些错误,还望见谅和指点.谢谢 更多详细内容可以到我的cdsn博客上查看: https:// ...

  7. LeetCode初级算法--字符串01:反转字符串

    LeetCode初级算法--字符串01:反转字符串 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.ne ...

  8. Linux之shell基础

    Shell基础 一.shell概述 1) shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动.挂起.停止甚至是编写一些程序 ...

  9. Web前端助手-功能丰富的Chrome插件

    整合优秀的前端实用工具.免费,可配置的强大工具集 示例 安装 github仓库: https://github.com/zxlie/FeHelper 官网地址:https://www.baidufe. ...

  10. POJ 1258 Agri-Net(Prim)

    题目网址:http://poj.org/problem?id=1258 题目: Agri-Net Time Limit: 1000MS   Memory Limit: 10000K Total Sub ...