APP下载

基于Eclipse的Android自动化测试工具插件开发的研究

2018-03-07朱传晶张立张海涛刘万龙

科技资讯 2018年33期

朱传晶 张立 张海涛 刘万龙

摘 要:Eclipse是一个开放源代码的、基于Java的可扩展开发平台,Eclipse开发平台的插件扩展机制(Plug-in)更是大家热于使用的精华所在,本文研究了基于该插件机制的移动端自动化测试工具的实现思路,目的是让读者了解如何将有关Android自动化测试的小工具集成到Eclipse平台之上,实现统一应用。

关键词:Eclipse Plug-in 扩展点 UiAutomator

中图分类号:TP311.52 文献标识码:A 文章编号:1672-3791(2018)11(c)-0024-05

Abstract: Eclipse is an open source, Java based extensible development platform, Eclipse platform plug-in expansion mechanism (Plug-in) is used to heat all the essence of this paper is to study the realization way of the mobile terminal automation test tool based on the plug-in mechanism, the purpose of this paper is to let the reader know how the Android test automation gadgets integrated into the Eclipse platform, to achieve a unified application.

Key Words: Eclipse; Plug-in; Extension point; UiAutomator

为了能够提高移动应用测试人员的用户体验感,本文研究了将部分移动应用测试工具集成到Eclipse开发平台上来,并为移动应用开发人员提供了专业的测试工程的创建和管理,以及测试用例的创建和编辑功能,大大提高了测试用例开发人员的工作效率。

1 Eclipse及Plug-in简介

1.1 Eclipse

Eclipse最初是由IBM公司开发的替代商业软件Visual Age for Java的下一代IDE开发环境,2001年11月贡献给开源社区,现在它由非营利软件供应商联盟Eclipse基金会(Eclipse Foundation)管理。

Eclipse是一种面向开发人员的编程环境,同时它也是一个开放源代码的、基于Java的可扩展开发平台,它提供了一种架构,或者说一种软件框架,可以让开发人员相对比较容易的开发出功能比较强大的,带有人机交互功能的应用程序。Eclipse开发平台主要包括工作台窗口、菜单栏、工具栏、工作台页、编辑器、视图、状态栏等工作区,其可视化结构如图1所示。

界面最外面的称为工作台窗口,也是应用程序最顶层的界面模块,一般来说一个应用会有一个工作台窗口,该窗口包含了主菜单栏、工具栏、状态栏、和一个工作台页,这些都是典型的GUI程序所必备的。

工作台页是工作台窗口的主界面,也是工作区界面,它包括了各种视图窗口和编辑器窗口,视图和编辑器都称为Part,视图也称为ViewPart,编辑器也称为EditorPart。视图通常是用来显示目录树、属性窗口、文档结构图等类似内容,视图上所做的修改会立刻生效。编辑器是用来编辑文档的,编辑器里修改的內容必须通过专门的保存命令进行存储生效。

1.2 Plug-in

Plug-in是Eclipse的插件开发机制,Eclipse中有3个最吸引人的地方:一是用户体验相当好的图形SWT/JFace组件;二是Plug-in机制;三是利用Plug-in机制开发的终端功能强大的插件。因此,插件开发机制是Eclipse产品的优势中的重中之重。

插件开发的入口在于扩展点,扩展点顾名思义就是开发者可以对原程序进行功能和界面扩展的接口,扩展程序可以通过扩展点把程序功能接入到原有程序中,不同的扩展点可以扩展不同的功能。从编程角度,只要写的类实现了扩展点的接口,就可以被平台类加载和调用,通过扩展点接入的声明,可以告诉Eclipse平台,使用什么功能的时候调用什么类,新的插件提供了哪些功能,或者扩展了原有的哪些功能等。

插件开发中的扩展点非常多,衔接方式为配置插件开发建立工程中的plugin.xml文件,后面将有详细描述,这里介绍下开发中的基本扩展点。

1.2.1 org.eclipse.ui.views

通过该扩展点可以扩展功能所需要的视图窗口,开发平台中的视图窗口和移动端自动化测试工具中的多数功能也是通过扩展该扩展点实现的,开发人员开发的view必须继承ViewPart这个虚拟类或者实现IViewPart接口。

1.2.2 org.eclipse.ui.editors

通过该扩展点可以扩展功能所需要的编辑器窗口,开发人员开发的editor必须继承EditorPart这个虚拟类或者实现IEditorPart接口。

1.2.3 org.eclipse.ui.commands

该扩展点里面含有了很多命令,它定义了命令、命令目录以及默认快捷键等,是一个任务的逻辑表达,命令主要通过人机界面发出,常用到的控件为菜单、工具条、快捷键等。它的实现逻辑将存在于org.eclipse.ui.handlers扩展点中。

1.2.4 org.eclipse.ui.handlers

处理器扩展点是对命令扩展点的真正实现的地方,这里运行了匹配命令的功能逻辑。

1.2.5 org.eclipse.ui.menus

创建菜单项的方式有多个,本论文中采用的是通过commands扩展点方式创建的,首先需要创建command,然后通过该菜单扩展点确定菜单创建的区域,最后通过处理器扩展点定义这个command的行为。

1.2.6 org.eclipse.ui.newWizards

这是新建向导扩展点,此扩展点用来注册资源创建向导扩展。创建向导作为“新建对话框”中的选项出现,该向导通常用于创建文件夹或文件。因移动端自动化测试工具中需要提供创建用例工程及用例文件的功能,此扩展点是不可获取的。

2 UiAutomator功能代码拆解及插件集成

2.1 UiAutomator

Google在Android4.1发布时提供了一套新的UiAutomation框架来支持用户界面自动化测试,该框架通过运用已有的Accessibility APIs来模拟用户跟设备用户界面的交互,比如获取窗口界面控件和注入事件等。

UiAutomator主要用于自动化测试,仿真单击、滑动、输入文本等操作,而不用人为地进行操作,可以大大提高反复进行的操作测试效率。

2.2 UiAutomator功能代码拆解及视图插件开发

(1)UiAutomator源码可以通过git的以下访问路径获取。

git clone https://android.googlesource.com/platform/frameworks/uiautomator

(2)UiAutomator可以拆解为抓屏视图(ScreenshotView)、节点属性视图(NodeDetail)、节点操作代码视图(NodeCode)3个视图模块,详细介绍如下。

①ScreenshotView。

创建ScreenshotView类,继承自上方提到的视图扩展点中的ViewPart虚拟类,创建视图中的组件代码来自UiAutomator源码中的com.android.uiautomator.UiAutomatorView类中的mScreenshotComposite组件,parent指的是当前视图对象,部分组件层次代码如下。

mScreenshotComposite = new Composite(parent, SWT.NONE);

mScreenshotComposite.setLayout(mStackLayout);

mScreenshotCanvas = new Canvas(mScreenshotComposite, SWT.BORDER);

②NodeDetail。

創建NodeDetail类,同样继承自视图扩展点中的ViewPart虚拟类,该视图以TableViewer组件来展示移动端屏上某个APP的属性信息的,代码来自UiAutomator源码中的com.android.uiautomator.UiAutomatorView类中的mTableViewer组件,parent指的也是当前视图对象,部分布局代码如下。

Composite container = new Composite(parent, SWT.NONE);

TableColumnLayout columnLayout = new TableColumnLayout();

container.setLayout(columnLayout);

mTableViewer = new TableViewer(container, SWT.BORDER | SWT.FULL_SELECTION);

③NodeCode。

创建NodeCode类,同样继承自视图扩展点中的ViewPart虚拟类,该视图以Tree组件来存储移动端屏上某个APP的操作代码,以备再次将代码拖拽到用例工程测试类中,parent指的也是当前视图对象,部分布局代码如下。

Composite container = toolkit.createComposite(parent, SWT.NONE);

toolkit.paintBordersFor(container);

container.setLayout(new FillLayout(SWT.HORIZONTAL));

tree = new Tree(container, SWT.BORDER);

toolkit.adapt(tree);

toolkit.paintBordersFor(tree);

2.3 插件集成配置

上述中提到过plugin.xml文件,每个插件工程创建后都会有这个配置文件,该配置文件里配置了扩展标签及相应值,以上3个视图的配置如下所示。

point="org.eclipse.ui.views">

id="pxuiautomator.category"

name="PX Category">

name="Screenshot View"

icon="icons/sample.gif"

category="pxuiautomator.category"

class="pxuiautomator.views.ScreenshotView"

id="pxuiautomator.views.screenshotview">

project="true"

finalPerspective="org.eclipse.jdt.ui.JavaPerspective"

id="org.px.ui.wizards.PXProjectWizard">

Create a PX Case project