首页> 中国专利> 一种基于Android的自动化软件黑盒测试系统及方法

一种基于Android的自动化软件黑盒测试系统及方法

摘要

本发明涉及一种基于Android的自动化软件黑盒测试系统及方法,包括:事件注入模块、事件动态执行和过滤模块、GUI信息自动化录制模块、GUI状态转换图建立模块,在没有应用程序代码的情况下,人工获取Android的关键UI事件和系统intent事件,将其以训练脚本的形式,通过定制的测试工具注入到Andorid设备上的对应应用程序,然后在训练脚本的执行过程中,动态执行、过滤系统事件,并记录相关事件所触发的GUI新窗口控件信息和窗口转换关系,根据记录的信息,自动化的建立GUI状态转换图模型;最后根据GUI状态转换图模型生成测试用例。本发明可以快速、有效的将系统事件加到GUI模型中,从而来保证测试的完整性,具备自动化程度相对较高、可重用性强、可扩展性优良等特点。

著录项

  • 公开/公告号CN103336742A

    专利类型发明专利

  • 公开/公告日2013-10-02

    原文格式PDF

  • 申请/专利权人 北京航空航天大学;

    申请/专利号CN201310305497.3

  • 申请日2013-07-18

  • 分类号G06F11/36(20060101);

  • 代理机构11251 北京科迪生专利代理有限责任公司;

  • 代理人成金玉;卢纪

  • 地址 100191 北京市海淀区学院路37号

  • 入库时间 2024-02-19 20:16:50

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-11-11

    授权

    授权

  • 2013-11-06

    实质审查的生效 IPC(主分类):G06F11/36 申请日:20130718

    实质审查的生效

  • 2013-10-02

    公开

    公开

说明书

技术领域

本发明属于软件测试技术领域,涉及一种基于模型的Android自动化软件黑盒测试系统 及方法,用于解决Android系统的软件自动化测试问题。

背景技术

随着Android应用的快速发展,Android测试的研究却相对滞后,对整个软件开发和测 试过程都有着不可估量的影响。Android自动化测试应运而生,其中自动化测试用例生成问 题是软件测试的核心所在,所以针对Android而特有的自动化测试用例生成技术的研究具有 极其重要的意义。

目前,基于Android系统的自动化测试生成技术主要包括:

基于Monkey工具的自动化测试生成技术。Monkey是Android系统中的一个命令行工 具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、 触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种 自动化的黑盒测试,可以快速生成大量的简单随机的测试输入。但是,Monkey不能生成智 能的测试用例,比如不能输入正确的用户名密码。而且不能避免生成冗余测试用例。另外, Monkey只能生成Android GUI事件,不能生成系统事件。

另外一种比较流行的自动化测试生成的技术是基于模型的测试生成技术。基于模型的测 试生成技术很好的抽象了一个GUI程序的输入空间,可以提高测试生成效率、减少冗余。主 要的模型类型有状态机模型及状态机变种模型、GUI树模型等。基于模型的自动化测试生成 技术主要侧重于测试基于GUI的应用程序。现有的基于模型的测试生成技术主要针对 Android GUI事件,而没有考虑系统事件。最为重要的是,基于模型的自动生成技术的前提 是需要一个适用性较高的模型,而现有的技术中建模的过程都是手动的,这样需要的人力成 本过高。

发明内容

本发明技术解决问题:克服现有技术的不足,提供一种基于Android的自动化软件黑盒 测试系统及方法,保证软件测试的完整性;还可以完全脱离应用程序的保密性限制,具备自 动化程度相对较高、可重用性强、可扩展性优良等特点。

本发明技术解决方案:一种基于Android的自动化软件黑盒测试系统,包括:事件注入 模块、事件动态执行和过滤模块、GUI信息自动化录制模块、GUI状态转换图建立模块,其 中:

事件注入模块:人工编写训练脚本,将应用程序的关键UI事件和系统intent事件全集 发送到应用程序,为事件动态执行和过滤模块提供事件激励;根据Android应用程序 AndroidManifest.xml文件的所有intent事件描述,手动的构造intent事件,同时根据Android 应用程序GUI控件信息构造关键UI事件,并且以自定制测试工具可识别的脚本命令形式, 编写训练脚本,最终以训练脚本为形式注入到定制测试工具,从而进一步发送到Android真 实设备或者Android模拟器上,促使相应应用程序运行;

事件动态执行和过滤模块:执行训练脚本,并在训练脚本执行过程中,针对每一个应用 程序窗口,根据过滤条件动态过滤无关系统intent事件,来避免GUI信息自动化录制模块录 制无关事件所触发的GUI转换;使用定制测试工具执行训练脚本,用来触发Android真实设 备或者Android模拟器上对应应用程序的运行;根据过滤条件将应用程序当前GUI窗口下的 无关事件过滤掉。过滤条件为是否可以触发Android应用程序GUI窗口的变化,将无法触发 窗口转换的事件过滤掉。在训练脚本的执行过程中的动态执行和过滤事件,必须加入Android 应用程序GUI的状态验证,来判断某事件是否应该被过滤掉;所述状态验证是在训练脚本激 励应用程序执行的过程中,通过比对某GUI的控件集属性或具有代表性控件(比如TextView 控件、控件树的叶子控件等)的关键属性来验证该GUI窗口是否有变化;状态验证过程中, 可以通过设定相应参数来选择是比对GUI控件集属性还是比对具有代表性控件的关键属性; 在比对GUI控件集属性或者具有代表性控件关键属性时,采用DUMPQ命令来获取当前窗 口所有的控件信息或者采用DUMPQ的改进命令DUMPW命令,只获取指定控件的控件信 息;

GUI信息自动化录制模块:针对事件动态执行和过滤模块中未被过滤的系统intent事件 和人工构造的关键UI事件,自动录制其所触发的新GUI控件信息和基于该事件的GUI转换 关系,并存储到数据库中,来为GUI状态转换图自动建立模块提供建立转换图所需数据,其 中GUI控件信息包括Android应用程序某窗口中GUI的控件集和对应的控件属性,窗口转 换关系主要记录应用程序的当前窗口名、窗口转换事件和下一个窗口名。当训练脚本执行过 程中一个事件触发了GUI转换,一方面自动向Android系统的View Server发送DUMP命令, Android在接到命令后,会将当前窗口的窗口名、GUI控件信息返回给该发明的系统中,并 存储数据库GUI控件信息表中;另一方面,将事件触发前的GUI窗口名、触发事件名和该 事件触发的新GUI窗口名存储到数据库的窗口转换关系表中;

GUI状态转换图自动建立模块:根据GUI信息自动化录制模块录制的GUI相关信息, 参数化定义状态转换图的状态和条件转换,然后建立状态转换图,最后发送到测试生成模块, 生成测试用例;由于使用参数化定义窗口状态,因此可以通过设置参数将窗口转换表中的一 个窗口名和该窗口下所有控件的属性集合定义为一个GUI状态;也可以设置参数将窗口转换 表中的一个窗口名和该窗口下所有叶子控件或者可聚焦控件的属性集合定义为一个GUI状 态;另外,将窗口转换事件定义为基于事件的GUI状态转换;根据设定的参数,选择性的在 数据全集中,读取所需数据,建立状态对象,将其作为状态转换图的一个节点;然后对所有 状态编号,针对某一个状态即GUI窗口,从数据库中读取该状态下所有状态转换关系即所有 以该窗口名为起始窗口的窗口转换关系,作为状态转换图中该节点到其他节点的有向边,以 上过程即建立了GUI状态转换图。

在GUI状态转换图构建完成之后,需要制定状态转换图的搜索条件,包括应用程序的初 始状态、状态转换图的搜索停止条件,然后制定检测冗余测试用例的标准;根据状态转换图 搜索条件的和冗余测试用例标准,使用广度优先或者深度优先算法来遍历GUI状态转换图来 自动的生成事件序列即为测试用例,根据事件序列生成测试脚本,最后根据测试脚本相应应 用程序进行测试。

所述事件注入模块具体实现如下:

(1)使用开源工具,获取apk文件中的AndroidManifest.xml文件;

(2)获取到AndroidManifest.xml文件中的intent事件全集;

(3)根据Android系统提供的broadcastIntent方法、startActivity方法和startService方 法要求,人工构造系统事件;

(4)根据Android SDK中自带工具,人工搜索获取Android的关键UI事件;关键UI 事件为可以触发GUI窗口转换的UI事件;

(5)根据定制测试工具的脚本命令形式,人工编写训练脚本。

(6)最终以训练脚本为形式注入到定制测试工具。

所述事件动态执行和过滤模块具体实现如下:

(1)定制测试工具执行训练脚本,来触发应用程序运行;

(2)训练脚本执行过程中,使用某个关键UI事件启动一个Activity,即应用程序进入 一个GUI窗口,向该GUI窗口发送intent事件全集;

(3)发送一个intent事件后,进行GUI窗口变化验证,在事件发送一段时间后,比如 在事件发送1s后,验证当前窗口的窗口名是否和事件发生前的窗口名相同,如果窗口名相 同,使用DUMPW命令,验证该窗口下关键控件的关键属性是否变化,关键属性比如TextView 控件的文本属性;

(4)如果GUI窗口不变,过滤掉该intent事件;如果窗口变化,需要使用Android应 用程序GUI信息自动化录制模块来处理,处理完后,返回到上一个窗口,继续发生其他intent 事件;

(5)针对一个GUI窗口,发送完所有intent事件后,使用某UI事件促使应用程序进入 一个新的GUI窗口,然后执行步骤(3);

(6)检查窗口转换关系,是否有UI事件未触发的GUI窗口,如果有,重复执行步骤(2), 如果没有,则结束。

一种基于Android的自动化软件黑盒测试方法,其特征在于实现步骤如下:

(1)通过.apk文件中的AndroidManifest.xml文件获取应用程序的所有静态注册的 intent事件及intent事件的属性信息;

(2)人工编写训练脚本,以训练脚本的形式注入事件,训练脚本包括针对每一个窗口发 送全部的intent事件;发送可以触发窗口转换的UI事件;针对窗口是否变化的状态验证;

(3)定制测试工具执行训练脚本;

(4)动态过滤系统事件,对于不能触发应用程序窗口转换的系统事件应该被过滤掉;

(5)GUI信息自动化录制,针对已通过状态验证的事件,即触发了GUI窗口转换的事 件,录制该事件所触发的应用程序GUI当前窗口的控件信息、下一个窗口的控件信息和基于 该事件的窗口转换关系,并将其分别存储到数据库的控件属性表和窗口转换表中;

(6)自动建立GUI状态转换图,设定参数来定义状态转换图的状态和基于事件的状态 转换,然后根据所设定的参数,读取数据库的相应表数据,建立状态转换图;

(7)测试生成,制定状态转换图的搜索条件,包括应用程序的初始状态、状态转换图的 搜索停止条件,然后制定冗余测试用例的标准;根据状态转换图搜索条件的和冗余测试用例 标准,使用图遍历算法搜索状态转换图来自动的生成事件序列,即为测试用例,然后根据事 件序列自动生成测试脚本。

本发明与现有技术相比的优点在于:

(1)由于该发明加入了对系统事件的考虑,采用动态执行、反馈过滤系统事件的技术, 可以快速、有效的将系统事件加到GUI模型中,来保证测试的完整性。

(2)由于该发明是黑盒测试,不需要应用程序代码,因此,可以完全脱离应用程序的 保密性限制。

(3)本发明还具备自动化程度相对较高、可重用性强、可扩展性优良等特点。

附图说明

图1为本发明的测试系统的组成结构框图;

图2为本发明中事件注入模块实现过程图;

图3为本发明中动态执行和过滤系统事件的流程示意图;

图4为本发明中GUI状态转换图自动建立模块。

具体实施方式

下面将结合附图和实施例对本发明作进一步的详细说明。通过足够详细的描述这些实施 示例,使得本领域技术人员能够理解和实践本发明。在不脱离本发明的主旨和范围的情况下, 可以对实施做出逻辑的、实现的和其他的改变。因此,以下详细说明不应该被理解为限制意 义,本发明的范围仅仅由权利要求来限定。

如图1所示,本发明基于Android的自动化软件黑盒测试系统主要包括:事件注入模块、 事件的动态执行和过滤模块、GUI信息自动化录制模块、GUI状态转换图建立模块,测试生 成构成。

整个实现过程如下:

1.使用开源工具,获取apk文件中的AndroidManifest.xml文件,然后根据 AndroidManifest.xml文件获取应用程序的所有静态注册intent事件及intent事件的属性信息;

2.人工编写训练脚本,以训练脚本的形式注入事件。训练脚本主要包括针对每一个窗口 发送全部的系统事件;发送可以触发窗口转换的UI事件;针对窗口是否变化的状态验证;

3.定制测试工具执行训练脚本;

4.动态过滤系统事件,对于不能触发应用程序窗口转换的事件应该被过滤掉;

5.GUI信息自动化录制。针对已通过状态验证的事件,即触发了GUI窗口转换的事件, 录制该事件所触发的应用程序GUI当前窗口的控件信息、下一个窗口的控件信息和基于该事 件的窗口转换关系。并将其分别存储到数据库的控件属性表和窗口转换表中;

6.自动建立GUI状态转换图。设定参数来定义状态转换图的状态和基于事件的状态转 换。然后根据所设定的参数,读取数据库的相应表数据,建立状态转换图;

7.测试生成。制定状态转换图的搜索条件,比如应用程序的初始状态、状态转换图的搜 索停止条件,然后制定冗余测试用例的标准。根据状态转换图搜索条件的和冗余测试用例 标准,使用图遍历算法搜索状态转换图来自动的生成事件序列,即为测试用例,然后根据事 件序列自动生成测试脚本。

上述各模块的具体实现过程如下:

1.事件注入模块

该模块的实现过程如下:

(1)使用开源工具,获取apk文件中的AndroidManifest.xml文件;

(2)获取到AndroidManifest.xml文件中的intent事件全集;

(3)根据broadcastIntent方法、startActivity方法和startService方法要求,人工构造系 统事件。

(4)根据Android SDK中自带工具,人工搜索获取Android的关键UI事件。关键UI 事件为可以触发GUI窗口转换的UI事件。

(5)根据定制的测试工具的脚本命令形式,人工编写训练脚本。

2.事件动态执行和过滤模块

该模块的实现过程如图2所示:

(1)定制的测试工具执行训练脚本,来触发应用程序运行。

(2)训练脚本执行过程中,使用某个关键UI事件启动一个Activity,即应用程序进入 一个GUI窗口,向该GUI窗口发送intent事件全集。

(3)发送一个intent事件后,进行GUI窗口变化验证。比如在事件发送1s后,验证当 前窗口的窗口名是否和事件发生前的窗口名相同。如果窗口名相同,使用DUMPW命令, 验证该窗口下关键控件的关键属性是否变化,比如TextView控件的文本属性。

(4)如果GUI窗口不变,过滤掉该intent事件。如果窗口变化,需要使用Android应 用程序GUI信息自动化录制模块来处理,处理完后,返回到上一个窗口,继续发生其他intent 事件。

(5)针对一个GUI窗口,发送完所有intent事件后,使用某UI事件促使应用程序进入 一个新的GUI窗口,然后执行(3)。

(6)检查窗口转换关系,是否有UI事件未触发的GUI窗口。如果有,重复执行(2), 如果没有,结束。

3.GUI信息自动化录制模块

该模块实现过程如下:

(1)如果一个事件(UI事件或者intent事件)触发了GUI窗口转换,该发明会向Android 系统中的View Server发送DUMPQ命令,来获取当前GUI窗口的所有控件的关键属性集, 并存储到数据库中。

(2)同时,GUI信息自动化录制模块会记录该事件触发前的GUI窗口名、触发事件 名和该事件触发的新GUI窗口名,并存储到数据库的窗口转换关系表中。

4.GUI状态转换图自动建立模块,如图4所示。

该模块实现过程如下:

(1)通过设置参数来定义窗口转换图中的状态。参数state设置为all,表示将窗口中所 有控件的属性集作为一个状态;参数state设置为leaf,表示将窗口中所有叶子控件的属性集 作为一个状态;参数state设置为focused,表示将窗口中所有可聚焦的控件的属性集作为一个 状态。

(2)根据设置的参数,从数据库中的控件信息全集中读取相应数据,并建立相对应的 状态对象,将其作为状态转换图中的节点。

(3)将上述信息从数据库读取出来之后,把该应用程序的所有窗口编号,创建一个一 维数组,数组下标为该应用程序窗口对应编号。

(4)针对某一个窗口,创建一个HashMap,HashMap中的key值为该窗口中的某个事 件名,对应的value值为该事件所触发的目标窗口序号。即将该窗口的所有状态转换关系, 作为状态转换图中该节点到其他节点的有向边,存储到HashMap中。

(5)最后分别将各HashMap存储到相对应的数组中。即一个数组元素存储的是该下标 状态下所有可能的状态转换关系。

(6)上述过程将状态转换图建立完成。

总之,该发明加入了对系统事件的考虑,采用动态执行、反馈过滤系统事件的技术,可 以快速、有效的将系统事件加到GUI模型中,从而来保证测试的完整性。另外,由于该发明 是黑盒测试,不需要应用程序代码,因此,可以完全脱离应用程序的保密性限制。本发明还 具备自动化程度相对较高、可重用性强、可扩展性优良等特点。

本发明未详细阐述部分属于本领域公知技术。

以上所述,仅为本发明部分具体实施方式,但本发明的保护范围并不局限于此,任何熟 悉本领域的人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明 的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号