一种面向移动云计算的Android应用自动化测试方法与流程

文档序号:14657859发布日期:2018-06-12 07:36阅读:164来源:国知局

本发明涉及一种面向移动云计算的Android应用自动化测试方法,属于软件技术领域。



背景技术:

随着移动互联网时代的到来,大量计算任务从PC端迁移到移动端,移动设备和移动应用在人们生活中扮演越来越重要的角色。移动市场按照设备使用的操作系统可分为多个平台,Android系统的开源特性促进了Android平台的蓬勃发展,同时也带来了诸多问题:如碎片化问题,安全问题等。这些问题极大地影响了Android应用的质量,带来了不好的用户体验。测试是提高软件质量的有效途径。Android应用是事件驱动的程序,用户通过与各种GUI控件的交互产生一系列的事件来运行应用,因此GUI 测试是进行其他测试分析技术的基础。Android应用GUI测试可分为人工测试和自动化测试两种。人工测试由测试人员直接使用应用进行测试,而自动化测试则通过程序模拟用户行为进行测试。人工测试具有应用的领域知识,可以生成特定的用户输入,但人工测试需要消耗大量的时间和精力,且人工操作易引入错误。自动化测试速度快,需要的人工操作少,是一种理想的测试方式。随着应用的迭代开发周期缩短、测试任务的加重,人工测试方式逐渐无法满足测试需求,工业界希望通过自动化测试的方式来提高测试效率。然而目前的自动化测试技术还并不成熟。

学术界提出了一些Android应用GUI自动化测试的技术(Sasnauskas R, Regehr J. Intent fuzzer: crafting intents of death[C]//Proceedings of the 2014 Joint International Workshop on Dynamic Analysis (WODA) and Software and System Performance Testing, Debugging, and Analytics (PERTEA). ACM, 2014: 1-5;Hackner D R, Memon A M. Test case generator for GUITAR[C]//Companion of the 30th international conference on Software engineering. ACM, 2008: 959-960;Azim T, Neamtiu I. Targeted and depth-first exploration for systematic testing of android apps[C]//ACM SIGPLAN Notices. ACM, 2013, 48(10): 641-660.)。这些技术可分为随机测试、基于模型的测试和系统化测试三类。随机测试向应用发送随机的事件流,驱动应用运行;而基于模型的测试则通过构建应用的状态空间模型来控制应用运行。系统化测试方法采用符号执行、演化算法等技术以覆盖更多的代码。已有的自动化测试技术存在两点不足:1)自动化测试过程中执行了大量冗余事件,浪费了测试时间,导致测试效率不高;2)自动化测试过程中缺少有效的测试输入,导致应用的部分功能无法测试到,测试覆盖率不高。



技术实现要素:

本发明的目的:减少无效事件的比例,减少冗余事件的执行,提高测试效率和测试覆盖率。

本发明的原理:发明首先通过自动化脚本录制工具来录制包含特定输入的测试脚本,然后解析执行测试脚本,提取其中的特定输入并保存,接着在自动化测试过程中,通过控件属性匹配来使用这些输入信息。基于优先级调整的自动化遍历算法的关键问题是如何减少无效事件生成和冗余事件的重复执行。发明从界面布局文件中提取控件属性信息,然后根据控件的属性信息来生成对应事件。发明基于应用界面的布局结构特点提出了事件相似性的概念,通过为事件定义优先级属性,并在自动化测试过程中根据事件的执行结果来调整未执行的相似事件的优先级。

本发明技术解决方案:一种面向移动云计算的Android应用自动化测试方法,其特点在于实现步骤如下:

1)处理APK文件,该步骤的目标是处理用户指定的待测应用APK文件,从APK文件中提取应用的AndroidManifest.xml配置文件,并解析获得应用的所有Activity的信息,为自动化遍历过程和测试覆盖率的统计作准备。同时修改APK文件的签名,使得自动化测试程序客户端能与被测应用运行于同一个进程中,保证可以通过Instrumetation的方式来驱动被测应用运行。此外,该步骤还修改了客户端程序配置文件中被测应用的名称,并重新编译。

2)收集有效输入,该步骤通过在自动化探测之前收集有效的输入信息,为自动化探测过程做准备。该步骤包括人工测试脚本的收集和测试脚本的解析执行两个阶段。其中人工测试脚本的收集通过测试脚本录制工具来录制包含特定输入的测试脚本。测试脚本的解析执行则从测试脚本中提取有效的文本和手势输入,并构造状态转化图。

3)执行自动探测,该步骤是自动化测试框架的核心,包括事件的生成、选择、执行的循环、状态空间模型的构建等。在事件执行阶段,将利用前一步中准备的输入信息。 同时该步骤会监控被测应用的异常,并对异常进行处理。

4)收集测试结果,在自动化探测过程完成后,该步骤将对测试的结果进行统计计算, 生成测试报告,包括应用的状态转化图,各个状态的状态截图,覆盖率统计图等。此外,该步骤还将自动化探测过程中检测到的异常进行处理,将记录的异常事件序列转化成可读可重放的测试脚本。

本发明与现有技术相比具有如下优点:

l 自动化探测前,录制包含有效输入的人工测试脚本,然后解析执行人工测试脚本,从中提取有效的输入信息,并用于自动化探测过程中。

l 考虑到了事件之间的相似性,通过事件优先级调整的方式有效地减少冗余事件的执行,同时避免测试时间偏移、频繁重启等问题,缩短测试耗时,提高测试覆盖率。

附图说明

图1为系统架构图。

具体实施方式

以下结合具体实施例和附图对本发明进行详细说明,如图1所示,本发明实施例方法流程:

系统架构包含服务端和客户端两部分,服务端又可分为控制器模块、预处理模块、事件/脚本转化模块、异常检测模块和统计模块。

服务端运行于PC设备上,包含了系统的大部分功能,并通过ADB 给客户端发送控制命令。其各个组成模块的主要功能如下:

预处理模块重签名用户提供的被测应用安装文件(apk),并从中提取应用的配置文件AndroidManifest.xml,解析获取应用的包名,主Activity类名和所有其他的Activity信息。包名和主Activity类名传递给执行控制器用于启动应用,Activity信息保存到系统中用于覆盖率信息的统计。通过对应用apk文件进行插桩以获取方法覆盖率信息。

脚本/事件转化模块将用户提供的人工测试脚本转化成对应的事件序列,然后传递给执行控制器。该模块还负责将状态转化图中的事件边转化成测试脚本,如生成记录应用异常的脚本。

异常检测模块监控设备日志,在被测应用出现异常关闭时,通知控制执行器重启应用。该模块同时记录异常信息,根据状态转化图生成异常执行路径。

统计模块,统计测试耗时,在测试时间限到达时通知执行控制器停止探测。在自动化探测过程中,该模块按照设定的时间间隔计算覆盖率信息,输出状态图、状态对应的用用界面截图,生成测试报告。

执行控制器是整个服务端的核心,运行自动化遍历算法,并在其他模块配合下完成事件的生成 、选择、执行过程和状态转化图的构建。其中事件的生成包括UI布局文件的获取,UI元素的提取和处理、事件对象的构造、事件的过滤;事件的选择包括优先级的调整、状态的选择;事件的执行包括UI元素的定位参数计算、有效输入参数的获取;状态的构建包括状态的比较、状态前置路径的记录。

客户端模块,实现了一个自定义TestRunner, 通过广播接收器监听服务端的测试命令,并通过UIAutomator2.0测试框架来控制被测应用执行。该模块包括命令解析、测试执行、手势库三个子模块。

各步骤内容如下:

步骤1:用户上传被测应用apk文件、手工测试脚本,配置测试参数。

步骤2:应用的apk文件被传递给预处理模块,经过插桩、重签名和活动信息提取三个过程后,将处理好的apk文件、应用包名、主Activity类名输出到执行控制器,将Activity信息保存系统数据文件中。

步骤3:执行控制器使用预处理模块处理完成的apk文件、应用包名和主Activity类名信息,完成被测应用的安装和启动。修改客户端程序的被测应用包名参数,并重新编译打包,然后通过adb命令安装启动。

步骤4:执行控制器从配置文件中加载测试参数,如测试时间限、使用的探测策略等。然后启动自动探测、异常检测和覆盖率统计三个线程。

步骤5:执行控制器检查是否执行人工脚本参数,若不执行则直接跳到步骤6,否则开始人工测试脚本的解析执行过程。首先执行控制器从指定位置读取用户提供的人工测试脚发明件,然后调用事件/脚本转换模块,将测试脚本转化为对应的事件序列。逐条将事件对象传给事件执行子模块,重复执行执行5到9步骤。

步骤6:事件执行子模块根据事件对象的目标控件属性生成控件定位参数。对于Type类型事件,通过查找系统输入文件检查是否有匹配的输入,然后将各种参数通过adb 发送到客户端应用。

步骤7:客户端接收测试命令,解析处理参数,并根据命令的动作参数来调用对应的测试执行函数。测试执行函数通过UIAutomator的提供的API操作被测应用执行对应的用户动作。待界面加载完成后,将当前的界面布局信息写入设备的存储器中。

步骤8:执行控制器从设备存储器中拉取布局文件uidump.xml,事件生成子模块解析该文件得到UI组件集,然后根据UI组件集生成事件集。构造代表当前界面的临时状态对象,保存事件集和UI组件集。将该临时对象传给状态图构建子模块。

步骤9:状态图构建子模块首先根据临时状态和执行的事件信息扩展已有的状态图;接着由优先级调整模块根据是否有新状态产生来调整相关事件和状态的优先级,并检查是否需要改变当前状态。

步骤 10:事件选择模块根据探测策略从当前状态中选择下一个待执行事件,然后跳转到步骤6执行。

步骤11:异常检测模块通过logcat监控设备的日志信息,当检测到异常时记录异常事件序列,并通过事件/脚本转换模块生成对应的可重放测试脚本,然后通知执行控制器重启应用。

步骤 12:自动化探测过程结束后,统计模块从系统数据文件中查找应用包含的所有Activity信息,结合在统计时间点上记录的覆盖信息,生成测试报告。

其中步骤2-4为执行准备阶段,步骤5-9为手工测试脚本解析执行阶段,步骤6-10为自动化测试执行阶段。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1