一种应用程序测试方法及装置
技术领域
本公开涉及计算机技术领域,具体而言,涉及一种应用程序测试方法及装置。
背景技术
随着计算机技术的飞速发展,应用程序的运行平台也多样化了起来。由于运行平台之间存在差异,因此,一个应用程序需要再不同的运行平台上进行软件测试。
软件测试是使用人工或自动的手段来运行或测定某个软件系统的过程,比如,通过遍历的形式测试应用程序各个页面中控件对应的操作,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。在应用程序需要进行软件测试的次数越来越多的情况下,如何高效进行软件测试,成为了一个亟待解决的问题。
发明内容
本公开实施例至少提供一种应用程序测试方法及装置。
第一方面,本公开实施例提供了一种应用程序测试方法,包括:
获取目标应用程序的当前状态迁移模型;所述当前状态迁移模型中记录有所述目标应用程序在本次测试中被测试过的页面的状态信息及状态迁移信息;
响应目标客户端的寻路请求,基于所述当前状态迁移模型中被测试过的页面的状态信息及状态迁移信息,确定与所述目标客户端当前测试到的第一页面之间存在预设层级的跳转关系的多个第二页面的剩余测试价值,并基于所述剩余测试价值,从所述多个第二页面中筛选出目标页面;
确定从所述第一页面跳转至所述目标页面的目标操作路径;
将所述目标操作路径发送给所述目标客户端,以使所述目标客户端基于所述目标操作路径从所述第一页面跳转到所述目标页面,并从所述目标页面进行测试。
一种可选的实施方式中,所述第二页面的状态信息包括第二页面的属性信息;
确定所述多个第二页面的剩余测试价值,包括:
针对每个所述第二页面,基于所述第二页面的状态信息中,所述第二页面的属性信息,对所述第二页面中存在未执行操作的功能组件进行聚类,得到多个功能组件集合,并确定每个所述功能组件集合的线性抽象权重;
针对每个功能组件集合,确定所述功能组件集合中功能组件的数量;
基于所述功能组件集合中功能组件的数量、所述功能组件集合对应的每个操作对应的操作类型权重、所述功能组件集合对应的组件类型权重、以及所述功能组件集合的线性抽象权重,确定所述功能组件集合的测试价值;
基于每个所述功能组件集合的测试评价值,确定所述第二页面的剩余测试价值。
一种可选的实施方式中,所述第二页面的状态信息包括:所述第二页面对应的当前次访问的已测试代码,以及上一次访问所述第二页面的已测试代码;
确定所述多个第二页面的剩余测试价值,包括:
基于所述多个第二页面分别对应的所述当前次访问的已测试代码,以及上一次访问所述第二页面的已测试代码,确定每个所述第二页面的代码覆盖增长度;
基于每个所述第二页面的所述代码覆盖增长度,确定所述多个第二页面分别对应的剩余测试价值。
一种可选的实施方式中,基于每个所述第二页面的所述代码覆盖增长度,确定所述多个第二页面分别对应的剩余测试价值,包括:
将所述代码覆盖增长度大于0的第二页面标记为重要页面;
针对每个所述第二页面,基于每个所述第二页面的状态迁移信息,确定从所述第二页面能够跳转到的所述重要页面的第一数量;
基于所述第一数量以及预设的收益参数,确定每个所述第二页面的收益修正权重;
基于表征所述第二页面的访问次数的第二数量,与所述第一数量之差,以及预设的惩罚参数,确定每个所述第二页面的惩罚修正权重;
基于每个所述第二页面的所述代码覆盖增长度、所述收益修正权重以及所述惩罚修正权重,确定每个所述第二页面的剩余测试价值。
一种可选的实施方式中,确定从所述第一页面跳转至所述目标页面的目标操作路径,包括:
基于所述第一页面与所述目标页面之间的每个页面的状态迁移信息中包含的页面跳转关系,确定多条从所述第一页面跳转至所述目标页面的候选操作路径;
将所需操作次数最少的所述候选操作路径作为所述目标操作路径。
一种可选的实施方式中,将所述目标操作路径发送给所述目标客户端之后,所述方法还包括:
基于所述目标客户端在从所述目标页面进行测试时所测试到的其它页面的状态信息及状态迁移信息,更新所述当前状态迁移模型,得到更新后的状态迁移模型。
一种可选的实施方式中,所述方法还包括:
在不存在从所述第一页面跳转至所述目标页面的操作路径的情况下,基于所述当前状态迁移模型中的状态迁移信息,确定能够跳转到所述第一页面及所述目标页面的第三页面;
基于所述第三页面与所述目标页面之间的页面的状态迁移信息,生成从所述第三页面跳转至所述目标页面的备选操作路径;
将所述备选操作路径发送至目标客户端,以使所述目标客户端从所述第一页面回退至所述第三页面后,基于所述备选操作路径从所述第三页面跳转到所述目标页面,并从所述目标页面进行测试。
一种可选的实施方式中,在响应目标客户端的寻路请求之前,所述方法还包括:
将所述当前状态迁移模型切分为多个状态迁移子模型,并确定每个所述状态迁移子模型中包含的页面;
将用于测试所述目标应用程序的多个测试客户端中的每个测试客户端分别作为目标客户端;
为每个所述目标客户端分配不同的状态迁移子模型;所述状态迁移子模型中包含的页面为所述状态迁移子模型对应的目标客户端的可测试页面。
第二方面,本公开实施例还提供一种应用程序测试装置,包括:
获取模块,用于获取目标应用程序的当前状态迁移模型;所述当前状态迁移模型中记录有所述目标应用程序在本次测试中被测试过的页面的状态信息及状态迁移信息;
筛选模块,用于响应目标客户端的寻路请求,基于所述当前状态迁移模型中被测试过的页面的状态信息及状态迁移信息,确定与所述目标客户端当前测试到的第一页面之间存在预设层级的跳转关系的多个第二页面的剩余测试价值,并基于所述剩余测试价值,从所述多个第二页面中筛选出目标页面;
确定模块,用于确定从所述第一页面跳转至所述目标页面的目标操作路径;
发送模块,用于将所述目标操作路径发送给所述目标客户端,以使所述目标客户端基于所述目标操作路径从所述第一页面跳转到所述目标页面,并从所述目标页面进行测试。
一种可选的实施方式中,所述第二页面的状态信息包括第二页面的属性信息;
所述筛选模块在确定所述多个第二页面的剩余测试价值时,具体用于:
针对每个所述第二页面,基于所述第二页面的状态信息中,所述第二页面的属性信息,对所述第二页面中存在未执行操作的功能组件进行聚类,得到多个功能组件集合,并确定每个所述功能组件集合的线性抽象权重;
针对每个功能组件集合,确定所述功能组件集合中功能组件的数量;
基于所述功能组件集合中功能组件的数量、所述功能组件集合对应的每个操作对应的操作类型权重、所述功能组件集合对应的组件类型权重、以及所述功能组件集合的线性抽象权重,确定所述功能组件集合的测试价值;
基于每个所述功能组件集合的测试评价值,确定所述第二页面的剩余测试价值。
一种可选的实施方式中,所述第二页面的状态信息包括:所述第二页面对应的当前次访问的已测试代码,以及上一次访问所述第二页面的已测试代码;
所述筛选模块在确定所述多个第二页面的剩余测试价值时,具体用于:
基于所述多个第二页面分别对应的所述当前次访问的已测试代码,以及上一次访问所述第二页面的已测试代码,确定每个所述第二页面的代码覆盖增长度;
基于每个所述第二页面的所述代码覆盖增长度,确定所述多个第二页面分别对应的剩余测试价值。
一种可选的实施方式中,所述筛选模块在基于每个所述第二页面的所述代码覆盖增长度,确定所述多个第二页面分别对应的剩余测试价值时,具体用于:
将所述代码覆盖增长度大于0的第二页面标记为重要页面;
针对每个所述第二页面,基于每个所述第二页面的状态迁移信息,确定从所述第二页面能够跳转到的所述重要页面的第一数量;
基于所述第一数量以及预设的收益参数,确定每个所述第二页面的收益修正权重;
基于表征所述第二页面的访问次数的第二数量,与所述第一数量之差,以及预设的惩罚参数,确定每个所述第二页面的惩罚修正权重;
基于每个所述第二页面的所述代码覆盖增长度、所述收益修正权重以及所述惩罚修正权重,确定每个所述第二页面的剩余测试价值。
一种可选的实施方式中,所述确定模块具体用于:
基于所述第一页面与所述目标页面之间的每个页面的状态迁移信息中包含的页面跳转关系,确定多条从所述第一页面跳转至所述目标页面的候选操作路径;
将所需操作次数最少的所述候选操作路径作为所述目标操作路径。
一种可选的实施方式中,所述装置还包括:
更新模块,用于基于所述目标客户端在从所述目标页面进行测试时所测试到的其它页面的状态信息及状态迁移信息,更新所述当前状态迁移模型,得到更新后的状态迁移模型。
一种可选的实施方式中,所述确定模块还用于:
在不存在从所述第一页面跳转至所述目标页面的操作路径的情况下,基于所述当前状态迁移模型中的状态迁移信息,确定能够跳转到所述第一页面及所述目标页面的第三页面;
基于所述第三页面与所述目标页面之间的页面的状态迁移信息,生成从所述第三页面跳转至所述目标页面的备选操作路径;
所述发送模块还用于将所述备选操作路径发送至目标客户端,以使所述目标客户端从所述第一页面回退至所述第三页面后,基于所述备选操作路径从所述第三页面跳转到所述目标页面,并从所述目标页面进行测试。
一种可选的实施方式中,所述装置还包括客户端配置模块,用于:
将所述当前状态迁移模型切分为多个状态迁移子模型,并确定每个所述状态迁移子模型中包含的页面;
将用于测试所述目标应用程序的多个测试客户端中的每个测试客户端分别作为目标客户端;
为每个所述目标客户端分配不同的状态迁移子模型;所述状态迁移子模型中包含的页面为所述状态迁移子模型对应的目标客户端的可测试页面。
第三方面,本公开实施例还提供一种计算机设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
第四方面,本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
关于上述应用程序测试装置、计算机设备、及计算机可读存储介质的效果描述参见上述应用程序测试方法的说明,这里不再赘述。
本公开实施例提供的应用程序测试方法及装置,能够基于目标应用程序在本次测试中生成的状态迁移模型,从多个与第一页面之间存在预设层级的跳转关系的第二页面中筛选出目标页面,并生成从第一页面跳转至目标页面的操作路径,进而将包含操作路径的状态迁移子模型发送给目标客户端,使目标客户端基于操作路径从第一页面跳转到目标页面,并从目标页面进行测试。由于本公开实施例中状态迁移模型中记录有本次测试时每个被测试过的页面的状态信息和状态迁移信息,因此能够基于状态迁移模型选择出更具有测试价值的目标页面,比如对应的未执行操作更多的目标页面,并从目标页面开始测试,从而能够提高测试过程的有效性,进而提高测试的效率。
进一步,本公开实施例提供的应用程序测试方法,还可以通过服务器和多个客户端同时对目标应用程序进行测试,能够共用同一状态迁移模型,以实现分布式的测试,提高测试的效率。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本公开实施例所提供的一种应用程序测试方法的流程图;
图2示出了本公开实施例所提供的一种应用程序测试方法中,状态迁移模型的示意图;
图3示出了本公开实施例所提供的一种应用程序测试装置的示意图;
图4示出了本公开实施例所提供的一种计算机设备的示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
经研究发现,现有的针对应用程序的测试中,通常按照预设的测试逻辑进行测试,测试的操作路径通常比较单一,由测试的业务人员设计的逻辑进行控制,容易进行无效或效果较差的测试,效率较差,且智能化程度较低。
基于上述研究,本公开提供了一种应用程序测试方法及装置,能够基于状态迁移模型选择出更具有测试价值的目标页面,并从目标页面开始测试,进而减少测试过程中的无效或效果较差的测试,从而提高测试的效率。
针对以上方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本公开针对上述问题所提出的解决方案,都应该是发明人在本公开过程中对本公开做出的贡献。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种应用程序测试方法进行详细介绍,本公开实施例所提供的应用程序测试方法的执行主体一般为具有一定计算能力的计算机设备,该计算机设备例如包括:终端设备或服务器或其它处理设备,终端设备可以为用户设备(User Equipment,UE)、移动设备、用户终端、终端、蜂窝电话、无绳电话、个人数字处理(Personal Digital Assistant,PDA)、手持设备、计算设备、车载设备、可穿戴设备等。在一些可能的实现方式中,该应用程序测试方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
下面以执行主体为服务器为例对本公开实施例提供的应用程序测试方法加以说明。
参见图1所示,为本公开实施例提供的应用程序测试方法的流程图,所述方法包括步骤S101~S104,其中:
S101:获取目标应用程序的当前状态迁移模型;所述当前状态迁移模型中记录有所述目标应用程序在本次测试中被测试过的页面的状态信息及状态迁移信息。
该步骤中,服务器可以在本次测试中生成目标应用程序的状态迁移模型。状态迁移模型中可以包含表征页面对应的功能组件集合的节点,以及表征本次测试中页面之间的跳转操作的连接边。节点中可以包含其对应的页面的状态信息,连接边中可以包含页面的状态迁移信息。
其中,页面的状态信息可以包括页面中的功能组件的属性信息,如功能组件的身份标识及类型、功能组件对应的操作的属性信息、功能组件的树形结构,还可以包括本次测试时页面中已测试的代码、上次测试时页面中已测试的代码、页面中已被测试的操作等。状态迁移信息可以包括页面之间跳转所进行的操作,可以通过连接边的方向来表征状态迁移的起止节点,通过连接边内部储存操作的身份标识、类型等信息。
这里,目标应用程序的本次测试可以指针对目标应用程序的软件测试,在本次测试的过程中,当测试到一个页面中,服务器可以选择一个或一串未执行过的操作,目标客户端接收服务器选择的操作并执行,实现对当前的页面的测试,并受执行的操作的影响跳转到其他页面,再重复选取未执行的操作,在满足预设条件后,目标客户端可以向服务器发送寻路请求,服务器接收到寻路请求后可以基于当前状态迁移模型为客户端分配操作路径。
其中,预设条件可以是状态迁移模型中的节点数大于预设阈值。
在本次测试的过程中,目标客户端在访问到一个页面后,可以获取该页面的功能组件的树形结构,并将其发送至服务器,服务器在接收到目标客户端发送的属性结构后,可以将树形结构转换成状态迁移模型中的节点,一个节点中可以包括至少一个树形结构,与一个页面相对应,并根据访问该页面所进行的操作,生成包含状态迁移信息的连接边。在状态迁移模型当中,一个页面仅对应一个节点,页面间跳转的操作对应一条连接边。
S102:响应目标客户端的寻路请求,基于所述当前状态迁移模型中被测试过的页面的状态信息及状态迁移信息,确定与所述目标客户端当前测试到的第一页面之间存在预设层级的跳转关系的多个第二页面的剩余测试价值,并基于所述剩余测试价值,从所述多个第二页面中筛选出目标页面。
其中,第一页面可以是对目标应用程序的测试过程中,当前测试到的页面,比如,可以是存在于状态迁移模型中任一节点对应的页面,也可以是本次测试在满足预设条件时测试到的页面。在本次测试满足预设条件后,可以直接从当前的页面开始进行测试,或从本次测试中测试过的页面中选取一个页面作为第一页面。
该步骤中,针对第一页面,可以基于第一页面在状态迁移模型中对应的节点,确定出于第一页面之间存在预设层级的跳转关系的多个第二页面,其中,预设层级的跳转关系可以指从第一页面跳转到第二页面需要操作的数量为预设值,示例性的,预设层级可以设置为0-5,则从第一页面需要5个或以内操作数量的页面既可以确定为第二页面。
在确定了第二页面之后,由于状态迁移模型是根据本次测试的测试结果生成的,能够反映本次测试的测试效果,因此,可以根据第二页面的在状态迁移模型中对应节点的状态信息和状态迁移信息,从第二页面中筛选出对于本次测试的目标应用程序来说,剩余测试价值高的目标页面。
其中,剩余测试价值为能够表征页面中未进行过测试的操作或代码数量的值。在软件测试过程中,不会一次性的测试完一个页面中的所有操作,在一个页面当中通常仅执行一个或数个操作,因此,测试过的页面中可能仍然包括数量较多的未测试操作或代码。在一个页面中,未测试过的操作或代码数量越多,其剩余测试价值就越高。
S103:确定从所述第一页面跳转至所述目标页面的目标操作路径。
该步骤中,在确定目标页面之后,可以根据第一页面到目标页面之间每个页面的状态迁移信息,生成从第一页面跳转至目标页面的目标操作路径。
其中,状态迁移信息中指示有从一个页面跳转到另一个页面所需的操作,服务器可以根据第一页面到目标页面之间每个页面状态迁移信息,生成从第一页面跳转到目标页面之间的目标操作路径,执行目标操作路径指示的操作,即可从第一页面跳转至目标页面。若从第一页面跳转至目标页面的操作路径存在多条,则可以选择最短路径作为从第一页面跳转到目标页面之间的目标操作路径。
S104:将所述目标操作路径发送给所述目标客户端,以使所述目标客户端基于所述目标操作路径从所述第一页面跳转到所述目标页面,并从所述目标页面进行测试。
该步骤中,在确定好目标操作路径后,可以将目标操作路径发送至目标客户端,目标客户端在接收到目标操作路径后,可以根据目标操作路径跳转到目标页面,并从目标页面开始进行测试。由于目标页面的剩余测试价值最高,客户端从目标页面开始测试能够将测试收益最大化,降低了进行无效测试的概率,进而使测试的过程能够更加高效。
本公开实施例提供的应用程序测试方法,能够基于目标应用程序在本次测试中生成的状态迁移模型,从多个与第一页面之间存在预设层级的跳转关系的第二页面中筛选出目标页面,并生成从第一页面跳转至目标页面的操作路径,进而将目标操作路径发送给目标客户端,使目标客户端基于操作路径从第一页面跳转到目标页面,并从目标页面进行测试。由于本公开实施例中状态迁移模型中记录有本次测试时每个被测试过的页面的状态信息和状态迁移信息,因此能够基于状态迁移模型选择出更具有剩余测试价值的目标页面,比如对应的未执行操作更多的目标页面,并从目标页面开始测试,从而能够提高测试过程的有效性,进而提高测试的效率。
一种可选的实施方式中,所述第二页面的状态信息包括第二页面的属性信息;
确定所述多个第二页面的剩余测试价值,包括:
针对每个所述第二页面,基于所述第二页面的状态信息中,所述第二页面的属性信息,对所述第二页面中存在未执行操作的功能组件进行聚类,得到多个功能组件集合,并确定每个所述功能组件集合的线性抽象权重;
针对每个功能组件集合,确定所述功能组件集合中功能组件的数量;
基于所述功能组件集合中功能组件的数量、所述功能组件集合对应的每个操作对应的操作类型权重、所述功能组件集合对应的组件类型权重、以及所述功能组件集合的线性抽象权重,确定所述功能组件集合的测试价值;
基于每个所述功能组件集合的测试评价值,确定所述第二页面的剩余测试价值。
该步骤中,服务器可以响应目标客户端的寻路请求,第一页面为本次测试中的测试过的页面,可以在状态迁移模型中查找到第一页面对应的节点,并按照预设层级的跳转关系确定出多个第二页面,再根据第二页面的状态信息,计算每个第二页面的剩余测试价值,并选取剩余测试价值最高的页面作为目标页面。
该步骤中,可以先根据第二页面的状态信息中的属性信息,将第二页面中存在未执行操作的功能组件进行聚类,得到多个功能组件集合,每个功能组件集合对应一种类型。示例性的,可以按照功能组件的身份标识、分级、功能组件对应的操作类型进行聚类,并根据聚类结果确定功能组件集合的线性抽象权重。在一个页面中,未执行操作也多,剩余测试价值也就越高。
在确定线性抽象权重后,可以确定该功能组件集合中功能组件的数量,再确定功能组件集合中每个功能组件对应的操作类型权重、功能组件集合中功能组件的组件类型权重。
然后,基于功能组件集合中功能组件的数量、功能组件集合对应的每个操作对应的操作类型权重、功能组件集合对应的组件类型权重、以及功能组件集合的线性抽象权重,确定功能组件集合的测试价值。
最后,对每个功能组件集合的测试评价值进行求和,得到该第二页面的剩余测试价值。
其中,操作类型权重为功能组件集合中,功能组件可操作的类型对应的权重,由于功能组件的可操作类型可以为多个,因此操作类型权重也可能为多个。
示例性的,可以通过以下公式确定剩余测试价值:
f(s)=sum(f(w)×n×wt×(at0+at1+at…))
其中,f(s)表示剩余测试价值,f(w)表示线性抽象权重,n表示功能组件集合中功能组件的数量,wt表示功能组件集合对应的组件类型权重,ati表示第i个功能组件集合对应的操作对应的操作类型权重。
示例性的,组件类型权重可以按照功能组件的类别名称取归一值后进行分配,比如,若一功能组件的类别名称为“view”,其归一值后分配的权重可以是“2”;操作类型权重可以根据类型分配,比如,“长按、点击”操作的权重可以是“3”、“输入、删除”的权重可以是“2”。
一种可选的实施方式中,所述第二页面的状态信息包括:所述第二页面对应的当前次访问的已测试代码,以及上一次访问所述第二页面的已测试代码;确定所述多个第二页面的剩余测试价值,包括:
基于所述多个第二页面分别对应的所述当前次访问的已测试代码,以及上一次访问所述第二页面的已测试代码,确定每个所述第二页面的代码覆盖增长度;
基于每个所述第二页面的所述代码覆盖增长度,确定所述多个第二页面分别对应的剩余测试价值。
其中,代码覆盖增长度为当前次访问第二页面时的已测试代码相较于上一次访问第二页面时的已测试代码的增长程度。代码覆盖增长度越高,说明该页面一次测试能够测试的代码越多,剩余测试价值也越高。
在一种可能的实施方式中,基于每个所述第二页面的所述代码覆盖增长度,确定所述多个第二页面分别对应的剩余测试价值,包括:
将所述代码覆盖增长度大于0的第二页面标记为重要页面;
针对每个所述第二页面,基于每个所述第二页面的状态迁移信息,确定从所述第二页面能够跳转到的所述重要页面的第一数量;
基于所述第一数量以及预设的收益参数,确定每个所述第二页面的收益修正权重;
基于表征所述第二页面的访问次数的第二数量,与所述第一数量之差,以及预设的惩罚参数,确定每个所述第二页面的惩罚修正权重;
基于每个所述第二页面的所述代码覆盖增长度、所述收益修正权重以及所述惩罚修正权重,确定每个所述第二页面的剩余测试价值。
示例性的,可以通过下述公式确定第二页面的剩余测试价值:
f(s)=f0×(1+r)w(s)×(1-p)(v(s)-w(s))
其中,f(s)为剩余测试价值,f0为第二页面的代码覆盖增长度,r为收益参数,p为惩罚参数,w(s)为第一数量,v(s)为第二数量,(1+r)w(s)为收益修正权重,(1-p)(v(s)-w(s))为惩罚修正权重。
其中,r随测试的时间正向增长,表示越到测试后期,代码增长度的收益越高,页面越重要,p随测试的测试时间负向增长,表示越是测试前期,重复访问页面次数越多页面越不重要。
一种可选的实施方式中,确定从所述第一页面跳转至所述目标页面的目标操作路径,包括:
基于所述第一页面与所述目标页面之间的每个页面的状态迁移信息中包含的页面跳转关系,确定多条从所述第一页面跳转至所述目标页面的候选操作路径;
将所需操作次数最少的所述候选操作路径作为所述目标操作路径。
该步骤中,由于状态迁移信息中包含有页面跳转对应的操作,因此存在页面跳转关系,服务器可以利用寻路算法,根据第一页面与目标页面之间的每个页面的状态迁移信息中包含的页面跳转关系,确定多条从第一页面跳转至目标页面的候选操作路径。
示例性的,寻路算法可以是A*算法。
在确定了候选操作路径之后,可以将所需操作次数最少的候选操作路径作为第一页面跳转至目标页面的目标操作路径。
在确定目标操作路径之后,可以将目标操作路径中的各个操作按照顺序写入到操作栈中,以栈的发送给目标客户端。
一种可选的实施方式中,将所述目标操作路径发送给所述目标客户端之后,所述方法还包括:
基于所述目标客户端在从所述目标页面进行测试时所测试到的其它页面的状态信息及状态迁移信息,更新所述当前状态迁移模型,得到更新后的状态迁移模型,得到更新后的状态迁移模型。
该步骤中,可以根据目标客户端在测试的过程中收集到的其他页面的状态信息及状态迁移信息,更新状态迁移模型,使状态迁移模型中包括的节点更多,与目标应用程序更接近,并将更新的状态迁移模型用于寻找目标页面。
进一步的,状态迁移模型可以被多个客户端共用,每当有客户端进行测试时,都会对状态迁移模型进行更新。
对于多个客户端同时进行测试的情况下,若存在两个客户端的目标页面相同时,则可以将其中一个客户端的目标页面修改为剩余测试价值次高的页面,防止不同客户端之间产生冲突。
一种可选的实施方式中,所述方法还包括:
在不存在从所述第一页面跳转至所述目标页面的操作路径的情况下,基于所述当前状态迁移模型中的状态迁移信息,确定能够跳转到所述第一页面及所述目标页面的第三页面;
基于所述第三页面与所述目标页面之间的页面的状态迁移信息,生成从所述第三页面跳转至所述目标页面的备选操作路径;
将所述备选操作路径发送至目标客户端,以使所述目标客户端从所述第一页面回退至所述第三页面后,基于所述备选操作路径从所述第三页面跳转到所述目标页面,并从所述目标页面进行测试。
该步骤中,若不存在从第一页面跳转至目标页面的操作路径,则可以确定同时能够跳转到第一页面与目标页面的第三页面,并生成从第三页面跳转至目标页面的备选操作路径,并将包含备选操作路径的状态迁移子模型发送至目标客户端,使目标客户端利用回滚操作返回至第三页面,再从第三页面跳转至目标页面。
在一种可能的实施方式中,在响应目标客户端的寻路请求之前,所述方法还包括:
将所述当前状态迁移模型切分为多个状态迁移子模型,并确定每个所述状态迁移子模型中包含的页面;
将用于测试所述目标应用程序的多个测试客户端中的每个测试客户端分别作为目标客户端;
为每个所述目标客户端分配不同的状态迁移子模型;所述状态迁移子模型中包含的页面为所述状态迁移子模型对应的目标客户端的可测试页面。
该步骤中,服务器可以同时为多个目标客户端确定目标页面,多个目标客户端同时对目标应用程序进行测试,目标客户端仅在于自身对应的状态迁移子模型中包含的页面中进行目标页面的搜索,不同的目标客户端的可测试页面互不相同。
这里,在服务器为目标客户端分配状态迁移子模型时,可以根据目标客户端的计算能力,为目标客户端分配合适的状态迁移子模型,比如,计算能力强、负载较低的目标客户端分配到的状态迁移子模型中,可以包括较多的节点。
这样,通过设置多个目标客户端,同时对目标应用程序进行分布式测试,能够在一定的时间内测试更多的页面,测试效率高。
进一步的,若服务器在同一时刻为至少两个目标客户端分配了相同的目标页面,服务器则可以对多个目标客户端之间进行协调。示例性的,若目标页面中未测试过的操作较多,或未测试过的操作之间互不关联,则可以让上述至少两个目标客户端选择不同的操作进行测试;或者,按照多个第二页面的剩余测试价值高低的顺序,为每个目标客户端分配不同的剩余测试价值较高的目标页面。
这样,能够防止多个目标客户端同时对同一页面的同一操作进行测试,避免多个目标客户端之间发生冲突,保证多个目标客户端之间能够协同合作,能够为每个目标客户端提供当前可选的最优目标页面。
参照图2所示,为本公开实施例提供的一种应用程序的测试方法中状态迁移模型的示意图。图2中包括节点A、节点B、节点C、节点D、节点E、连接边ac、连接边bc、连接边da、连接边ec、连接边aa、连接边be、连接边cb、连接边de。节点A为第一页面,经过计算得到节点E为目标页面,操作路径则为ac-cb-be。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与应用程序测试方法对应的应用程序测试装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述应用程序测试方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
参照图3所示,为本公开实施例提供的一种应用程序测试装置的架构示意图,所述应用程序测试装置300包括:
获取模块310,用于获取目标应用程序的当前状态迁移模型;所述当前状态迁移模型中记录有所述目标应用程序在本次测试中被测试过的页面的状态信息及状态迁移信息;
筛选模块320,用于响应目标客户端的寻路请求,基于所述当前状态迁移模型中被测试过的页面的状态信息及状态迁移信息,确定与所述目标客户端当前测试到的第一页面之间存在预设层级的跳转关系的多个第二页面的剩余测试价值,并基于所述剩余测试价值,从所述多个第二页面中筛选出目标页面;
确定模块330,用于确定从所述第一页面跳转至所述目标页面的目标操作路径;
发送模块340,用于将所述目标操作路径发送给所述目标客户端,以使所述目标客户端基于所述目标操作路径从所述第一页面跳转到所述目标页面,并从所述目标页面进行测试。
一种可选的实施方式中,所述第二页面的状态信息包括第二页面的属性信息;
所述筛选模块320在确定所述多个第二页面的剩余测试价值时,具体用于:
针对每个所述第二页面,基于所述第二页面的状态信息中,所述第二页面的属性信息,对所述第二页面中存在未执行操作的功能组件进行聚类,得到多个功能组件集合,并确定每个所述功能组件集合的线性抽象权重;
针对每个功能组件集合,确定所述功能组件集合中功能组件的数量;
基于所述功能组件集合中功能组件的数量、所述功能组件集合对应的每个操作对应的操作类型权重、所述功能组件集合对应的组件类型权重、以及所述功能组件集合的线性抽象权重,确定所述功能组件集合的测试价值;
基于每个所述功能组件集合的测试评价值,确定所述第二页面的剩余测试价值。
一种可选的实施方式中,所述第二页面的状态信息包括:所述第二页面对应的当前次访问的已测试代码,以及上一次访问所述第二页面的已测试代码;
所述筛选模块320在确定所述多个第二页面的剩余测试价值时,具体用于:
基于所述多个第二页面分别对应的所述当前次访问的已测试代码,以及上一次访问所述第二页面的已测试代码,确定每个所述第二页面的代码覆盖增长度;
基于每个所述第二页面的所述代码覆盖增长度,确定所述多个第二页面分别对应的剩余测试价值。
一种可选的实施方式中,所述筛选模块320在基于每个所述第二页面的所述代码覆盖增长度,确定所述多个第二页面分别对应的剩余测试价值时,具体用于:
将所述代码覆盖增长度大于0的第二页面标记为重要页面;
针对每个所述第二页面,基于每个所述第二页面的状态迁移信息,确定从所述第二页面能够跳转到的所述重要页面的第一数量;
基于所述第一数量以及预设的收益参数,确定每个所述第二页面的收益修正权重;
基于表征所述第二页面的访问次数的第二数量,与所述第一数量之差,以及预设的惩罚参数,确定每个所述第二页面的惩罚修正权重;
基于每个所述第二页面的所述代码覆盖增长度、所述收益修正权重以及所述惩罚修正权重,确定每个所述第二页面的剩余测试价值。
一种可选的实施方式中,所述确定模块330具体用于:
基于所述第一页面与所述目标页面之间的每个页面的状态迁移信息中包含的页面跳转关系,确定多条从所述第一页面跳转至所述目标页面的候选操作路径;
将所需操作次数最少的所述候选操作路径作为所述目标操作路径。
一种可选的实施方式中,所述应用程序测试装置300还包括:
更新模块350,用于基于所述目标客户端在从所述目标页面进行测试时所测试到的其它页面的状态信息及状态迁移信息,更新所述当前状态迁移模型,得到更新后的状态迁移模型。
一种可选的实施方式中,所述确定模块330还用于:
在不存在从所述第一页面跳转至所述目标页面的操作路径的情况下,基于所述当前状态迁移模型中的状态迁移信息,确定能够跳转到所述第一页面及所述目标页面的第三页面;
基于所述第三页面与所述目标页面之间的页面的状态迁移信息,生成从所述第三页面跳转至所述目标页面的备选操作路径;
所述发送模块340还用于将所述备选操作路径发送至目标客户端,以使所述目标客户端从所述第一页面回退至所述第三页面后,基于所述备选操作路径从所述第三页面跳转到所述目标页面,并从所述目标页面进行测试。
一种可选的实施方式中,所述应用程序测试装置300还包括客户端配置模块360,用于:
将所述当前状态迁移模型切分为多个状态迁移子模型,并确定每个所述状态迁移子模型中包含的页面;
将用于测试所述目标应用程序的多个测试客户端中的每个测试客户端分别作为目标客户端;
为每个所述目标客户端分配不同的状态迁移子模型;所述状态迁移子模型中包含的页面为所述状态迁移子模型对应的目标客户端的可测试页面
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
基于同一技术构思,本公开实施例还提供了一种计算机设备。参照图4所示,为本公开实施例提供的计算机设备400的结构示意图,包括处理器401、存储器402、和总线403。其中,存储器402用于存储执行指令,包括内存4021和外部存储器4022;这里的内存4021也称内存储器,用于暂时存放处理器401中的运算数据,以及与硬盘等外部存储器4022交换的数据,处理器401通过内存4021与外部存储器4022进行数据交换,当计算机设备400运行时,处理器401与存储器402之间通过总线403通信,使得处理器401在执行以下指令:
获取目标应用程序的当前状态迁移模型;所述当前状态迁移模型中记录有所述目标应用程序在本次测试中被测试过的页面的状态信息及状态迁移信息;
响应目标客户端的寻路请求,基于所述当前状态迁移模型中被测试过的页面的状态信息及状态迁移信息,确定与所述目标客户端当前测试到的第一页面之间存在预设层级的跳转关系的多个第二页面的剩余测试价值,并基于所述剩余测试价值,从所述多个第二页面中筛选出目标页面;
确定从所述第一页面跳转至所述目标页面的目标操作路径;
将所述目标操作路径发送给所述目标客户端,以使所述目标客户端基于所述目标操作路径从所述第一页面跳转到所述目标页面,并从所述目标页面进行测试。
一种可能的实施方式中,处理器401执行的指令中,所述第二页面的状态信息包括第二页面的属性信息;
确定所述多个第二页面的剩余测试价值,包括:
针对每个所述第二页面,基于所述第二页面的状态信息中,所述第二页面的属性信息,对所述第二页面中存在未执行操作的功能组件进行聚类,得到多个功能组件集合,并确定每个所述功能组件集合的线性抽象权重;
针对每个功能组件集合,确定所述功能组件集合中功能组件的数量;
基于所述功能组件集合中功能组件的数量、所述功能组件集合对应的每个操作对应的操作类型权重、所述功能组件集合对应的组件类型权重、以及所述功能组件集合的线性抽象权重,确定所述功能组件集合的测试价值;
基于每个所述功能组件集合的测试评价值,确定所述第二页面的剩余测试价值。
一种可能的实施方式中,处理器401执行的指令中,所述第二页面的状态信息包括:所述第二页面对应的当前次访问的已测试代码,以及上一次访问所述第二页面的已测试代码;
确定所述多个第二页面的剩余测试价值,包括:
基于所述多个第二页面分别对应的所述当前次访问的已测试代码,以及上一次访问所述第二页面的已测试代码,确定每个所述第二页面的代码覆盖增长度;
基于每个所述第二页面的所述代码覆盖增长度,确定所述多个第二页面分别对应的剩余测试价值。
一种可能的实施方式中,处理器401执行的指令中,基于每个所述第二页面的所述代码覆盖增长度,确定所述多个第二页面分别对应的剩余测试价值,包括:
将所述代码覆盖增长度大于0的第二页面标记为重要页面;
针对每个所述第二页面,基于每个所述第二页面的状态迁移信息,确定从所述第二页面能够跳转到的所述重要页面的第一数量;
基于所述第一数量以及预设的收益参数,确定每个所述第二页面的收益修正权重;
基于表征所述第二页面的访问次数的第二数量,与所述第一数量之差,以及预设的惩罚参数,确定每个所述第二页面的惩罚修正权重;
基于每个所述第二页面的所述代码覆盖增长度、所述收益修正权重以及所述惩罚修正权重,确定每个所述第二页面的剩余测试价值。
一种可能的实施方式中,处理器401执行的指令中,确定从所述第一页面跳转至所述目标页面的目标操作路径,包括:
基于所述第一页面与所述目标页面之间的每个页面的状态迁移信息中包含的页面跳转关系,确定多条从所述第一页面跳转至所述目标页面的候选操作路径;
将所需操作次数最少的所述候选操作路径作为所述目标操作路径。
一种可能的实施方式中,处理器401执行将所述目标操作路径发送给所述目标客户端之后,还执行:
基于所述目标客户端在从所述目标页面进行测试时所测试到的其它页面的状态信息及状态迁移信息,更新所述当前状态迁移模型,得到更新后的状态迁移模型,得到更新后的状态迁移模型。
一种可能的实施方式中,处理器401还执行:
在不存在从所述第一页面跳转至所述目标页面的操作路径的情况下,基于所述当前状态迁移模型中的状态迁移信息,确定能够跳转到所述第一页面及所述目标页面的第三页面;
基于所述第三页面与所述目标页面之间的页面的状态迁移信息,生成从所述第三页面跳转至所述目标页面的备选操作路径;
将所述备选操作路径发送至目标客户端,以使所述目标客户端从所述第一页面回退至所述第三页面后,基于所述备选操作路径从所述第三页面跳转到所述目标页面,并从所述目标页面进行测试。
一种可能的实施方式中,处理器401在响应目标客户端的寻路请求之前,还执行:
将所述当前状态迁移模型切分为多个状态迁移子模型,并确定每个所述状态迁移子模型中包含的页面;
将用于测试所述目标应用程序的多个测试客户端中的每个测试客户端分别作为目标客户端;
为每个所述目标客户端分配不同的状态迁移子模型;所述状态迁移子模型中包含的页面为所述状态迁移子模型对应的目标客户端的可测试页面。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的应用程序测试方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例所提供的应用程序测试方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行上述方法实施例中所述的应用程序测试方法的步骤,具体可参见上述方法实施例,在此不再赘述。
本公开实施例还提供一种计算机程序,该计算机程序被处理器执行时实现前述实施例的任意一种方法。该计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software DevelopmentKit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。