Macaca 测试 Android 应用:UIAutomator

  • 时间:
  • 浏览:1
  • 来源:大发快3官方直播—彩神UU快三代理

在 Macaca 测试用例中用 driver.swipe(startX, startY, endX, endY, duration) 的土依据编写滑动用例,下面给出四种 滑动的自动化效果范例:

时候 用 createUITest 函数来创建一个多多标准的 UIAutomator 测试工程,并生成了 ant build 文件:

类图出处连接

时候 朋友将“ Java 端测试用例编写土依据”这俩小节描述的过程用 Nodejs 的代码进行封装,所涉及的 adb 命令由 macaca-adb 模块甩掉,包括 ant 编译命令也通过 Nodejs 来封装执行,生成一个多多驱动 jar 包,最后将这俩 UIAutomator 驱动模块 push 到安卓设备并启动,从前安卓设备就建立 socket 服务完毕。下面从代码上详细分析一下该过程。

不能想看 ,最终朋友的自动化指令是要通过 UIAutomator 这俩框架来驱动的,如保用该框架的 API 进行自动化代码编写读者不能参照网上的各种教程,这里笔者通过 Swipe 操作的实现来简单地介绍 Macaca 是如保使用该框架 API 的。

将上一小节的分析用一个多多图来进行总结,给朋友一个多多全局认识

时要有点痛 注意的是,设备端 socket 服务监听的是设备端口,本地电脑端服务监听的本机的端口,要想连通这两端的 socket,时要用 adb 工具进行端口映射,命令如下:

其中 $version 为安装的 SDK 版本号

使用 Macaca 测试 Android 应用

uiautomator-client 模块会在本地机器和安卓设备之间建立 socket 连接,时候 自动化指令就通过 socket 进行传输。既然是建立 socket ,没人必然有客户端和服务端的 socket 服务建立过程。本机上的 socket 服务建立用 Nodejs 建立并监听即可。对于手机端的 socket 服务建立,朋友把 Java 建立 socket 的过程放上去 UIAutomator 用例的入口处,如下:

首先将操作指令都用一个多多类表示: Swipe.java ,它实现 execute 土依据,通过 socket 收到 json 字符串指令后,解析字符串,根据字符串去调用对应的指令类实例的 execute 土依据。范这类下:

会在工程下生成一个多多 ant 的 build.xml 文件,接着用 ant 对该工程进行编译打包,在工程的 bin 目录下生成 jar 包。

将生成的 jar 包用 adb push 到安卓设备上,时候 执行

其中 UiDevice 是 UIAutomator 框架下的类,且是单例的,通过 getInstance 获取实例后调用 swipe 来模拟设备上的手势滑动。

安装了 uiautomator-client ,并成功跑过一次安卓测试用例的同学,不能在 uiautomator-client 的安装目录下查找 uiautomator-client 文件夹,不能发现该文件夹下富含了一个多多标准的 UIAutomator 的测试用例工程:

<img src="http://ww1.sinaimg.cn/large/67ba1336gw1f3dt6wd946j20j40j20vf.jpg" width="33000">

朋友先来看 Java 端一般是如保跑 UIAutomator 测试用例的。创建一个多多 Java 工程,编写用例类,UIAutomator 的测试入口是一个多多 UIAutomatorTestCase 的子类,范这类下:

首先介绍下 UIAutomator。UIAutomator 是随 Android SDK 同時 发布的一个多多测试框架,该测试框架提供了一系列 API,利用哪此 API 朋友不能编程和安卓 App 进行交互,这类:打开设置菜单,点击,滑动等。时候 不能对设备进行物理指令操作,如:旋转设备,获取设备分辨率等。该测试框架的 jar 包不能在 SDK 的安装目录中找到:

通过该 adb 命令不能将发往本机 A 端口的数据重定向到安卓设备的 B 端口。

时候 在该工程根目录下执行命令

这俩工程也不我被上图中 scripts 文件夹下的 build.js 创建的。Macaca UIAutomator 驱动的编译过程也不我在build.js 中进行的。

有了 socket 连接,就不能将测试指令发往 UIAutomator 驱动,驱动根据不同的指令参数去执行用 UIAutomator API 写成的 Java 用例。

图中,用来写测试用例的常用十好多个 类简介:

Macaca 主要一个多多多模块来负责操作设备的自动化测试,一个多多是 macaca-adb ,一个多多是 uiautomator-client 。macaca-adb 用 Nodejs 对安卓 adb 命令进行了包装,以供其他 node 模块调用,不能用其来进行模拟器的启动,端口号映射,获取设备等操作。 uiautomator-client 模块是朋友分析的主角。

朋友来看 build.js 中的逻辑,先通过 checkEv 函数来检测系统环境变量 ANDROID_HOME 有没人配置,时候时要用到 SDK 目录下的 Android Tools 工具:

本文转自 念槐聚 博客园博客,原文链接:http://www.cnblogs.com/haochuang/p/5816962.html,如需转载请自行联系原作者

Macaca 对于 native 的自动化测试主要利用了 UIAutomator 。Macaca 是如保将这俩 Java 写成的工具集成到自身的呢,本文将对此进行分析,让朋友更加快乐、明白地使用 Macaca 。

最后朋友的 UIAutomator Java 用例代码便运行起来了。

用 Macaca 不能快速、便捷地进行安卓 native 的自动化测试,用简洁的 js 语法,写下用例,时候 执行 Macaca CLI 命令,就不能想看 安卓的手机在按照你的指令自动进行用例操作。相关文章可参考:

时候 通过 buildBootstrap 函数来进行 Java 编译,其中用到一个多多 ant 的 npm 包:

在用macaca进行自动化测试,想试一下移动端测试,想看 这篇文章,尝试一下。

本文简要分析了 Macaca 利用 UIAutomator 的原理,抛砖引玉。时候 实际的代码实现时要考虑更多的东西,也更为比较复杂,且这要素也仅仅是 Macaca 的一个多多模块。时候 Macaca 代码详细前会 开源的,人太好本文写的欠缺详细或有兴趣深入的同学不能亲自去看看其源码。Macaca 也还有什么都 欠缺,欢迎朋友参与其中,多提意见多支持。^_^

下面是 UIAutomator 框架的类图: