RERAN:安卓系统的定时和点击的录制和回放——(6~8)

来源:互联网 发布:重庆啤酒 事件 知乎 编辑:程序博客网 时间:2024/06/07 12:27

6. 限制规则

  如在第4节D段提到的: RERAM可以回放Google Play(谷歌应用版) 中前100的应用中的86个。然而, 仍然有14款应用我们无法回放。这些应用可以分为两类: 请求 Android 传感器服务类和包含动态或随机元素类(如图表6中显示的元素)。我们现在来讨论下它们不能回放的原因有哪些:

  请求 Android 传感器服务:一些需要传感器输入的应用RERAM不会记录。比如我们在没有从摄像机捕获可识别的二维码图形时, 我们不能恰当地回放二维码扫描应用。类似地, 我们不能回放 Voxer Walkie-Talkie(对讲应用),因为这个应用需要从麦克风捕获音频数据。在 Android 中,对这类由传感器输入的应用与触摸屏或加速器仪(使用 /dev/input/event*)不一样。这是由于隐私和安全问题,这些传感器(摄像头,麦克风和GPS位置)是被系统许可保护的并不对捕获开放访问。现在,我们无法捕获这样的传感器。

  接入这样的数据源需要对我们的系统做重大扩展,这工作我们以后再做。

  动态或随机元素:类似地,我们无法捕获不确定的数据源,比如出现动态布局或弹出窗口[11],网络连接状态改变[12],或内部不确定因素如使用随机数生成器。如同图表6里显示的,这样的应用主要是游戏应用,比如这款火爆的游戏:Temple Run(神庙大逃亡),它每次都随机生成关卡,这使得 RERAN 回放变得不可能。总之,处理这样的不确定数据源需要捕获系统调用API的结果,并提供这些API的自定义版本以供回放 [13]。这需要整合应用和(或)虚拟机。RERAN 的简单设计未包含这个特性,但仍能回放Top100中大部分应用。

7. 相关工作

  记录-回放技术已经在包括Android在内的大部分平台被深入探索过了。与我们的工作最接近的已经在GUI级别实现了记录和回放。他们通常使用两种方式,一种是关键字动作:通过脚本访问和改变GUI组件;另一种是事件驱动方式:通过捕获和回放事件。我们先调查通用GUI测试工具,然后是针对 Android 的方式。

A. GUI桌面应用测试

  一些基于 JUnit的“捕获-回放”工具,比如Jacareto [14] 和 Pounder [15],它们是事件驱动的,在执行方式上类似于RERAN都是捕获坐标。它们录制鼠标点击和键盘敲击的坐标(x,y),在回放时,又根据捕获的结果来创建新鼠标和键盘事件。虽然这些工具在比RERAN更高级的抽象级别,也会易受GUI改变的影响而出错,比如【按钮1】在不同版本的应用里改变位置。一些这样的工具同时支持鼠标拖动[11]。然而,鼠标拖动不同于滑动,对于一些特殊事件其它平台通常把它当为鼠标点击事件(已包含位置信息)。对比Android,图2显示的,鼠标按下与一组6个单独的精确时间控制事件是一致的。然而,鼠标拖动的时间精度在其他平台中不像在Android中这么重要。

  Marathon[16], HP WinRunner[4], Abbot[3], 和 Rational Robot[5] 也提供了桌面或服务端应用的记录回放功能,但是是通过一种不同的方式:比起捕获位置坐标,他们使用了一种关键字执行技术。比起捕获GUI对象,它完成了一个更高级别的抽象。通过捕获GUI组件本身,在后续的跟踪中他们可以通过对象的名字引用对象;然而,他们首先依赖于GUI布局,这是一个hold不住的设定,比如,Angry Birds(愤怒的小鸟),找一个合适的对象来用[17]可以通过GUI mapping[18]技术来完成,或创建基于线程的GUI对象ID [19]。一旦脚本被创建,GUI交互回放就被通过GUI对象来完成,并更新它们的属性。

  使用关键字执行技术的工具通常需要用户手写测试脚本,而不是像 RERAN 一样捕获用户交互动作,因为他们的重点在创建测试用例,而不是回放。当GUI组件改变时,这类测试不像基于坐标的测试那样脆弱,然而对GUI的API做出变更,比如改变、增加或删除GUI类,可能这些脚本也需要修改[6], [17]。

  前面提到的方法是为传统桌面应用构建的,没有一个支持触摸屏。在移动设备外进行基于触摸的回放尝试,比如DART [20] 和 Microsoft Surface SDK for tabletop applications [21],通常构建来与目标平台的硬件或API单独工作。当前工作已经转向普通的多点触控设备[22], [23]。

B. Android GUI 测试

  Android SDK 提供了Monkey工具[24], 可以生成随机屏幕点击和手势以及其他系统级事件,并传给应用。Monkey也支持事件序列脚本传给应用,然而它不被Google支持,由于它的存在目的是作为一个压力测试工具。Monkey脚本可以包含 Android 手势事件,允许它处理点击。然而, 基于我们开始的尝试,开发 RERAN 时, 脚本点击是劳动密集的, 比如除了xy坐标,每个点击需要指定11个额外的参数, 包含压力, 精度,和尺寸。另外, Monkey脚本不支持触摸屏手势. RERAN 通过记录缓和了这样复杂的耗时需求,这使得用户可以自然地与应用交互。

  Google也提供了类似的工具, Monkeyrunner [25],通过提供一个记录脚本的API, 给Android带来关键字操作技术, 它能够直接启动Android设备和模拟器。这工具允许用户查看屏幕截图的最终状态。Robotium[26], 一个基于JUnit的框架,提供一个类似于Monkeyrunner的方式, 但同样允许通过调用GUI元素自动化Android应用的黑盒测试,比如按钮名字和菜单, 来操作应用.。两个工具都重度依赖应用的布局,这样它们能够方便地获取GUI 组件。然而, 对于决定如何构建布局,应用开发人员是非常谨慎的,他们可能直接提供一个XML布局文件,也有可能在运行时才创建一个布局元素[21]。RERAN 的测试是不依赖布局和用户自定义的GUI组件限制的,这使得RERAN可以记录回放应用,无论布局如何构建。

  GUITAR[27]是一个用于java和windows应用的GUI测试框架。对GUI应用它能生成基于事件序列的测试用例。他们的技术可以使用一个结构化的事件生成图来自动生成测试用例。GUITAR 主要用于Java桌面应用, 不过由于它通过扩展 Android SDK 的 Monkeyrunner 工具, 现在已经被移植到Android,它允许用户通过点击界面捕获点击事件来创建用例。然而, GUITAR 不支持触摸手势, 比如滑动、缩放, 或其他输入设备如加速传感器和指南针。在过去, 通过移动点击来导航是充分有效的—¬—在移动世界外,主要的设备输入是捕获鼠标移动和键盘击键。然而, 由于智能机越来越先进, 提供的功能也越来越强大,通过附加传感器的使用来完成交互,我们认为要如实重放用户交互, 这些传感器都必须考虑到,而不是它们的子集, 比如触摸屏按压。

C. 准确地回放

  大量工作已经专注于通过捕获和回放硬件(操作系统[29]或 虚拟机[30])层面的事件来实现确定性回放[28],这些尝试记录的事件可能采用非确定性的因素(IO, 线程调度,内存访问等),以及在回放时用正确的顺序传送来保证回放与原始执行是完全相同的。日志开销不同依赖于基准测试的性能,添加记录和回放能力对一个现有系统来说可能具有相当侵入性。我们在这设计空间里探索一个不同的方向: 我们不求确定性回放,而是专注于使用标准软硬件和最小侵入性的高效方法和工具,虽然如此我们仍能回放Top100里的86个应用。

8. 总结

  我们介绍了RERAN, 一种Android平台记录-回放的方法。我们的研究积极性是被一些新奇流行的触摸平台和应用激起的,唯一的挑战与回放这些应用有关, 也与处理Android平台的研究和实践任务广泛的适用性有关。在手机上直接捕获底层事件流并精确回放, RERAN可以简单地重现复杂的GUI手势及其他传感器输入,结果是非侵入性的, 并且是非常高效的,可以工作在Top100中大量主流的真实应用。更牛逼的是, 我们已经演示了这种方法可以成功地应用在重复性, bug重现和执行时间扭转上。

0 0
原创粉丝点击