自动化测试的定义,这里先引用一段维基百科的定义:

在软件测试中,测试自动化(英语:Test automation)是一种测试方法,使用特定的软件,去控制测试流程,并比较实际的结果与预期结果之间的差异。通过将测试自动化,可以让正式的测试过程中的必要测试,可以反复进行;通过这种方法,也可以将难以手动进行的测试,交由软件来做。这种测试方法,是持续交付流程中的必要组成。

用我自己的话说就是,自动化测试的价值在于将重复性的测试工作通过代码和工具组织成一套可多次使用的测试流程,按下回车键或者点击开始按钮即可泡杯咖啡喝杯茶静待其完成整个测试任务。

自动化测试的工具和框架有很多,近些年比较知名的有 Appium、UI Automator 等等。今天我先介绍下 UI Automator 的入门知识。

UI Automator 是一个跨应用(系统应用和第三方应用)的 UI 自动化测试框架,由谷歌官方维护,适用于安卓系统。注意啦~这个框架目前只支持 Android4.3(API level 18) 及以上的安卓系统。

UI Automator 测试框架提供了一系列的 API,这些 API 可以用来编写基于系统应用和第三方应用的自动化测试用例,例如打开系统设置页面或者启动被测应用。UI Automator 测试框架非常适合编写黑盒自动化测试,测试代码不依赖于被测应用的内部执行细节。

UI Automator 测试框架包含以下三个主要功能:

  • UI Automator Viewer: 界面解析工具,用以获取应用的界面元素。
  • Accessing device state: 一个 API(应用程序编程接口),用以获取测试机的状态信息并执行部分操作。
  • UI Automator APIs: 一组 API,支持跨应用的用户界面测试。

下面详细说明此三功能:

UI Automator Viewer

uiautomatorviewer 是安卓 sdk 自带的一个工具(位于'<android-sdk>/tools/bin'目录下),可以用来扫描和分析安卓设备上当前显示的应用页面,输出的结果包含页面中各 UI 组件的布局层级和各项属性。利用这些信息可以编写出更加细致的自动化测试用例。

Accessing device state

UiDevice 是一个类,可以用来和测试设备上的被测应用进行交互。你可以调用它的方法获取到设备信息,诸如当前屏幕旋转角度或者显示屏大小。此外,它还能执行其他操作,例如:

  • 改变设备旋转角度
  • 按下硬件按钮,例如"音量加"
  • 按下 back、home、menu 键
  • 打开通知栏
  • 截图

    例如,模拟按下 home 键的操作:
UiDevice.pressHome()

UI Automator APIs

一组 API,通过它们,无需了解被测应用的具体实现细节,即可编写出健壮的自动化测试用例。你可以使用这些 API 去捕获和操纵跨应用的 UI 组件:

  • UiCollection: 用以获取容器内的用户界面元素个数,或者通过可见的 "text" 和 "content-description" 属性定位子元素。
  • UiObject: 表示设备上一个可见的用户界面元素。
  • UiScrollable: 在可滚动的列表中寻找某个项目时会用到。
  • UiSelector: 查询设备中一个或多个 UI 元素。
  • Configurator: 允许你为运行中的测试用例设置关键参数。

    例如,以下代码展示了如何编写一个测试脚本用于显示设备上默认应用的 Launcher:
device = UiDevice.getInstance(getInstrumentation
device.pressHome(); // Bring up the default launcher by searching for a UI component
// that matches the content description for the launcher button.
UiObject allAppsButton = device.findObject(new UiSelector().description("Apps")); // Perform a click on the button to load the launcher.
allAppsButton.clickAndWaitForNewWindow();

好啦,本篇文章先是引用了维基百科中关于“自动化测试”的定义,然后说了我对于“自动化测试”的理解,最后介绍了 UI Automator 的入门知识。

其实说到底,自动化测试要做的无非就是以下三件事情:

  1. 动作执行
  2. 结果判断
  3. 报告展示

先写到这里,下篇再分享 UI Automator 的具体应用(从环境搭建到跑通第一个自动化测试用例)。

参考资料:

https://developer.android.com/training/testing/ui-automator


欢迎关注微信公众号"测试开发Stack"

自动化测试 | UI Automator 入门指南的更多相关文章

  1. 自动化测试 | UI Automator 进阶指南

    UI Automator 相关介绍: 跨应用的用户界面自动化测试 包含在 AndroidX Test(https://developer.android.com/training/testing) 中 ...

  2. 自动化测试入门指南(3)-- 入门demo

    按照 自动化测试入门指南(2)-- 环境搭建搭建好环境后,我们继续一步步实现一个简单的入门例子 Step0. 安装Firefox浏览器(http://pan.baidu.com/s/1c00bw8g中 ...

  3. 【HBase】HBase Getting Started(HBase 入门指南)

    入门指南 1. 简介 Quickstart 会让你启动和运行一个单节点单机HBase. 2. 快速启动 – 单点HBase 这部分描述单节点单机HBase的配置.一个单例拥有所有的HBase守护线程- ...

  4. Webpack 入门指南 - 3. Hello, Angular2!

    Webpack 入门指南 - 1.安装 Webpack 入门指南 - 2.模块 这一次,我们使用 Webpack 来打包 Angular 2 的应用. 与官方的 Hello, Angular 2 项目 ...

  5. [转载]TFS入门指南

    [原文发表地址] Tutorial: Getting Started with TFS in VS2010 [原文发表时间] Wednesday, October 21, 2009 1:00 PM 本 ...

  6. 5+ App开发入门指南

    HTML5 Plus应用概述 HTML5 Plus移动App,简称5+App,是一种基于HTML.JS.CSS编写的运行于手机端的App,这种App可以通过扩展的JS API任意调用手机的原生能力,实 ...

  7. web前端基础知识及快速入门指南

    web前端基础知识及快速入门指南 做前端开发有几个月了,虽然说是几个月,但是中间断断续续的上课.考试以及其它杂七杂八的事情,到现在居然一直感觉自己虽然很多前端的知识很眼熟,却也感觉自己貌似也知识在门口 ...

  8. Nexus入门指南(图文)

    Nexus入门指南(图文) 博客分类: Maven JavamavenGoogleApacheTomcat Nexus介绍 Nexus 是Maven仓库管理器,如果你使用Maven,你可以从Maven ...

  9. Ext JS 6学习文档–第1章–ExtJS入门指南

    Ext JS 入门指南 前言 本来我是打算自己写一个系列的 ExtJS 6 学习笔记的,因为 ExtJS 6 目前的中文学习资料还很少.google 搜索资料时找到了一本国外牛人写的关于 ExtJS ...

随机推荐

  1. JVM思考-init和clinit区别

    JVM思考-init和clinit区别 目录:JVM总括:目录 clinit和init的区别其实也就是Class对象初始化对象初始化的区别,详情看我上一篇博客: JVM总括四-类加载过程.双亲委派模型 ...

  2. osg探究补充:Node::accept(NodeVisitor& nv)及NodeVisitor简介

    前言 在前几节中,我自己觉得讲的比较粗糙,因为实在是时间上不是很充足,今天我想弥补一下,希望不是亡羊补牢.我们在osgViewer::Viewer::eventTraversal()函数中经常看到这么 ...

  3. sql2012包含数据库,快速生成用户tsql脚本

    今天太忙(下班时,发现一个考试网站的不算BUG的BUG,这个BUG刚好能让我找到想要的数据,现在正辛苦的编码中...) 不多说,今天的技术文章,简单一点,帖一段昨天写的SQL代码 用于SQL2012中 ...

  4. wince sqlite c#

    无法找到 PInvoke DLL“SQLite.Interop.084.dll 按下面步骤操作

  5. Java多线程系列2 线程常见方法介绍

    守护线程 执行一些非业务方法,比如gc.当全部都是守护线程的时候,jvm退出 线程优先级  设置线程优先级:setPriority(int priorityLevel).参数priorityLevel ...

  6. 51nod1305

    可以暴力,但这里学习了一个新思路,就是把原式进行分解会得到[1/a[i]+1/a[j]],因为向下取整,我们可以发现,1作用于1结果为2,1作用于除了1之外的数结果为1,2作用于2结果为1,所以我们只 ...

  7. 1.4eigen中的块运算

    1.4 块运算 块是矩阵或数组的一个矩形部分.块表达式既可以做左值也可以作右值.和矩阵表达式一样,块分解具有零运行时间成本,对你的程序进行优化. 1.使用块运算 最常用的块运算是.block()成员函 ...

  8. 参考文献bib管理

    比如在IEEE模板中,在当前目录添加 bib 文件reference.bib 在 \end{document} 之前加入 \bibliographystyle{IEEEtran} \bibliogra ...

  9. 第38章:MongoDB-集群--Replica Sets(副本集)---多机的搭建

    ①机器环境 182.48.115.236    master-node(主节点) 182.48.115.237    slave-node1(从节点) 182.48.115.238    slave- ...

  10. VDD,VCC,VSS,VEE,VDDA,VSSA,

    VDD是主供电电源,也是IO口输出电平的输入电源.VDDA(A表示模拟)是模拟电源,当使用到模拟信号的时候,比如AD(模数)或者DA(数模)的时候,系统会使用VDDA的电压作为参考电压来.不要求精准使 ...