基于事件处理器的Android自动化测试工具及测试方法

文档序号:9910936阅读:514来源:国知局
基于事件处理器的Android自动化测试工具及测试方法
【技术领域】
[0001]本发明涉及软件测试领域,特别是一种基于事件处理器的Android自动化测试工具及测试方法。
【背景技术】
[0002]目前国内外对AndroidApp测试的研究主要集中在事件输入的生成。根据研究探索方式的不同,现有工作主要分为两类:模糊测试(fuzzing testing)和基于⑶I模型测试。模糊测试又称为随机测试,其核心思想是自动或半自动地生成随机数据输入到程序中,监视程序的异常情况,如崩溃,断言失败等,以发现程序中可能的错误。基于GUI模型的测试是指基于App的GUI模型,测试工具去系统地探索App,触发App中的事件;这类测试方法首先生成App的⑶I模型,GUI模型反映了App中状态之间的联系,直观地表达状态的传递关系;基于App的GUI模型,测试工具使用状态覆盖作为测试准则,探索GUI模型中的所有状态。
[0003]上述两类测试方法各有其优点,如模糊测试适合压力测试,基于GUI模拟的测试能够系统地探索App,达到较高的覆盖率。然而这两类测试方法也都存在各自的不足:模糊测试无法生成特殊的测试输入,并且无法保证测试的完整性;基于GUI模型的测试依赖完整的GUI模型,现有的GUI模型获取方式,无论是静态分析获取还是动态执行获取都无法保证模型的完整性。
[0004]另外,上述工具都是基于UI测试的工具,都没有考虑系统事件和Inter-App事件。因此,Android测试的难点总结为以下两点:一是包含丰富的事件输入,如UI事件、系统事件和Inter-App事件,部分事件难以模拟;二是缺少系统的探索方法。

【发明内容】

[0005]本发明的目的在于提供一种基于事件处理器的Android自动化测试工具及测试方法。
[0006]实现本发明目的的技术方案为:一种基于事件处理器的Android自动化测试工具,包括事件插粧模块、代码分析工具Soot和App探索模块;
[0007]事件插粧模块包括XML解析器、识别器、分发器、语句构造器和语句管理器;
[0008]XML解析器用于收集在XML中定义的事件,解析器的输入是Apk的XML文件,包括App的资源文件和AndroidManifest.xml,资源文件包含UI事件,AndroidManifest.xml包含系统事件和Inter-App事件;XML解析器的输出是在资源文件和AndroidManif est.xml中定义的UI事件、系统事件和Inter-App事件;
[0009]识别器用于识别在代码中定义的事件,识别器的输入是Apk的Dex文件,Dex文件包含App所有的源代码,识别器采用程序静态分析方法,查找在代码中定义的UI事件和系统事件;识别器的输出是在代码中定义的UI事件和系统事件;
[0010]分发器用于将XML解析器和识别器收集到的事件分发给事件所属的活动;
[0011]语句构造器用于构造事件处理器的调用语句;语句构造器的输入是收集的事件,输出是事件处理器调用语句,调用语句用于验证事件处理器的正确性;
[0012]语句管理器用于管理事件处理器调用语句,语句管理器的输入是事件处理器调用语句,输出是“Test”事件,“Test”事件的事件处理器封装所有事件处理器的调用语句;
[0013]代码分析工具Soot将插粧的调用语句、“Test”事件和Apk的原代码重新打包成一个新的Apk文件;
[0014]App探索模块对重新打包后的Apk文件进行自动化测试。
[0015]一种基于事件处理器的Android自动化测试工具的测试方法,包括以下步骤:
[0016]步骤1、解压缩Apk文件,获得Apk中的XML文件和Dex文件;
[0017]步骤2、使用XML解析器解析XML文件,查找并获取在XML中定义的UI事件、系统事件和 Inter-App 事件;
[0018]步骤3、使用识别器分析Dex文件,查找在代码中定义的UI事件和系统事件;
[0019]步骤4、分发器对XML解析器和识别器收集到的事件统一处理,获取事件的事件源和事件处理器,将事件信息分发给各自的活动;
[0020]步骤5、活动获得事件处理器后,语句构造器构造事件处理器的调用语句;
[0021]步骤6、语句管理器创建“Test”事件,将调用语句插粧在“Test”事件的事件处理器中;
[0022]步骤7、代码分析工具Soot将插粧的调用语句、“Test”事件和Apk的原代码重新打包成一个新的Apk文件;
[0023]步骤8、App探索模块启动App,执行自动化测试;
[0024]步骤9、测试结束后,输出测试结果,包括本次测试的耗时、代码覆盖率、发现的bug数目和bug类型。
[0025]本发明与现有技术相比,其显著优点为:
[0026](I)高代码覆盖率:本发明能够触发的Android的UI事件、系统事件和Inter-App事件,比传统的只能触发UI事件的测试工具要更全面,代码覆盖率更高;
[0027](2)高效率:本发明直接调用事件处理器调用语句,比传统的测试方法需要生成事件去验证事件处理器的正确性速度要快;
[0028](3)Bug发现能力:由于考虑更全面的事件输入,本发明不仅可以发现UI中的Bug,还可以发现系统和Inter-App事件中Bug。
【附图说明】
[0029]图1为本发明的基于事件处理器的Android自动化测试工具总体架构图。
【具体实施方式】
[0030]结合图1,本发明的一种基于事件处理器的Android自动化测试工具,包括事件插粧模块、代码分析工具Soot和App探索模块;
[0031]事件插粧模块包括XML解析器、识别器、分发器、语句构造器和语句管理器;
[0032]XML解析器用于收集在XML中定义的事件,解析器的输入是Apk的XML文件,包括App的资源文件和AndroidManifest.xml,资源文件包含UI事件,AndroidManifest.xml包含系统事件和Inter-App事件;XML解析器的输出是在资源文件和AndroidManif est.xml中定义的UI事件、系统事件和Inter-App事件;具体实现如下:
[0033](I)角军析Androi dManifest.xml,获取包含 Intent-Filter 的所有 Activity、Servi ce和 Receiver; Servi ce和 Receiver对应系统事件,Activity对应Inter-App 事件;输出是二兀组〈source ,handler〉,source表不Activity、Service和Receiver ,handler表不Intent-Filter;
[0034](2)解析资源文件,获取包含属性“android: onClick=m”的所有UI事件;输出是二元组〈source, cal lback〉,source表示UI事件的事件源,cal Iback表示事件处理器的回调函数。
[0035]识别器用于识别在代码中定义的事件,识别器的输入是Apk的Dex文件,Dex文件包含App所有的源代码,识别器采用程序静态分析方法,查找在代码中定义的UI事件和系统事件;识别器的输出是在代码中定义的UI事件和系统事件;具体实现如下:
[0036](I)使用代码分析工具Soot获得Dex文件中源码;
[0037](2)遍历源码中的所有类,遍历每个类中的所有方法;
[0038](3)如果方法的名字是onListItemClick() ,performClick(),onTouchevent(),perf ormLongCl i ck O,onKeyUp ()或onKeyDown (),获取方法名;否则,遍历该方法中的每条语句,判断该语句是否是 s.setOnXXListener(l)、s.registerReceiver(l)或s.addXXLi stener (I)形式的注册语句,若是则记录source、注册方法和handler,记为三元组〈S,rm,h>,s表示事件源,rm表示注册方法,h表示事件处理器,否则跳转到(2)。
[0039]分发器用于将XML解析器和识别器收集到的事件分发给事件所属的活动;具体实现如下:
[0040]根据获取事件的类型,确定分发方式,如果事件类型是UI事件,则调用android.view.View的方法getContent()获取UI事件所在的活动;如果是系统事件或Inter-App事件,则将事件MainActivity作为系统事件或Inter-App事件所在的活动。
[0041]语句构造器用于构造事件处理器的调用语句;语句构造器的输入是收集的事件,输出是事件处理器调用语句,调用语句用于验证事件处理器的正确性;具体实现如下:
[0042](I)获得XML解析器输出二元组〈source ,handler〉和〈source , cal lback〉;对于〈source , handler〉,获得handIer 的回调函数cal lback;对于〈source,cal lback〉,获得cal lback 所在的handler,输出三元组〈source ,handler,callback〉;
[0043](2)获得识别器的输出三元组<s,rm,h>,获得rm方法对应的cal lback,输出三元组〈source, handler, callback);
[0044](3)获得上
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1