具体实施方式
下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
应当理解,本公开的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本公开的范围在此方面不受限制。
本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。
需要注意,本公开中提及的“第一”、“第二”等概念仅用于对装置、模块或单元进行区分,并非用于限定这些装置、模块或单元一定为不同的装置、模块或单元,也并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
需要注意,本公开中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
本公开实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。
下面以具体地实施例对本公开的技术方案以及本公开的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本公开的实施例进行描述。
本公开实施例提供了一种应用程序测试方法,由电子设备执行,该电子设备可以为终端设备,也可以为服务器,如图1所示,该方法包括步骤S101-步骤S103。
步骤S101,在对目标应用程序的测试过程中,确定目标应用程序的当前显示界面支持的各个操作对应的收益值。
其中,收益值表征对应操作所导致的代码覆盖率的大小,即收益值与对应操作所导致的代码覆盖率的大小成正比。
需要说明的是,当前显示界面上包括至少一个控件,每一个控件可以对应至少一个操作,例如,一个控件可以对应单击操作和长按操作。因此,当前显示界面支持至少一个操作。
本公开实施例中,任一个操作对应的收益值与该操作所导致的代码覆盖率的大小成正比。在对目标应用程序的测试过程中,代码覆盖率通过已执行的代码来表示,可以用于度量测试完整性。
步骤S102,利用各个操作对应的收益值,从各个操作中选择目标操作。
本公开实施例及下述实施例中,显示界面支持的操作,也可表述为显示界面上的操作。针对当前显示界面上的至少一个操作,利用各个操作对应的收益值,从各个操作中选择目标操作。
例如,当前显示界面上包括操作1-4,可以利用操作1-4各自对应的收益值,从操作1-4中选择一个操作,作为目标操作,如选择操作2作为目标操作。
步骤S103,对当前显示界面执行目标操作。
本公开实施例中,当前显示界面存在至少一个操作,该至少一个操作中包括目标操作,对当前显示界面执行该目标操作,可以得到下一个显示界面。
例如,当前显示界面上包括操作1-4,其中,操作2作为目标操作,则可以对当前显示界面执行操作2,得到下一个显示界面。
进一步地,对当前显示界面执行目标操作,得到下一显示界面,循环执行将下一显示界面作为当前显示界面、确定目标应用程序的当前显示界面支持的各个操作对应的收益值及其后续步骤,直至满足预设的测试停止条件为止。
其中,预设的测试停止条件可以为达到预设时长如6小时,也可以为达到预设的覆盖率条件,如代码覆盖率达到85%,还可以为其他测试停止条件,如达到预设循环次数,在此不做限定。
本公开实施例提供了一种应用程序测试方法,与现有技术相比,本公开实施例在对目标应用程序的测试过程中,先确定目标应用程序的当前显示界面支持的各个操作对应的收益值,收益值表征对应操作所导致的代码覆盖率的大小,然后利用各个操作对应的收益值,从各个操作中选择目标操作,该目标操作是依据收益值选择得到的,使得目标操作可以为代码覆盖率较大的操作,而非随机选择的操作,进一步地,对当前显示界面执行目标操作。在测试过程中,每次选择的目标操作均可以为代码覆盖率较大的操作,因此测试停止时代码覆盖率较高,相应地,应用程序的测试质量也较高。
本公开实施例的另一种可能实现方式,步骤S101中,确定目标应用程序的当前显示界面支持的各个操作对应的收益值,包括步骤S1011和步骤S1012。
步骤S1011,当当前显示界面支持的各个操作中存在至少一个未被执行过的操作时,提取目标应用程序的当前显示界面支持的各个操作的描述信息。其中,描述信息包括对应操作的位置信息和类型信息。
本公开实施例及后续实施例中,可以从显示界面的关于控件的代码信息中提取显示界面上的各个操作的描述信息。具体地,显示界面对应一个树状结构,该树状结构用于描述显示界面中各个控件之间的父子关系,树状结构中的每一节点对应显示界面中的一个控件。遍历树状结构中的每一节点,将遍历到的当前节点对应的控件作为待选控件,若确定待选控件的控件类型为预设控件类型集合中的一种控件类型,则将待选控件作为目标控件,并从显示界面的关于控件的代码信息中,提取目标控件的控件信息。
需要说明的是,显示界面的关于控件的代码信息可以为可扩展标记语言(Extensible Markup Language,XML)的代码信息,树状结构中包括叶子节点和非叶子节点,由于目标控件是从树状结构中的各个节点对应的控件中确定的,因此,目标控件可以为叶子节点对应的控件,也可以为非叶子节点对应的控件。预设控件类型集合中的控件类型可以包括文本(TextView)类控件、图片(ImageView)类控件、以及除TextView类控件和ImageView类控件以外的可视(View)类控件。
其中,目标控件的控件信息包括目标控件对应的操作的操作类型和目标控件在显示界面上的位置信息。对于每一个目标控件,将该目标控件对应的操作即为显示界面上的操作,将该目标控件对应的操作作为预设操作,预设操作的操作类型即为显示界面上的预设操作的类型信息,且该目标控件在显示界面上的位置信息即为预设操作的位置信息。
例如,目标控件A对应操作1-2,则显示界面上包含操作1-2,则目标控件A对应的操作1-2各自的操作类型,即为显示界面上的操作1-2各自的类型信息,目标控件A在显示界面上的位置信息,即为显示界面上的操作1-2各自的位置信息。
需要说明的是,当当前显示界面上的各个操作中存在至少一个未被执行过的操作时,可以按照上述方式,提取当前显示界面上的各个操作的描述信息,即提取当前显示界面上的各个操作的、位置信息和类型信息。
步骤S1012,将当前显示界面支持的各个操作的描述信息作为输入信息,利用神经网络模型输出当前显示界面上的各个操作对应的收益值。
本公开实施例中,可以将当前显示界面上的各个操作的描述信息输入至神经网络模型中,由神经网络模型输出当前显示界面上的各个操作对应的收益值。该收益值可以为概率值,如收益值为0.3。
需要说明的是,该神经网络模型可以为强化学习模型,该强化学习模型可以为近端策略优化(Proximal Policy Optimization,PPO)模型,或者PPO2模型等,在此不做限定。
以神经网络模型为PPO2模型为例,该模型可以包含策略子网络(Policy Network)和价值子网络(Value Network)。本公开实施例中,可以将当前显示界面上的各个操作的描述信息输入至PPO2模型中,由Policy Network输出当前显示界面上的各个操作对应的收益值。
需要说明的是,可以由显示界面上的各个操作的描述信息生成该显示界面的页面描述信息,页面描述信息描述了对应显示界面上的各个目标控件的类型信息以及各个目标控件在该样本页面中的位置信息,目标控件是预设控件类型集合中的一种控件类型下的控件。
如图2所示,该页面描述信息中包括标号21、22各自所指向的区域,标号21所指向的区域表示一个目标控件,标号22所指向的区域表示另一个目标控件,可以通过目标控件的颜色信息判断任两个目标控件是否为相同控件类型的控件,如图2中,标号21、22各自所指向的区域中的颜色信息一致,则该两个目标控件为相同控件类型的控件。
本公开实施例的另一种可能实现方式,该方法还包括步骤S104。
步骤S104,针对与当前显示界面相关的预设数目个在前显示界面,获取每个在前显示界面各自支持的各个操作的描述信息以及在每个在前显示界面上已测试执行操作的描述信息。
即,对于每一个在前显示界面,确定该在前显示界面上的各个操作的描述信息以及对该在前显示界面的已执行操作的描述信息。
其中,在前显示界面为从预设显示界面变至当前显示界面的过程中除当前显示界面之外的任一显示界面,预设显示界面为当前显示界面的前预设数量个显示界面,预设数量可以取值为任一正整数。
本公开实施例中,在前显示界面为从预设显示界面变至当前显示界面的过程中除当前显示界面之外的任一显示界面。
例如,对显示界面1进行操作1,可以变化至显示界面2,对显示界面2进行操作2,可以变化至显示界面3,等等。若预设数量为2,则当当前显示界面为显示界面5时,预设显示界面为显示界面3,在前显示界面为显示界面3和显示界面4;当当前显示界面为显示界面3时,预设显示界面为显示界面1,在前显示界面为显示界面1和显示界面2。
本公开实施例中,可以按照步骤S1011中的方式,对于每一个在前显示界面,从该在前显示界面的关于控件的代码信息中提取该在前显示界面上的各个操作的描述信息。
本公开实施例中,对于每一个在前显示界面,可以从该在前显示界面的关于界面操作的代码信息中,提取对该在前显示界面的已测试执行操作的描述信息。其中,对该在前显示界面的已测试执行操作的描述信息包括对该在前显示界面已测试执行操作的操作位置和对该在前显示界面已测试执行操作的操作类型,该操作类型可以为点击类型、长按类型、滑动类型等中的任一项。
接上例,当当前显示界面为显示界面3,预设显示界面为显示界面1,在前显示界面为显示界面1和显示界面2时,则可以确定显示界面1上的各个操作的描述信息以及对显示界面1已执行的操作1的描述信息、确定显示界面2上的各个操作的描述信息以及对显示界面2已测试执行的操作2的描述信息。
对应地,步骤S1012,即将当前显示界面支持的各个操作的描述信息作为输入信息,利用神经网络模型输出当前显示界面支持的各个操作对应的收益值,具体可以包括步骤S10121。
步骤S10121,将每个在前显示界面各自支持的各个操作的描述信息、在每个在前显示界面上已测试执行操作的描述信息、以及当前显示界面支持的各个操作的描述信息,作为输入信息,利用神经网络模型输出当前显示界面支持的各个操作对应的收益值。
本公开实施例中,可以将每个在前显示界面各自支持的各个操作的描述信息、在每个在前显示界面上已测试执行操作的描述信息、以及当前显示界面支持的各个操作的描述信息,作为输入信息,输入至神经网络模型中,该神经网络模型输出当前显示界面上的各个操作对应的收益值。
再接上例,当当前显示界面为显示界面3,预设显示界面为显示界面1,在前显示界面为显示界面1和显示界面2时,可以将显示界面1上的各个操作的描述信息、显示界面2上的各个操作的描述信息、操作1的描述信息、操作2的描述信息、以及显示界面3上的各个操作的描述信息,输入至神经网络模型,该神经网络模型输出显示界面3上的各个操作对应的收益值。
其中,当神经网络模型为PPO2模型时,可以将每个在前显示界面各自支持的各个操作的描述信息、在每个在前显示界面上已测试执行操作的描述信息、以及当前显示界面支持的各个操作的描述信息,作为输入信息,输入至PPO2模型中,由Policy Network输出当前显示界面上的各个操作对应的收益值。
本公开实施例的另一种可能实现方式,步骤S102中,利用各个操作对应的收益值,从各个操作中选择目标操作,具体可以包括步骤S1021和步骤S1022。
步骤S1021,从各个操作对应的收益值中,确定各个未被执行过的操作的收益值。
本公开实施例中,由于对当前显示界面执行目标操作得到下一显示界面,该下一显示界面作为当前显示界面,循环执行对当前显示界面执行目标操作得到下一显示界面的步骤,因此,在测试过程中,同一个显示界面可能会重复测试。
例如,在测试过程中,对显示界面1执行查看操作得到显示界面2,对显示界面2执行返回操作得到显示界面1,再对显示界面1执行返回操作,得到显示界面3等。在该过程中,显示界面1被测试两次。
在实际测试过程中,同一个显示界面可能会被重复测试多次,每次对该显示界面进行测试时,可以记录对该显示界面所执行的目标操作的已执行次数,该显示界面中任一操作的已执行次数不为0时,该任一操作为已被执行过的操作,该显示界面中任一操作的已执行次数为0时,该任一操作为未被执行过的操作。
例如,当前显示界面中包括操作1-5,其中,操作1-3的已执行次数为0,操作4、5的已执行次数不为0,则操作1-3为未被执行过的操作,操作4、5为已被执行过的操作。
本公开实施例中,通过确定各个操作的已执行次数,从各个操作中选择至少一个未被执行过的操作,从各个操作对应的收益值中,确定各个未被执行过的操作的收益值。
步骤S1022,利用各个未被执行过的操作的收益值,从各个未被执行过的操作中选择目标操作。
本公开实施例中,可以从各个未被执行过的操作的收益值中确定最大收益值,将该最大收益值对应的未被执行过的操作作为目标操作。
例如,操作1-3为未被执行过的操作,其中,操作1的收益值为0.7,操作2的收益值为0.1,操作3的收益值为0.2,则最大收益值0.7对应的操作(未被执行过的操作),作为目标操作。
本公开实施例的另一种可能实现方式,步骤S101中,确定目标应用程序的当前显示界面支持的各个操作对应的收益值,具体可以包括步骤S1013、步骤S1014和步骤S1015。
步骤S1013,当各个操作中不存在未被执行过的操作时,确定次数信息。其中,次数信息包括当前显示界面支持的各个操作在测试过程中的已执行次数,收益值与对应操作的已执行次数的值大小成反比。
需要说明的是,收益值与对应操作所导致的代码覆盖率的大小成正比,与对应操作的已执行次数的值大小成反比。
在本公开实施例中,当前显示界面上的各个操作中不存在未被执行过的操作时,确定各个操作在测试过程中的已执行次数。
例如,当前显示界面中包括操作1-5,且操作1-5的已执行次数均不为0,则当前显示界面上的操作1-5中不存在未被执行过的操作,分别确定操作1-5在测试过程中的已执行次数。
本公开实施例中,次数信息还包括父操作在测试过程中的已执行次数。其中,父操作是在当前显示界面的上一显示界面上所执行的操作,且父操作用于使上一显示界面切换至当前显示界面。
本公开实施例,对上一显示界面执行上一显示界面中的目标操作时,可以得到当前显示界面,则该上一显示界面中的目标操作为父操作。
例如,对显示界面1执行操作0得到显示界面2,其中,显示界面2为当前显示界面,则操作0为父操作。
可以理解的,当前显示界面的上一显示界面可以为至少一个,因此,父操作也为至少一个,对应地,次数信息中包括各个父操作在测试过程中的已执行次数。
步骤S1014,确定当前显示界面支持的各个操作的价值信息,价值信息表征了对应操作所导致的代码覆盖率的增长程度。其中,步骤S1014具体可以包括步骤S10141。
步骤S10141,确定预设价值表中记录的当前显示界面支持的各个操作的价值信息。
本公开实施例中,预设价值表中记录测试过程中的每一个显示界面上的、各个已测试执行过的操作的价值信息。当当前显示界面上的各个操作中不存在未被执行过的操作时,即当前显示界面上的各个操作均是已被执行过的操作时,预设价值表中记录有当前显示界面上各个操作的价值信息。
其中,预设价值表是按照方式A1-方式A3得到的。
方式A1,将在测试过程中的每一个当前显示界面作为第一显示界面,当每得到一个第一显示界面时,生成对该第一显示界面执行目标操作的价值信息,作为参考价值信息。
本公开实施例中,针对测试过程中的每一个当前显示界面,将该当前显示界面作为第一显示界面,对于每一个第一显示界面,将该第一显示界面上的各个操作的描述信息输入至神经网络模型中,由神经网络模型输出对该第一显示界面执行目标操作的参考价值信息。
其中,当神经网络模型为PPO2模型时,可以将该第一显示界面上的各个操作的描述信息输入至PPO2模型,也可以每个在前显示界面各自支持的各个操作的描述信息、在每个在前显示界面上已测试执行操作的描述信息、第一显示界面上的各个操作的描述信息输入至PPO2模型。此时,PPO2模型存在两种可能的输出方式,分别记为方式B1和方式B2。
方式B1,当第一显示界面上的各个操作中存在至少一个未被执行过的操作时,由Policy Network输出第一显示界面上的各个操作对应的收益值,由Value Network输出对该第一显示界面执行目标操作的参考价值信息。
方式B2,当第一显示界面上的各个操作中不存在未被执行过的操作时,由ValueNetwork输出对该第一显示界面执行目标操作的参考价值信息,此时,Policy Network无输出或输出视为无效输出。
可以理解的是,在方式A1中,第一显示界面为当前显示界面。针对当前显示界面,一方面,按照步骤S1012/步骤S10121的方式,或者按照步骤S1013-S1015的方式,得到当前显示界面上的各个操作对应的收益值,从而利用步骤S102的方式确定目标操作,另一方面,按照方式A1得到对当前显示界面执行目标操作的价值信息。
当由PPO2网络得到当前显示界面上的各个操作对应的收益值以及对当前显示界面执行目标操作的价值信息(该价值信息作为参考价值信息)时,参考价值信息对应的目标操作可以为当前显示界面上的任一个操作,即该参考价值信息是执行当前显示界面上的某一个操作(视为目标操作)的价值信息,该价值信息作为一个参考值。因此,参考价值信息对应的目标操作可以不等同于步骤S102中的目标操作,也可以等同于步骤S102中的目标操作。
需要说明的是,第一显示界面包括至少一个操作,目标操作是从该至少一个操作中选择得到的,因此,第一显示界面包括目标操作,对第一显示界面执行目标操作,得到下一显示界面。
如图3所示,显示界面A-D中的任一个显示界面均可以作为第一显示界面,显示界面A包括操作A1-A3,其中,显示界面A上的目标操作为操作A2,对显示界面A执行目标操作A2,得到显示界面B。类似地,显示界面B包括操作B1、B2,显示界面B上的目标操作为操作B1,对显示界面B执行目标操作B1,得到显示界面C;显示界面C包括操作C1-C4,显示界面C上的目标操作为操作C2,对显示界面C执行目标操作C2,得到显示界面D;显示界面D包括操作D1-D3,显示界面D上的目标操作为操作D1-D3中的任一个。
方式A2,利用参考价值信息更新对每一第二显示界面执行目标操作的价值信息。
其中,第二显示界面为从初始显示界面变化至该第一显示界面的过程中除第一显示界面之外的任一显示界面,初始显示界面为测试过程中的第一个显示界面。
本公开实施例中,将测试过程中的第一个显示界面作为初始显示界面,从初始显示界面变化至第一显示界面的过程中除第一显示界面之外的每一个显示界面,均为第二显示界面。
如图3所示,若显示界面A为初始显示界面,则当第一显示界面为显示界面C时,第二显示界面包括显示界面A和B;当第一显示界面为显示界面D时,第二显示界面包括显示界面A-C。
具体地,方式A2中,利用参考价值信息更新对每一第二显示界面执行目标操作的价值信息,具体可以包括方式A21和方式A22。
方式A21,将该第一显示界面的前一个显示界面作为目标显示界面,利用参考价值信息、以及对目标显示界面执行目标操作的当前价值信息,确定对目标显示界面执行目标操作的更新后价值信息。
本公开实施例中,利用参考价值信息、以及对目标显示界面执行目标操作的当前价值信息,按照如下公式计算对目标显示界面执行目标操作的更新后价值信息:
Q_new=Q_old+α[R+γn*Q′-Q_old]
其中,Q_new为对目标显示界面执行目标操作的更新后价值信息;Q_old为对目标显示界面执行目标操作的当前价值信息,其中,Q_old的初始值为0;α为第一系数,其值为预先设定的值;γ为第二系数,其值为预先设定的值;R为与差异结果的值大小成正比,该差异结果为目标显示界面上的各个操作与目标显示界面的后一个显示界面上的各个操作之间的差异;Q′为参考价值信息;n为次数,其中,第一显示界面的前n个显示界面为该目标显示界面。
需要说明的是,在方式A21中,该参考价值信息为对第一显示界面执行目标操作的参考价值信息。
以图3为例,当显示界面D为第一显示界面(即当前显示界面),显示界面C为目标显示界面时,Value Network输出对显示界面D执行目标操作(操作D1-D3中的任一个)的参考价值信息,利用该参考价值信息、对显示界面C执行目标操作C2的当前价值信息,按照上述公式计算得到对显示界面C执行目标操作C2的更新后价值信息。
其中,由图3可以明显得出,对显示界面C执行目标操作C2时,可以得到显示界面D,由于显示界面C为显示界面D的前一个显示界面,因此,上述公式中n取值为1。
方式A22,循环执行将对目标显示界面执行目标操作的更新后价值信息作为参考价值信息,将目标显示界面的前一个显示界面作为目标显示界面,以及利用参考价值信息、以及对目标显示界面执行目标操作的当前价值信息,确定对目标显示界面执行目标操作的更新后价值信息的步骤,直至目标显示界面为初始显示界面为止。
本公开实施例中,初始显示界面为测试过程中的第一个显示界面,可以按照方式A22,针对第一显示界面的前两个显示界面至第一个显示界面中的每一个显示界面、可以按照上述公式确定对该显示界面执行目标操作的更新后价值信息。
例如,接方式A21中的示例,显示界面C为目标显示界面,计算得到对显示界面C执行目标操作C2的更新后价值信息后,将对显示界面C执行目标操作C2的更新后价值信息作为参考价值信息,将显示界面C的前一个显示界面即显示界面B作为目标显示界面,利用该参考价值信息、对显示界面B执行目标操作B1的当前价值信息,按照上述公式计算得到对显示界面B执行目标操作B1的更新后价值信息。
其中,由图3可以明显得出,对显示界面B执行目标操作B1时,可以得到显示界面C,由于显示界面B为显示界面D的前两个显示界面,因此,上述公式中n取值为2。
进一步地,显示界面B为目标显示界面,计算得到对显示界面B执行目标操作B1的更新后价值信息后,将对显示界面B执行目标操作B1的更新后价值信息作为参考价值信息,将显示界面B的前一个显示界面即显示界面A作为目标显示界面,利用该参考价值信息、对显示界面A执行目标操作A2的当前价值信息,按照上述公式计算得到对显示界面A执行目标操作A2的更新后价值信息。
其中,由图3可以明显得出,对显示界面A执行目标操作A2时,可以得到显示界面B,由于显示界面A为显示界面D的前三个显示界面,因此,上述公式中n取值为3。
需要说明的是,当显示界面A为目标显示界面且为初始显示界面时,此时,循环终止。按照方式A21、A22,可以得到对显示界面A-C分别执行目标操作的更新后价值信息。
方式A3,将更新得到的对每一第二显示界面执行目标操作的价值信息记录在预设价值表中。
对于本公开实施例,可以按照方式A1和方式A2,计算得到针对从初始显示界面变化至第一显示界面的过程中的每一个第二显示界面,对该第二显示界面执行目标操作的更新后价值信息,并将对每一第二显示界面执行目标操作的更新后价值信息记录在预设价值表中。
例如,将对显示界面A执行目标操作A2的更新后价值信息、对显示界面B执行目标操作B1的更新后价值信息、以及对显示界面C执行目标操作C2的更新后价值信息,记录在预设价值表中。
步骤S1015,利用次数信息以及价值信息,确定目标应用程序的当前显示界面上的各个操作对应的收益值。
本公开实施例中,次数信息包括当前显示界面上的各个操作在测试过程中的已执行次数、和父操作在测试过程中的已执行次数,价值信息为当前显示界面上的各个操作的价值信息,利用次数信息以及价值信息,按照如下公式计算目标应用程序的当前显示界面上的各个操作对应的收益值:
其中,UCB为当前显示界面上的任一个操作对应的收益值,Pt为当前显示界面上的该操作的价值信息,Vt为当前显示界面上的该操作在测试过程中的已执行次数,Vc为父操作在测试过程中的已执行次数,C为第三系数,其值预先设定的值,通常取值为
本公开实施例的另一种可能实现方式,收益值和/或价值信息是由神经网络模型确定的。
其中,神经网络模型的训练数据包括:目标应用程序和/或至少一个其它应用程序各自的至少一个历史显示界面,历史显示界面支持的各个操作对应的历史收益值,对历史显示界面执行目标操作的历史价值信息。
本公开实施例中,历史显示界面可以是目标应用程序的历史测试过程中的显示界面、目标应用程序的历史使用过程中的显示界面、其他应用程序的历史测试过程中的显示界面、和其他应用程序的历史使用过程中的显示界面中的至少一项。
本公开实施例中,训练数据包括历史显示界面上的各个操作对应的历史收益值,和对历史显示界面执行目标操作的历史价值信息。其中,训练数据还包括历史显示界面上的各个操作的描述信息。
在利用训练数据训练神经网络时,对神经网络模型进行每一轮训练时,本轮训练所选择的训练数据可以包括至少一个历史显示界面上的各个操作对应的历史收益值、至少一个历史显示界面上的各个操作的描述信息、以及对每一个历史显示界面执行目标操作的历史价值信息。
上述实施例从方法步骤的角度详细介绍了应用程序测试方法,下面将提供一个具体实例,以进一步理解本公开的应用程序测试方法。
如图4所示,在对目标应用程序的测试过程中,对于每一个当前显示界面,利用当前显示界面对应的特征信息(Feature),该Feature可以为当前显示界面上的各个操作的描述信息,该Feature也可以为每个在前显示界面各自支持的各个操作的描述信息、在每个在前显示界面上已测试执行操作的描述信息、当前显示界面上的各个操作的描述信息。
本公开实施例中,将Feature输入至PPO2模型中,当当前显示界面上的各个操作中存在至少一个未被执行过的操作时,由Policy Network输出P(s,a),其中,P(s,a)表示当前显示界面上的各个操作对应的收益值,由Value Network输出V(s),其中,V(s)表示对当前显示界面执行目标操作的价值信息。需要说明的是,P(s,a)可以用于按照步骤S102的方式确定目标操作,V(s)可以用于更新对每一第二显示界面执行目标操作的价值信息。
可以利用Feature、P(s,a)以及V(s)组成训练数据,并存储至内存池(MemoryPool)中。当需要优化PPO2模型或者重新训练PPO2模型时,可以利用Memory Pool中的各个训练数据,训练PPO2模型。
上述从方法步骤的角度具体阐述了应用程序测试方法,下面从虚拟模块或者虚拟单元的角度介绍应用程序测试装置,具体如下所示:
本公开实施例提供了一种应用程序测试装置,如图5所示,该应用程序测试装置50可以包括:确定模块501、选择模块502以及执行模块503,其中,
确定模块501,用于在对目标应用程序的测试过程中,确定目标应用程序的当前显示界面支持的各个操作对应的收益值,收益值表征对应操作所导致的代码覆盖率的大小。
选择模块502,用于利用各个操作对应的收益值,从各个操作中选择目标操作。
执行模块503,用于对当前显示界面执行目标操作。
本公开实施例的另一种可能实现方式,确定模块501具体用于:
当当前显示界面支持的各个操作中存在至少一个未被执行过的操作时,提取目标应用程序的当前显示界面支持的各个操作的描述信息,描述信息包括对应操作的位置信息和类型信息;
将当前显示界面支持的各个操作的描述信息作为输入信息,利用神经网络模型输出当前显示界面支持的各个操作对应的收益值。
本公开实施例的另一种可能实现方式,该装置还包括:
获取模块,用于针对与当前显示界面相关的预设数目个在前显示界面,获取每个在前显示界面各自支持的各个操作的描述信息以及在每个在前显示界面上已测试执行操作的描述信息;
相应地,确定模块501在将当前显示界面支持的各个操作的描述信息作为输入信息,利用神经网络模型输出当前显示界面支持的各个操作对应的收益值时,具体用于:
将每个在前显示界面各自支持的各个操作的描述信息、在每个在前显示界面上已测试执行操作的描述信息、当前显示界面上的各个操作的描述信息,作为输入信息,利用神经网络模型输出当前显示界面上的各个操作对应的收益值。
本公开实施例的另一种可能实现方式,选择模块502具体用于:
从各个操作对应的收益值中,确定各个未被执行过的操作的收益值;
利用各个未被执行过的操作的收益值,从各个未被执行过的操作中选择目标操作。
本公开实施例的另一种可能实现方式,确定模块501具体用于:
当各个操作中不存在未被执行过的操作时,确定次数信息,次数信息包括当前显示界面支持的各个操作在所述测试过程中的已执行次数,收益值与对应操作的已执行次数的值大小成反比;
确定当前显示界面支持的各个操作的价值信息,价值信息表征了对应操作所导致的代码覆盖率的增长程度;
利用次数信息以及价值信息,确定目标应用程序的当前显示界面支持的各个操作对应的收益值。
本公开实施例的另一种可能实现方式,次数信息还包括:父操作在测试过程中的已执行次数;
其中,父操作是在当前显示界面的上一显示界面上所执行的操作,且父操作用于使上一显示界面切换至当前显示界面。
本公开实施例的另一种可能实现方式,确定模块501在确定当前显示界面支持的各个操作的价值信息时,具体用于:
确定预设价值表中记录的当前显示界面支持的各个操作的价值信息;
其中,预设价值表中记录测试过程中的每一个显示界面上的、各个已测试执行过的操作的价值信息。
本实施例的应用程序测试装置可执行本公开方法实施例提供的一种应用程序测试方法,其实现原理相类似,此处不再赘述。
本公开实施例提供了一种应用程序测试装置,与现有技术相比,本公开实施例在对目标应用程序的测试过程中,先确定目标应用程序的当前显示界面支持的各个操作对应的收益值,收益值表征对应操作所导致的代码覆盖率的大小,然后利用各个操作对应的收益值,从各个操作中选择目标操作,该目标操作是依据收益值选择得到的,使得目标操作可以为代码覆盖率较大的操作,而非随机选择的操作,进一步地,对当前显示界面执行目标操作。在测试过程中,每次选择的目标操作均可以为代码覆盖率较大的操作,因此测试停止时代码覆盖率较高,相应地,应用程序的测试质量也较高。
上述从虚拟模块或者虚拟单元的角度介绍本公开的应用程序测试装置,下面从实体装置的角度介绍本公开的电子设备。
下面参考图6,其示出了适于用来实现本公开实施例的电子设备(例如终端设备或服务器)600的结构示意图。该电子设备包括:
一个或多个处理器;
存储器;
一个或多个应用程序,其中一个或多个应用程序被存储在存储器中并被配置为由一个或多个处理器执行,一个或多个程序配置用于:执行根据方法实施例所示的应用程序测试方法。
本公开实施例中的终端设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图6示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
电子设备包括:存储器以及处理器,其中,这里的处理器可以称为下文所述的处理装置601,存储器可以包括下文中的只读存储器(ROM)602、随机访问存储器(RAM)603以及存储装置608中的至少一项,具体如下所示:
如图6所示,电子设备600可以包括处理装置(例如中央处理器、图形处理器等)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储装置608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有电子设备600操作所需的各种程序和数据。处理装置601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
通常,以下装置可以连接至I/O接口605:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置606;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置607;包括例如磁带、硬盘等的存储装置608;以及通信装置609。通信装置609可以允许电子设备600与其他设备进行无线或有线通信以交换数据。虽然图6示出了具有各种装置的电子设备600,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置609从网络上被下载和安装,或者从存储装置608被安装,或者从ROM 602被安装。在该计算机程序被处理装置601执行时,执行本公开实施例的方法中限定的上述功能。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
在一些实施方式中,客户端、服务器可以利用诸如HTTP(HyperText TransferProtocol,超文本传输协议)之类的任何当前已知或未来研发的网络协议进行通信,并且可以与任意形式或介质的数字数据通信(例如,通信网络)互连。通信网络的示例包括局域网(“LAN”),广域网(“WAN”),网际网(例如,互联网)以及端对端网络(例如,ad hoc端对端网络),以及任何当前已知或未来研发的网络。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:在对目标应用程序的测试过程中,确定目标应用程序的当前显示界面支持的各个操作对应的收益值,收益值表征对应操作所导致的代码覆盖率的大小;利用各个操作对应的收益值,从各个操作中选择目标操作;对当前显示界面执行所述目标操作。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括但不限于面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的模块或单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,模块或单元的名称在某种情况下并不构成对该单元本身的限定,例如,执行模块还可以被描述为“对当前显示界面执行目标操作的模块”。
本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑设备(CPLD)等等。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
本公开实施例提供了一种电子设备,本公开实施例中的电子设备包括:存储器和处理器;至少一个程序,存储于所述存储器中,用于被所述处理器执行时,与现有技术相比可实现:在对目标应用程序的测试过程中,先确定目标应用程序的当前显示界面支持的各个操作对应的收益值,收益值表征对应操作所导致的代码覆盖率的大小,然后利用各个操作对应的收益值,从各个操作中选择目标操作,该目标操作是依据收益值选择得到的,使得目标操作可以为代码覆盖率较大的操作,而非随机选择的操作,进一步地,对当前显示界面执行目标操作。在测试过程中,每次选择的目标操作均可以为代码覆盖率较大的操作,因此测试停止时代码覆盖率较高,相应地,应用程序的测试质量也较高。
本公开实施例提供了一种计算机可读介质,该计算机可读介质上存储有计算机程序,当其在计算机上运行时,使得计算机可以执行前述方法实施例中相应内容。与现有技术相比,在对目标应用程序的测试过程中,先确定目标应用程序的当前显示界面支持的各个操作对应的收益值,收益值表征对应操作所导致的代码覆盖率的大小,然后利用各个操作对应的收益值,从各个操作中选择目标操作,该目标操作是依据收益值选择得到的,使得目标操作可以为代码覆盖率较大的操作,而非随机选择的操作,进一步地,对当前显示界面执行目标操作。在测试过程中,每次选择的目标操作均可以为代码覆盖率较大的操作,因此测试停止时代码覆盖率较高,相应地,应用程序的测试质量也较高。
根据本公开的一个或多个实施例,提供了一种应用程序测试方法,包括:
在对目标应用程序的测试过程中,确定所述目标应用程序的当前显示界面支持的各个操作对应的收益值,所述收益值表征对应操作所导致的代码覆盖率的大小;
利用所述各个操作对应的收益值,从所述各个操作中选择目标操作;
对所述当前显示界面执行所述目标操作。
根据本公开的一个或多个实施例,所述确定所述目标应用程序的当前显示界面支持的各个操作对应的收益值,包括:
当所述当前显示界面支持的各个操作中存在至少一个未被执行过的操作时,提取所述目标应用程序的当前显示界面支持的各个操作的描述信息,所述描述信息包括对应操作的位置信息和类型信息;
将所述当前显示界面支持的各个操作的描述信息作为输入信息,利用神经网络模型输出所述当前显示界面支持的各个操作对应的收益值。
根据本公开的一个或多个实施例,所述方法还包括:
针对与所述当前显示界面相关的预设数目个在前显示界面,获取每个在前显示界面各自支持的各个操作的描述信息以及在每个在前显示界面上已测试执行操作的描述信息;
相应地,所述将所述当前显示界面支持的各个操作的描述信息作为输入信息,利用神经网络模型输出所述当前显示界面支持的各个操作对应的收益值,包括:
将每个在前显示界面各自支持的各个操作的描述信息、在每个在前显示界面上已测试执行操作的描述信息、所述当前显示界面支持的各个操作的描述信息,作为输入信息,利用所述神经网络模型输出所述当前显示界面支持的各个操作对应的收益值。
根据本公开的一个或多个实施例,所述利用所述各个操作对应的收益值,从所述各个操作中选择目标操作,包括:
从所述各个操作对应的收益值中,确定各个未被执行过的操作的收益值;
利用所述各个未被执行过的操作的收益值,从各个未被执行过的操作中选择目标操作。
根据本公开的一个或多个实施例,所述确定所述目标应用程序的当前显示界面支持的各个操作对应的收益值,包括:
当所述各个操作中不存在未被执行过的操作时,确定次数信息,所述次数信息包括所述当前显示界面支持的各个操作在所述测试过程中的已执行次数,所述收益值与对应操作的已执行次数的值大小成反比;
确定所述当前显示界面支持的各个操作的价值信息,所述价值信息表征了对应操作所导致的代码覆盖率的增长程度;
利用所述次数信息以及所述价值信息,确定所述目标应用程序的当前显示界面支持的各个操作对应的收益值。
根据本公开的一个或多个实施例,所述次数信息还包括:父操作在所述测试过程中的已执行次数;
其中,所述父操作是在所述当前显示界面的上一显示界面上所执行的操作,且所述父操作用于使所述上一显示界面切换至所述当前显示界面。
根据本公开的一个或多个实施例,所述确定所述当前显示界面支持的各个操作的价值信息,包括:
确定预设价值表中记录的所述当前显示界面支持的各个操作的价值信息;
其中,所述预设价值表中记录测试过程中的每一个显示界面上的、各个已测试执行过的操作的价值信息。
根据本公开的一个或多个实施例,提供了一种应用程序测试装置,包括:
确定模块,用于在对目标应用程序的测试过程中,确定所述目标应用程序的当前显示界面支持的各个操作对应的收益值,所述收益值表征对应操作所导致的代码覆盖率的大小;
选择模块,用于利用所述各个操作对应的收益值,从所述各个操作中选择目标操作;
执行模块,用于对所述当前显示界面执行所述目标操作。
根据本公开的一个或多个实施例,所述确定模块具体用于:
当所述当前显示界面支持的各个操作中存在至少一个未被执行过的操作时,提取所述目标应用程序的当前显示界面支持的各个操作的描述信息,所述描述信息包括对应操作的位置信息和类型信息;
将所述当前显示界面支持的各个操作的描述信息作为输入信息,利用神经网络模型输出所述当前显示界面支持的各个操作对应的收益值。
根据本公开的一个或多个实施例,所述装置还包括:
获取模块,用于针对与所述当前显示界面相关的预设数目个在前显示界面,获取每个在前显示界面各自支持的各个操作的描述信息以及在每个在前显示界面上已测试执行操作的描述信息;
相应地,所述确定模块在将所述当前显示界面支持的各个操作的描述信息作为输入信息,利用神经网络模型输出所述当前显示界面支持的各个操作对应的收益值时,具体用于:
将每个在前显示界面各自支持的各个操作的描述信息、在每个在前显示界面上已测试执行操作的描述信息、所述当前显示界面支持的各个操作的描述信息,作为输入信息,利用神经网络模型输出所述当前显示界面支持的各个操作对应的收益值。
根据本公开的一个或多个实施例,所述选择模块具体用于:
从所述各个操作对应的收益值中,确定各个未被执行过的操作的收益值;
利用所述各个未被执行过的操作的收益值,从各个未被执行过的操作中选择目标操作。
根据本公开的一个或多个实施例,所述确定模块具体用于:
当所述各个操作中不存在未被执行过的操作时,确定次数信息,所述次数信息包括所述当前显示界面支持的各个操作在所述测试过程中的已执行次数,所述收益值与对应操作的已执行次数的值大小成反比;
确定所述当前显示界面支持的各个操作的价值信息,所述价值信息表征了对应操作所导致的代码覆盖率的增长程度;
利用所述次数信息以及所述价值信息,确定所述目标应用程序的当前显示界面支持的各个操作对应的收益值。
根据本公开的一个或多个实施例,所述次数信息还包括:父操作在所述测试过程中的已执行次数;
其中,所述父操作是在所述当前显示界面的上一显示界面上所执行的操作,且所述父操作用于使所述上一显示界面切换至所述当前显示界面。
根据本公开的一个或多个实施例,所述确定模块在确定所述当前显示界面支持的各个操作的价值信息时,具体用于:
确定预设价值表中记录的所述当前显示界面支持的各个操作的价值信息;
其中,所述预设价值表中记录测试过程中的每一个显示界面上的、各个已测试执行过的操作的价值信息。
根据本公开的一个或多个实施例,提供了一种电子设备,其特征在于,其包括:
一个或多个处理器;
存储器;
一个或多个应用程序,其中所述一个或多个应用程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序配置用于:执行根据方法实施例所示的应用程序测试方法。
根据本公开的一个或多个实施例,提供了一种计算机可读介质,其上存储有计算机程序,该程序被处理器执行时实现方法实施例所示的应用程序测试方法。
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
此外,虽然采用特定次序描绘了各操作,但是这不应当理解为要求这些操作以所示出的特定次序或以顺序次序执行来执行。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实施例中。相反地,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实施例中。
尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。