基于Monkey的应用稳定性测试方法和装置与流程

文档序号:16972242发布日期:2019-02-26 18:39阅读:303来源:国知局
基于Monkey的应用稳定性测试方法和装置与流程

本申请涉及应用程序稳定性测试,具体涉及基于monkey的应用稳定性测试方法和装置。



背景技术:

应用程序在制作好后可能存在大量的崩溃、异常、无响应等方法的bug。为保证用户在快速操作、页面切换等极端或异常场景下应用保持稳定地运行,需要对应用程序进行测试找出bug,并进行修复。

monkey是一个命令行工具,它可以运行在我们的模拟器或者设备当中。它可以发送一些伪随机的用户事件流,例如点击,触摸,手势等。我们能够使用monkey工具来对我们所开发的应用进行压力测试。monkey测试是一种为了测试软件的稳定性,健壮性的快速有效的方法。

目前行业内基于android系统做稳定性测试,是采用monkey进行长时间运行,查看在高频率、高负载的情况下应用程序的表现,是否会出现崩溃、闪退、超时等异常情况。目前的测试方法存在以下缺陷:

1.因为monkey本身机制的随机性,随时都有可能跳出当前在测场景,无法有针对性地对某业务场景进行长时间测试,不能对路径较深、页面层次较多的场景进行完整覆盖测试。

2.monkey进程在测试过程中经常死掉,导致不能进行长时间的进行稳定性测试。

3.现有monkey的测试对象是针对整个android系统或者某个应用,但是无法针对应用里的某个模块或者界面。这样在产品迭代过程中,每个迭代后的应用程序中已经做过稳定性测试的界面都得重新做一遍,而无法针对该迭代新增的功能模块做单独的稳定性测试,使得测试效率低下。



技术实现要素:

为解决现有技术的上述缺陷,本申请提供一种基于monkey的应用稳定性测试方法和装置。

根据第一方面,一种实施例中提供一种基于monkey的应用稳定性测试方法,其包括以下步骤:确定待测试场景中所有的跳出控件,并禁止执行所有的跳出控件,其中所述待测试场景包括应用中预先选定的实现特定功能的一个或多个控件;控制monkey按照预设规则对所述待测试场景中各个控件执行相应的随机测试事件流。

优选地,确定待测试场景中所有的跳出控件,并禁止执行所有的跳出控件具体包括:获取跳出控件清单;通过命令查找匹配的跳出控件;屏蔽跳出控件所在的待测试场景中相应的界面区域。

优选地,还包括判断是否需要选择策略模式,若是,则选择匹配的策略模式依次对场景中的控件进行测试,若否则进入黑白名单,对黑白名单中选定的控件进行测试。

在一实施例中,所述的测试策略模式包括dfs模式、mix模式、troy模式;dfs模式为深度遍历模式,对场景中的每个界面逐个进行测试;mix模式为获取场景各界面的入口控件,通过入口控件进入界面后解析该界面的各个控件,按照配置好比例的随机事件对各个控件进行操作;troy模式为预设的优选级对每个界面逐个进行测试;用一种策略模式对场景测试完后,可以选择其它述策略模式中对场景继续进行测试。

根据第二方面,一种实施例中提供一种基于monkey的应用稳定性测试装置,其包括

跳出控件禁止模块,用于确定待测试场景中所有的跳出控件,并禁止执行所有的跳出控件,其中所述待测试场景包括应用中预先选定的实现特定功能的一个或多个控件;

测试模块,用于控制monkey按照预设规则对所述待测试场景中各个控件执行相应的随机测试事件流。

根据第三方面,一种实施例中提供一种计算机可读存储介质,其包括程序,所述程序能够被处理器执行以实现如上所述的方法。

依据上述实施例的基于monkey的应用稳定性测试方法和装置,由于通过禁止执行所有会跳出待测试场景的跳出控件,使得monkey只能在定义的待测试场景中不断地随机测试而不会跳出待测试场景,避免重复、无意义的测试。如此设计使得,monkey可以针对性地对某一业务场景进行长时间的测试,另外可以将应用程序中迭代新增的功能模块中的各个组合定义成一个场景,然后运行monkey单独对该场景进行稳定性测试,极大地节约了时间成本,并提高了发现bug的效率。进一步,对monkey的运行状态进行检测,能够及时发现monkey的异常,并将monkey的异常修复到正常状态,能够持续长时间地对某一场景进行测试。

附图说明

图1为本发明一实施例所述的基于monkey的应用稳定性测试方法的流程示意图;

图2为本发明另一实施例所述的基于monkey的应用稳定性测试方法的流程示意图;

图3为本发明又一实施例所述的基于monkey的应用稳定性测试方法的流程示意图;

图4为本发明再一实施例所述的基于monkey的应用稳定性测试装置的原理框图。

具体实施方式

下面通过具体实施方式结合附图对本发明作进一步详细说明。其中不同实施方式中类似元件采用了相关联的类似的元件标号。在以下的实施方式中,很多细节描述是为了使得本申请能被更好的理解。然而,本领域技术人员可以毫不费力的认识到,其中部分特征在不同情况下是可以省略的,或者可以由其他元件、材料、方法所替代。在某些情况下,本申请相关的一些操作并没有在说明书中显示或者描述,这是为了避免本申请的核心部分被过多的描述所淹没,而对于本领域技术人员而言,详细描述这些相关操作并不是必要的,他们根据说明书中的描述以及本领域的一般技术知识即可完整了解相关操作。

本文中为部件所编序号本身,例如“第一”、“第二”等,仅用于区分所描述的对象,不具有任何顺序或技术含义。而本申请所说“连接”、“联接”,如无特别说明,均包括直接和间接连接(联接)。

实施例一:

请参考图1,由于monkey的随机性,随时可能跳出所测试的场景,因此本申请通过禁止执行跳出场景的跳出控件,使得monkey产生点击,触摸,拖动等随机操作测试事件流不会对跳出控件产生作用,monkey只能在设定的场景中不断的进行测试。所述的测试具体是指采用monkey模拟用户产生点击,触摸,拖动,手势操作等随机操作测试事件流与场景中的控件作用,找出应用程序出现的崩溃、异常、无响应等bug,以对应用程序进行改进。

基于monkey的应用稳定性测试方法具体包括如下步骤:

101、确定待测试场景中所有的跳出控件,并禁止执行所有的跳出控件,其中所述待测试场景包括应用中预先选定的实现特定功能的一个或多个控件;可以将整个应用作为待测试场景,也可以将应用中的某一个功能模块作为待测试场景。具体的做法可以是将整个应用中的所有控件组合构成待测试场景,或者是将应用中的某一个功能模块中的所有控件组合构成待测试场景,甚至是仅将几个选定的控件组合起来作为待测试场景。将一个控件或多个控件组合成一个场景,使得用户可以自行组建场景,从而可以在组建的场景中针对性地进行测试。尤其是当某个应用在版本迭代过程中,新的版本可能出现新的功能模块,本申请可以将该新的功能模块的各个控件构成一个新的场景,即可以对新增的功能模块做单独的稳定性测试,而不用对整个应用程序做测试,极大地提高测试效率并节约资源,解决现有monkey无法针对应用里面的某个模块或界面进行测试的缺陷。

解析场景中各个控件,查找出所有的跳出控件;然后屏蔽跳出控件所在的待测试场景中相应的界面区域,屏蔽了跳出控件所在区域后,使得随机事件即使作用在跳出控件上不会使monkey跳出当前场景,屏蔽跳出控件所在的区域是禁止执行跳出控件的一种优选方式,通过屏蔽跳出控件所在区域来禁止执行跳出控件。所述跳出控件是指在点击、拖动、手势动作等操作下会使得monkey跳出所测试场景的控件,该控件为场景中界面上的控件,例如拖动屏幕顶部或底部的下拉菜单控件把下拉菜单打开后,此时如果monkey在下拉菜单中产生点击操作,monkey则会跳出当前场景。控件查找支持复杂型xpath和index索引,xpath即为xml路径语言,它是一种用来确定xml文档中某部分位置的语言。在稳定性测试过程中,随机事件的好坏通常决定了稳定性测试的发现bug的效率与能力,优化随机事件是构建高效monkey测试的重要一环。限制了monkey的测试界面,使其在设定的场景中进行测试,而不会跳出该场景做无谓的测试,使得monkey产生的随机事件为高效的随机事件,节省时间成本的同时,提升了发现bug的效率。

在一优选实施例中,禁止执行跳出控件可以通过以下方法实现:获取跳出控件清单,获取控件清单之前,程序员会将导致跳出当前场景的所有控件找出,并将这些跳出控件列出一个清单;通过xpath或index索引命令查找匹配的跳出控件,找出跳出控件所在的界面和在界面上的位置;屏蔽跳出控件所在的区域,使得随机测试事件作用在跳出控件所在的区域也不会产生相应的反馈。

102、控制monkey按照预设规则对所述待测试场景中各个控件执行相应的随机测试事件流。

运行monkey产生随机事件流对场景中的控件进行测试,也就是monkey产生点击、滑屏、手势动作等事件对场景中的各个控件进行操作,测试应用程序的稳定性。

在一优选实施例中,运行monkey时,配置各类随机事件的比例,将配置好比例的随机事件集成在自动化脚本中,并将该脚本作为一个monkey事件对待测试场景进行测试。例如点击配置比例为50%,拖动配置比例为25%,滑屏25%。

在对某一模块或某一具有多界面的场景进行测试时,monkey可能跳到模块的入口界面,如果此时不使monkey进入模块中进行测试就可能存在monkey跳出该模块的风险,因此需对此情况进行控制。

一般进入一个模块会有一个唯一入口控件。因此,作为优选实施例,每次monkey产生事件对界面操作之后都要检查当前的界面是否包括待测试场景的唯一入口控件,如果是则控制monkey执行点击入口控件的随机测试事件,monkey就回到了这个模块中,继续测试;这样进一步保证稳定性测试一直保持在这个模块中进行。

例如对淘宝的“电器城”场景进行测试,电器城的入口界面为淘宝首页,那么淘宝首页所在界面也属于“电器城”场景。monkey在运行过程中可能跳到淘宝首页,如果此时不控制monkey进入“电器城”场景,应用程序在淘宝首页运行,此时如果monkey点击退出键,而该退出键又不属于“电器城”场景中的跳出控件,不会被屏蔽掉,monkey点击退出键则会进入到安卓系统桌面,退出“电器城”场景。

检测到当前界面包括待测试场景的唯一入口控件时,入口界面判断模块通过与手机上的浏览服务模块(viewserver)通信,获取当前界面的控件信息,得到唯一入口控件的坐标信息;再对这个坐标做一个点击的操作,monkey即回到了指定的模块内。

在一优选实施例中,每一次monkey运行后,monkey都有可能进入睡眠、假死状态,因此需要对monkey的运行状态进行监听,当检测到monkey处于非正常运行状态时,对monkey进行唤醒或重启,修复monkey进程占用资源大、无响应的bug。并通过读取max.config项,设定重启后每隔6秒监听一次monkey的运行状态,设定唤醒后每隔4秒监听一次monkey的运行状态。

实施例二

请参考图2,基于monkey的应用稳定性测试方法包括如下步骤:

200、确定待测试场景中,找出跳出该场景的所有跳出控件,并屏蔽跳出控件所在的区域;

201、根据用户的设定判断当前待测试场景是否需要采用策略模式对monkey的运行方式进行约束,如果是进入步骤202,如果否进入步骤203。具体是否需要采用策略模式可以根据待测试场景的业务属性进行设定。例如需要对业务场景进行完整覆盖测试,则需要采用策略模式来进行测试,并选择dfs模式或troy模式,而在场景仅包括几个界面时,一般采用黑白名单的方式,对黑白名单中选定的控件采用随机事件进行测试。

202、根据测试业务场景的属性可以设定运行的策略模式,monkey再根据上述设定选择dfs模式、mix模式、troy模式中的一种模式。其中dfs模式为深度遍历模式,对场景中的每个控件逐个进行测试;mix模式为获取场景各界面的入口控件,通过入口控件进入界面后解析该界面的各个控件,按照配置好比例的随机事件对各个控件进行操作。即采用实施例一中的monkey事件对界面进行测试,将配置好比例的各个事件写成自动化脚本,然后将该脚本抽象成一个monkey事件对界面进行测试。troy模式为按预设的优选级对每个控件逐个进行测试。采用dfs模式和troy模式进行测试时,不再是让monkey进行随机跳动,而是根据页面层级逐个界面进行测试,这样就能解决以外路径较深、页面层级较多的场景不能完全覆盖的问题,也可以避免很多重复、无意义的测试。然后进入步骤204。

203、创建界面黑白名单,通过配置文件的方式,可对跳转做更细粒度控制,比如控制仅在几个特定界面中跑monkey。然后进入步骤204。

204、monkey按照上述策略模式或黑白名单开始运行,产生随机事件流对场景中的界面进行测试。

下面举例说明场景的测试过程。

假设微信在版本更新迭代过程中,新增了一个“小程序”模块,需要采用本申请改进后的monkey对“小程序”模块进行测试。

那么所述待测试场景即为“小程序”模块实现的功能场景,其包括所有实现该功能模块的控件;

确定所有会跳出当前待测试场景的控件,将这些控件作为跳出控件并生成清单,获取这个清单,根据清单查到相应的跳出控件,然后屏蔽这些跳出控件所在的区域,使得即使有点击、触摸、拖动等事件作用在控件上,控件也不会产生反馈。

根据用户的预先设定,可以选择dfs模式,即为深度遍历模式,逐个对“小程序”模块中的各个控件进行测试。当然也可以根据测试的严谨程度,采用其它模式进行测试。此例中,采用了测试的策略模式,在其它场景的测试中,也可能不采用策略模式,而采用黑白名单形式,对黑白名单中指定的控件进行测试。

在测试期间,为防止monkey假死或死掉,本申请按预设时间间隔检测monkey的运行状态,当monkey处于非正常运行状态时,对monkey进行唤醒或重启。具体运行时,例如读取max.config项,max.config代表monkey的运行状态,monkey处于休眠状态时,将monkey唤醒,之后每隔4秒检测一次monkey的运行状态;monkey处于崩溃状态时,将monkey重启,之后每隔6秒检测一次monkey的运行状态。

“小程序”模块具有固定的入口界面“发现”,当检测到当面的界面为“发现”时,使monkey产生一个点击事件,并点击“小程序”模块的唯一入口控件,进一步防范退出当前场景的风险。

实施例三

请参考图3,该实施例与实施例二基本流程一致,但在场景的测试中可能发生一些特殊事件,比如需要输入账号和密码或是在对话框中输入信息,这种特殊事件的稳定运行也是整个应用程序稳定运行的一部分,因此需要对其进行测试。在图2的基础上,在步骤204之前增加步骤205,步骤205为配置特殊事件,找到匹配的输入控件,点击该控件并输入预设的随机输入字符。预设的随机输入字符,其内容可自定义配置,通过读取文件方式获取,每一行为随机输入项。当配置的特殊事件是在输入控件中输入账号和密码时,其中预设的随机输入字符就是预先设置好的账号和密码。

实施例四

请参考图4,基于monkey的应用稳定性测试装置10包括:

跳出控件禁止模块1,确定待测试场景中所有的跳出控件,并禁止执行所有的跳出控件,其中所述待测试场景包括应用中预先选定的实现特定功能的一个或多个控件;

测试模块2,用于控制monkey按照预设规则对所述待测试场景中各个控件执行相应的随机测试事件流。

本领域技术人员可以理解,上述实施方式中各种方法的全部或部分功能可以通过硬件的方式实现,也可以通过计算机程序的方式实现。在有的实施例中还提供了一种计算机可读存储介质,其包括程序,所述程序能够被处理器执行以实现实施例一到实施例二中任一一种实施例所述的步骤。当上述实施方式中全部或部分功能通过程序的方式实现时,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器、随机存储器、磁盘、光盘、硬盘等,通过计算机执行该程序以实现上述功能。例如,将程序存储在设备的存储器中,当通过处理器执行存储器中程序,即可实现上述全部或部分功能。另外,当上述实施方式中全部或部分功能通过计算机程序的方式实现时,该程序也可以存储在服务器、另一计算机、磁盘、光盘、闪存盘或移动硬盘等存储介质中,通过下载或复制保存到本地设备的存储器中,或对本地设备的系统进行版本更新,当通过处理器执行存储器中的程序时,即可实现上述实施方式中全部或部分功能。

以上应用了具体个例对本发明进行阐述,只是用于帮助理解本发明,并不用以限制本发明。对于本发明所属技术领域的技术人员,依据本发明的思想,还可以做出若干简单推演、变形或替换。

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