应用测试方法、装置、设备及可读存储介质
技术领域
本发明涉及应用测试技术领域,更具体地,涉及一种应用程序的测试方法及测试设备。
背景技术
随着互联网技术的飞速发展和智能终端的普及,越来越多的用户习惯于通过运行智能手机、掌上电脑、平板电脑这类移动终端设备上安装或加载的应用,获取对应的应用服务。
而应用通常需要通过大量的应用测试,确保其具有稳定的应用性能后,才会发布供用户使用。目前,在测试应用的过程中,通常需要测试人员根据具体的应用测试需求,设计并编写对应的应用测试用例,通过执行应用测试用例来协助实现应用的自动化测试,以此来节省应用测试的人力成本。但是,应用测试用例的编写及设计,依然需要测试人员本身的人力投入,对应需要投入大量的测试人力资源,影响测试效率。
发明内容
本发明的一个目的是提供一种用于测试应用的新技术方案。
根据本发明的第一方面,提供了一种应用测试方法,包括:
初始化待测试的目标应用;
对所述目标应用进行预设探索次数的测试路径探索,获取所述目标应用的测试路径;
根据所述目标应用的测试路径,生成对应的测试用例,以根据所述测试用例执行所述目标应用的自动化测试。
根据本发明的第二方面,提供了一种应用测试装置,包括:
应用初始化单元,用于初始化待测试的目标应用;
测试路径探索单元,用于对所述目标应用进行预设探索次数的测试路径探索,获取所述目标应用的测试路径;
测试用例生成单元,用于根据所述目标应用的测试路径,生成对应的测试用例,以根据所述测试用例执行所述目标应用的自动化测试。
根据本发明的第三方面,提供了一种应用测试设备,包括:
存储器,用于存储可执行的指令;
处理器,用于根据所述可执行的指令的控制,运行所述应用测试设备执行如本发明的第一方面所述的应用测试方法。
根据本发明的第四方面,提供了一种可读存储介质,所述可读存储介质存储有可被计算机读取运行的计算机程序,所述计算机程序被所述计算机读取运行时,执行如本发明的第一方面所述的应用测试方法。
根据本公开的一个实施例,在初始化待测试的目标应用后,通过对目标应用进行预设探索次数的测试路径探索,获取可以对目标应用实现有效测试的测试路径,实现根据测试路径可以自动生成对应的测试用例,来执行对目标应用的自动化测试,实现无需依赖测试人员的人力投入,就能自动生成测试用例对目标应用进行自动测试,节省大量的测试人力或物力资源,提高测试效率。
通过以下参照附图对本发明的示例性实施例的详细描述,本发明的其它特征及其优点将会变得清楚。
附图说明
被结合在说明书中并构成说明书的一部分的附图示出了本发明的实施例,并且连同其说明一起用于解释本发明的原理。
图1示出了本发明实施例的应用测试方法的流程图
图2示出了本发明实施例的探索状态表的三维示意图。
图3示出了本发明实施例的页面中目标页面元素的元素文本不为空的示意图。
图4示出了本发明实施例的页面中目标页面元素的元素文本为空的示意图。
图5示出了本发明实施例的目标应用的规则库的示意图。
图6示出了本发明实施例的更新探索状态表的例子的示意图。
图7示出了本发明实施例的一个例子中探索测试路径的结果的示意图。
图8示出了本发明实施例的应用测试装置3000的框图。
图9示出了本发明实施例的应用测试设备4000的框图。
具体实施方式
现在将参照附图来详细描述本发明的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。
以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。
在这里示出和讨论的所有例子中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它例子可以具有不同的值。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
<实施例>
本发明实施例的总体构思,是提供一种测试应用的新技术方案,在初始化待测试的目标应用后,通过对目标应用进行预设探索次数的测试路径探索,获取可以确保对目标应用实现有效测试的测试路径,实现根据测试路径可以自动生成对应的测试用例,来执行对目标应用的自动化测试,实现无需依赖测试人员的人力投入,就能自动生成测试用例对目标应用进行自动测试,节省大量的测试人力或物力资源,提高测试效率。
<方法>
在本实施例中,提供一种应用测试方法。该应用可以是被安装或加载在例如手机、笔记本电脑、平板电脑这类电子设备中运行提供对应的应用服务的软件或者程序。
如图1所示,该应用测试方法包括:步骤S2100-S2300。
步骤S2100,初始化待测试的目标应用。
在本实施例中,初始化目标应用可以包括清除目标应用中已缓存或者存储的相关应用数据,并且启动目标应用的主进程。
通过初始化目标应用,可以确保后续步骤执行时不受目标应用中已有的相关应用数据的影响,确保方案实施的可靠性。
步骤S2200,对目标应用进行预设探索次数的测试路径探索,获取目标应用的测试路径。
在本实施例中,目标应用在运行时会进入不同的应用状态,每个应用状态会通过唯一对应的页面进行展示。目标应用的测试路径用于指示目标应用的多个不同应用状态所对应的页面之间,基于对特定的页面元素进行特定的测试操作后发生的完整有序的页面跳转关系。
目标应用的测试路径中包括的每个路径节点分别对应目标应用的一个不同应用状态所对应的页面。目标应用的测试路径的两个相邻的路径节点之间的连接,用于表示对在先的路径节点所对应的页面中特定的页面元素执行特定的测试操作后,跳转到在后的路径节点。
例如,目标应用的测试路径中包括的路径节点分别对应目标应用的不同应用状态所对应的页面A、B、C,测试路径通过各个路径节点之间的连接,指示与页面A对应的路径节点,在对页面A中的某个页面元素a进行点击操作后,跳转到与页面B对应的路径节点,以及,在对页面B中的某个页面元素b进行输入操作后,跳转到与页面C对应的路径节点,等等。
在目标应用的测试路径中除了路径终点之外的每个路径节点所对应的页面,可以通过对该页面的某个节点元素执行某个测试操作,就能跳转到该测试路径中其他路径节点所对应的页面其中的一个。换言之,目标应用的测试路径所指示的目标应用的多个不同应用状态所对应的页面之间的页面跳转关系是实际有效的,已经排除导致目标应用状态未实际发生改变或者退出目标应用的、无效的页面跳转关系。
在本实施例中,通过对目标应用进行预设探索次数的测试路径探索,可以获取目标应用一条或者多条测试路径。通过目标应用的每条测试路径所指示的目标应用的多个应用状态之间的实际有效的页面跳转关系,可以排除导致目标应用状态未实际发生改变或者退出目标应用的无效或异常的页面跳转关系,可以结合后续步骤自动生成对应的、可被实际有效执行的测试用例,用于对目标应用的自动化测试。
在更具体的一个例子中,步骤S2200可以包括:步骤S2210-S2240。
步骤S2210,在每次进行测试路径探索时,获取本次测试路径探索对应的目标应用的当前页面的探索状态表。
在每次进行测试路径探索时,会基于目标应用的某个页面开始,该页面就是目标应用的当前页面。目标应用的当前页面可以是目标应用启动主进程后进入的页面,也可以是本次测试路径探索之前的上次测试路径探索后到达的页面,还可以是本次测试路径探索之前的上次测试路径探索后停留的页面。
探索状态表中包括目标应用的当前页面中每个页面元素在不同的测试操作项下的操作奖励值以及目标应用的当前页面对应的应用状态。
页面元素是构成对应的页面中的元素。页面元素可以是页面中可被点击的按钮、可供输入的输入栏、可被操作滑动的滑动件、显示图片的图片栏等等。每个页面元素可以具有对应的元素属性。元素属性至少包括元素文本、元素坐标以及元素类型。元素文本是与页面元素相关的文本内容。元素文本可以是页面元素在对应的页面中显示时的说明文本内容,例如,页面元素是一个按钮,元素文本可以是该按钮在对应页面中显示时关联显示的按钮名称。在实际应用中,页面元素不一定具有相关的文本内容,对应的,元素文本可以设置为空。元素坐标是页面元素在对应的页面中显示时对应的位置坐标,具体所基于的坐标系可以根据具体的应用场景或者应用需求进行设置,在此不做具体限定。例如,可以以对应页面的左上角顶点为原点,水平方向为x轴,垂直方向为y轴,确定页面元素的元素坐标为二维坐标(x,y)。元素类型是对应的页面元素类型,可以根据具体的页面元素的分类进行定义,例如,元素类型可以包括输入类型、点击类型以及场景文字识别类型等。
在这个例子中,为了方便记录,可以定义每个页面元素具有对应的元素结构来记录对应的元素属性,例如,该结构element可以是{element}={text}_{(x,y)}_{type},其中,text是元素文本,(x,y)是元素坐标,type是元素类型。
每个测试操作项用于指示对应的测试操作。测试操作可以通过应用所支持的接口对特定的页面元素自动执行。测试操作项可以根据具体的测试需求设置,可以包括点击操作项、输入操作项、滑动操作项、返回操作项等。
每个页面元素在不同的测试操作项下的操作奖励值,用于指示在对该页面元素执行与该测试操作项对应的操作时得到操作结果的评价。操作奖励值的具体取值可以根据具体的操作结果设置。操作奖励值是根据在测试环境中对页面元素执行测试操作时,根据测试环境反馈的操作结果对测试操作的优劣的评价。通过操作奖励值,能在测试操作-反馈评价的测试环境中获取测试路径探索的指导信息,调整每次测试路径探索的方向以及行为,适应测试环境,以“强化学习”的方式迅速、快捷地获取目标应用的测试路径。
在这个例子中,目标应用的不同应用状态对应的页面都具有对应的探索状态表。每个探索状态表可以是一个由页面元素、测试操作项以及对应的应用状态构成的三维结构表,例如,如图2所示出目标应用中不同的应用状态下对应页面的探索状态表的三维结构。
在本次测试路径探索时,通过获取本次测试路径探索到达的当前页面的探索状态表,可以通过探索状态表中反映的在此前的测试路径探索中当前页面的页面元素执行不同的测试操作的评价,能在测试操作-反馈评价的测试环境中获取本次测试路径探索的指导信息,调整本次测试路径探索的方向以及行为来适应测试环境。
在这个例子中,步骤S2210可以包括:步骤S2211-S2214。
步骤S2211,在当前页面不存在对应的探索状态表,识别确定当前页面包括的所有页面元素。
每个页面元素具有对应的元素属性。元素属性至少包括元素文本、元素坐标以及元素类型。在前文中已经对元素属性进行详细说明,在此不再赘述。
当前页面不存在对应的探索状态表,意味着当前页面在此前的测试路径探索的过程中并未到达,需要对当前页面的探索状态表进行初始化。通过识别当前页面的页面元素,可以结合后续步骤,基于识别到的当前页面的页面元素构建当前页面的探索状态表,实现探索状态表的初始化。
在这个例子中,步骤S2211可以包括步骤S22111-S22114。
步骤S22111,通过场景文字识别模型,对所当前页面进行场景文字识别,得到第一页面元素集合。
第一页面元素集合中每个页面元素具有对应的元素坐标以及元素文本。
场景文字识别模型是基于深度学习算法训练的、用于在图像中检测和识别文字的机器学习模型。例如,场景文字识别模型可以使用开源的CTPN+CRNN模型并搭建restful服务所构建的模型。CTPN(Connectionist Text Proposal Network,连接文本提议网络)是在场景中提取文字的一个效果较好的深度学习网络,能检测自然环境中的文本信息位置。CRNN(Convolutional Recurrent Neural Network,卷积递归神经网络)是一种端到端的文字识别网络,能解决在图像中识别文字的问题。Restful服务是一种软件服务设计架构,场景文字识别模型使用开源的CTPN+CRNN模型再搭建restful服务,可以使得场景文字识别模型的调用更有效率。
步骤S22112,通过页面解析工具,解析目标应用的当前页面,得到第二页面元素集合。
第二页面元素集合中每个页面元素具有对应的元素坐标、元素文本以及控件属性。控件属性是页面元素所对应的控件具有的属性。页面解析工具用于解析页面,得到页面中包括的页面元素。例如,页面解析工具可以是dump工具,利用dump工具可以解析页面的前端结构,得到第二页面元素集合。
步骤S22113,根据第二页面元素集合,对第一页面元素集合进行修正处理,使得修正处理后的第一页面元素集合中每个页面元素具有对应的元素属性。
分别通过场景文字识别模型识别当前页面得到第一页面元素集合以及通过页面解析工具解析当前页面得到第二页面元素集合,再通过第二页面元素集合修正第一页面元素集合,可以提高最终识别确定的当前页面包括的页面元素的准确率,对应基于识别却别的页面元素构建的探索状态表也更为精准,相应提高基于探索状态表进行测试路径探索得到的测试路径的可靠性。
在这个例子中,步骤S22113可以包括:步骤S221131-S221136。
步骤S221131,在第二页面元素集合中包括控件属性是不可点击的页面元素、并且第一页面元素集合中包括与控件属性是不可点击的页面元素的元素坐标相同的页面元素时,在第一页面元素集合中删除元素坐标相同的页面元素。
例如,假设第一页面元素集合是集合A,第二页面元素集合中是集合B,如果集合B中存在控件属性是不可点击的页面元素b1(例如,b1对应的控件是android控件,控件属性中clickable属性、long-clickable属性以及checkable属性均为False),并且,b1的元素坐标(x1,y1)而在集合A中包括具有元素坐标(x1,y1)的页面元素a1,那么,将页面元素a1从集合A中删除。
步骤S221132,在第二页面元素集合中包括控件属性是可点击的页面元素、并且第一页面元素集合中不包括与控件属性是可点击的页面元素的元素坐标相同的页面元素时,将控件属性是可点击的页面元素添加到第一页面元素集合中,并将添加的页面元素的元素类型设置为点击类型。
例如,假设第一页面元素集合是集合A,第二页面元素集合中是集合B,如果集合B中存在控件属性是可点击的页面元素b2(例如,b2对应的控件是android控件,控件属性中clickable属性、long-clickable属性以及checkable属性其中任意之一为True),并且,b2具有元素坐标(x2,y2)而集合A中不包括具有元素坐标(x2,y2)的页面元素,那么,将页面元素b2添加到集合A中,并且设置页面元素b2的元素类型type为clickable(点击类型)。
步骤S221133,在第二页面元素集合中包括控件属性是可点击的页面元素、并且第一页面元素集合中包括与控件属性是可点击的页面元素的元素坐标相同的页面元素时,将第一页面元素集合中元素坐标相同的页面元素的元素类型设置为点击类型。
例如,假设第一页面元素集合是集合A,第二页面元素集合中是集合B,如果集合B中存在控件属性是可点击的页面元素b3(例如,b3对应的控件是android控件,控件属性中clickable属性、long-clickable属性以及checkable属性其中任意之一为True),并且,b3具有元素坐标(x3,y3)而集合A中包括具有相同元素坐标(x3,y3)的页面元素a3,那么,将页面元素a3的元素类型type设置为clickable(点击类型)。
步骤S221134,在第二页面元素集合中包括控件属性是可输入的页面元素、并且第一页面元素集合中不包括与控件属性是可输入的页面元素的元素坐标相同的页面元素时,将控件属性是可输入的页面元素添加到第一页面元素集合中,并将添加的页面元素的元素类型设置为输入类型。
例如,假设第一页面元素集合是集合A,第二页面元素集合中是集合B,如果集合B中存在控件属性是可输入的页面元素b4(例如,b4对应的控件是android控件中的输入控件),并且,b4具有元素坐标(x4,y4)而集合A中不包括具有相同元素坐标(x4,y4)的页面元素,那么,将页面元素a4添加到集合A中,并将元素类型type设置为input(输入类型)。
步骤S221135,在第二页面元素集合中包括控件属性是可输入的页面元素、并且第一页面元素集合中包括与控件属性是可输入的页面元素的元素坐标相同的页面元素时,将第一页面元素集合中元素坐标相同的页面元素的元素类型设置为输入类型。
例如,假设第一页面元素集合是集合A,第二页面元素集合中是集合B,如果集合B中存在控件属性是可输入的页面元素b5(例如,b5对应的控件是android控件中的输入控件),并且,b5具有元素坐标(x5,y5)而集合A中包括具有相同元素坐标(x5,y5)的页面元素a5,那么,将页面元素a5的元素类型type设置为input(输入类型)。
步骤S221136,对第一页面元素集合未根据第二元素集合设置元素类型中的其他页面元素,分别设置对应的元素类型为场景文字识别类型。
页面元素的类型是场景文字识别类型,意味着该页面元素是通过场景文字识别模型对页面进行场景文字识别确定的页面元素,该页面元素未能依据被页面解析工具解析该页面得到的第二页面元素集合确定是否为点击类型还是输入类型。
例如,假设第一页面元素集合是集合A,第二页面元素集合中是集合B,集合A中包括页面元素a6,根据集合B中包括的页面元素,不能确定页面元素a6是否为点击类型还是输入类型,那么将a6的元素类型type设置为OCR(场景文字识别类型)。
通过上述步骤S221131-S221136实现步骤S22113,可以根据页面解析工具解析当前页面得到的第二页面元素集合,对场景文字识别模型识别当前页面得到的第一页面元素集合进行修正处理,可以提高最终识别确定的当前页面包括的页面元素的准确率,对应基于识别却别的页面元素构建的探索状态表也更为精准,相应提高基于探索状态表进行测试路径探索得到的测试路径的可靠性。
步骤S22114,将校对处理后的第一页面元素集合中包括的所有页面元素,确定为当前页面包括的页面元素。
通过上述步骤S22111-S22114来实现步骤S2211,分别通过场景文字识别模型识别当前页面得到第一页面元素集合以及通过页面解析工具解析当前页面得到第二页面元素集合,再通过第二页面元素集合修正第一页面元素集合,可以提高最终识别确定的当前页面包括的页面元素的准确率,对应基于识别却别的页面元素构建的探索状态表也更为精准,相应提高基于探索状态表进行测试路径探索得到的测试路径的可靠性。
在通过步骤S2211识别确定当前页面包括的页面元素之后,进入:
步骤S2212,根据当前页面包括的所有页面元素的元素文本,设置当前页面对应的应用状态。
假设当前页面中包括N个页面元素{element1,element2,……,elementn},对应的元素文本为{text1,text2,……,textn},可以将当前页面所有页面元素的元素文本拼接为字符串text1_text2_......_textn,设置当前页面的应用状态通过该字符串表示,或者,将当前页面所有页面元素的元素文本拼接为字符串后计算该字符串的哈希值,置当前页面的应用状态通过该字符串的哈希值表示,等等。
步骤S2213,根据当前页面的每个页面元素的元素类型,设置页面元素在不同的测试操作项下的操作奖励值的初始值。
设置页面元素在不同的测试操作项下的操作奖励值的初始值,可以有效构建探索状态表,完成探索状态表的初始化。
在一个更具体的应用场景中,页面元素的元素类型包括点击类型、输入类型以及场景文字识别类型。测试操作项至少包括点击操作项、输入操作项、滑动操作项、返回操作项。点击操作对应点击操作,包括单击、双击操作等。输入操作项对应输入操作,包括文本输入、语音输入等。滑动操作项对应滑动操作,包括左右滑动操作、上下滑动操作等。返回操作项对应返回操作,包括触发页面返回应用主页面的操作、触发应用返回系统主页面的操作等等。
在这个应用场景中,步骤S2213包括:步骤S22131-S22133。
步骤S22131,当页面元素的元素类型是点击类型时,设置页面元素在输入操作项下的操作奖励值的初始值为最小奖励值,以及在其他不同的测试操作项下的操作奖励值的初始值为奖励起点值。
在这个例子中,最小奖励值表征对一个页面元素在执行一个测试操作项对应的操作给予的最低评价。奖励起点值表征对一个页面元素未执行任何测试操作项对应的操作的初始评价状态。奖励起点值的具体数值大于最小奖励值。奖励起点值、最小奖励值的具体数值可以根据具体的应用场景或者应用需求设置,例如,奖励起点值可以设置为0,最小奖励值可以设置为-10000。
当页面元素的元素类型是点击类型时,对该页面元素实施与输入操作项对应的输入操作不是有效的测试操作,设置该页面元素在输入操作项下的操作奖励值的初始值为最小奖励值,以及在其他不同的测试操作项下的操作奖励值的初始值为奖励起点值,可以在初始化探索状态表的过程中排除无效的测试操作,进一步提高基于探索状态表探索测试路径的效率。
步骤S22132,当页面元素的元素类型是输入类型时,设置页面元素在点击操作项下的操作奖励值的初始值为最小奖励值,以及在其他不同的测试操作项下的操作奖励值的初始值为奖励起点值。
当页面元素的元素类型是输入类型时,对该页面元素实施与点击操作项对应的点击操作不是有效的测试操作,设置该页面元素在点击操作项下的操作奖励值的初始值为最小奖励值,以及在其他不同的测试操作项下的操作奖励值的初始值为奖励起点值,可以在初始化探索状态表的过程中排除无效的测试操作,进一步提高基于探索状态表来探索测试路径的效率。
步骤S22133,当页面元素的元素类型是场景文字识别类型时,设置页面元素在每个不同的测试操作项下的操作奖励值的初始值为奖励起点值。
当页面元素的元素类型是场景文字识别类型时,意味着该页面元素是对当前页面进行场景文字识别确定的,该页面元素实际可支持的测试操作项不能确认,设置页面元素在每个不同的测试操作项下的操作奖励值的初始值为奖励起点值,可以基于探索状态表进行测试路径探索时,引导对该页面元素执行各个不同的测试操作项对应的操作,实现有效探索测试路径。
通过上述步骤S22131-S22133来实现步骤S2213,可以在设置不同页面元素在不同测试项下的操作奖励值的初始值的过程中,排除对页面元素实施无效的测试操作,来协助实现探索状态表的初始化,进一步提高基于探索状态表来探索测试路径的效率。
在步骤S2213设置不同页面元素在不同测试项下的操作奖励值的初始值之后,进入:
步骤S2214,根据当前页面的每个页面元素在不同的测试操作项下的操作奖励值的初始值以及当前页面对应的所述应用状态,初始化生成对应的探索状态表。
在这个例子中,初始化生成的探索状态表可以是具有页面元素、测试操作项、应用状态三个维度的三维结构,例如,如图2所示。
通过上述步骤S2211-步骤S2214来实现步骤S2210,在本次测试路径探索时到达的当前页面不存在探索状态表时,对探索状态表进行初始化,可以通过当前页面的探索状态表记录在测试环境中对当前页面执行测试操作的评价,通过当前页面的探索状态表所反映的对测试操作的评价,有效引导测试路径探索的方向适应测试环境,实现“强化学习”,快捷、有效地探索到目标应用的测试路径。
而应当理解的是,在本次测试路径探索时到达的当前页面存在探索状态表时,意味着在此前的测试路径探索中已经获取当前页面的页面元素执行不同的测试操作得到的评价,基于测试操作-反馈评价的测试环境中获取本次测试路径探索的指导信息,调整本次次测试路径探索的方向以及行为来适应测试环境。
在步骤S2210获取当前页面的探索状态表之后,进入:
步骤是2220,根据当前页面的探索状态表,选取符合测试探索条件的目标页面元素以及目标测试操作项。
测试探索条件是用于根据探索状态表反映的对不同页面元素在不同测试操作下的操作奖励值反映的对测试操作的评价,选取用于探索测试路径的页面元素以及测试操作项的条件。
测试探索条件可以根据具体的应用需求或者应用场景设置。
例如,测试探索条件是在当前页面的探索状态表中,在目标测试操作项下目标页面元素的操作奖励值最大。选取最大的操作奖励值对应的目标测试操作项以及目标页面元素,意味选取在此前测试路径探索中获取操作反馈评价最高的目标页面元素执行目标测试操作项所对应的测试操作,有效引导测试探索路径的方向,调整测试路径的探索适配测试环境,实现基于“强化学习”的测试路径探索,提高探索测试路径的效率。
应当理解的是,当在探索状态表中,存在多个相同的最大的操作奖励值时,可以随机选取一个最大奖励值对应的页面元素以及测试操作项作为目标页面元素以及目标测试操作项。
或者,测试探索条件是在所述当前页面的探索状态表中,在目标测试操作项下目标页面元素的操作奖励值最大,并且目标测试操作项的操作优先级最高。
测试操作项的操作优先级可以根据具体的测试场景设置。例如,测试操作项包括输入操作项、点击操作项、滑动操作项以及返回操作项,操作优先级可以根据优先级高低依次为:输入操作项、点击操作项、滑动操作项以及返回操作项。
选取最大的操作奖励值对应的最高操作优先级的目标测试操作项以及目标页面元素,通过对目标页面元素执行目标测试操作项对应的操作,能有效引导测试探索路径的方向,调整测试路径的探索适配测试环境,实现基于“强化学习”的测试路径探索,提高探索测试路径的效率。
应当理解的是,当在探索状态表中,在操作优先级最高的测试操作项下存在多个相同的最大的操作奖励值时,可以将操作优先级最高的测试操作项作为目标测试操作项,随机选取一个最大奖励值对应的页面元素作为目标页面元素。
步骤S2230,对目标页面元素执行与目标测试操作项对应的操作,获取对应的操作结果。
目标测试操作项对应的具体操作,可以通过调用目标应用提供或者支持的接口,触发目标应用执行,来获取对应的操作结果。
在一个具体的应用场景中,每个页面元素具有对应的元素属性,元素属性至少包括元素文本、元素坐标以及元素类型;页面元素的元素类型包括输入类型;测试操作项包括输入操作项。
在这个应用场景下,对目标页面元素执行与目标测试操作项对应的操作的步骤可以包括:步骤S22301-S22303。
步骤S22301,当目标页面元素的元素类型是输入类型并且目标输入项是操作输入项时,判断目标页面元素的元素文本是否为空。
在具体应用中,目标页面元素的元素类型是输入类型时,目标页面元素可能会有关联的具体文本内容作为元素文本,例如,如图3所示的页面中,对于目标页面元素是用于输入卡号的输入框,元素文本是“Card Number”;目标页面元素也可能没有关联的具体文本内容作为元素文本,例如,如图4所示的页面中,目标页面元素是圈出的输入框,就没有关联的文本内容,元素文本就为空。
步骤S22302,当目标页面元素的元素文本不为空时,通过自然语言处理模型对目标页面元素的元素文本进行词性分析,获取对应的元素关键词;根据元素关键词,在目标应用的规则库中查询获取与元素关键词匹配的输入数据,将输入数据作为所述目标页面元素的输入执行输入操作。
自然语言处理模型是基于机器学习训练得到的、用于处理自然语言的机器学习模型。例如,自然语言处理模型可以是基于美国斯坦福大学开源的StanfordCoreNLP模型搭建restful服务后构建的模型,StanfordCoreNLP模型是用于进行自然语言处理的机器学习模型,提供了一系列自然语言的分析工具,对于输入的任意一段文字,都处理后提供出该段文字中每个词语的组成与语法以及相互之间的依赖关系。
通过自然语言处理模型对目标页面元素的元素文本进行词性分析,可以分析元素文本中包括的名词、动词、介词、副词以及形容词,过滤掉元素文本中的动词、介词、副词、形容词等其他词性的词汇后保留名词,作为元素关键词。
目标应用的规则库包括目标应用中不同的元素关键词分别对应的输入数据,例如,目标应用是一个电子钱包应用,目标应用的规则库中包括分别与元素关键词“AccountNumber”、“PIN identity”等对应的输入数据,如图5所示。
通过对目标元素的元素文本进行词性分析,获取对应的元素关键词,可以基于元素关键词,通过目标应用的规则库找到匹配的输入数据,实现输入内容的联想,自动执行对目标页面元素的输入操作,而无需额外编写特定的输入操作脚本来实现,提高执行输入操作的效率,进而提高探索测试路径的效率。
以图3所示的页面为例,在对于作为目标页面元素的输入框的元素文本“CardNumber”通过自然语言处理模型进行词性分析后,确定“Card”、“Number”均是名词,对应得到元素关键词是“Card Number”,通过该元素关键词在图5所示的规则库中查询,匹配得到的输入数据是“482810230406585”,可以将该输入数据作为输入,填入“Card Number”对应的输入框中,完成输入操作。
步骤S22303,当目标页面元素的元素文本为空时,选取与目标页面元素的元素坐标距离最近、并且元素文本不为空的目标应用的当前页面的页面元素作为替代页面元素;通过自然语言处理模型对替代页面元素的元素文本进行词性分析,获取对应的元素关键词;根据元素关键词,在目标应用的规则库中查询获取与元素关键词匹配的输入数据,将输入数据作为所述目标页面元素的输入执行输入操作。
在目标页面元素的元素文本为空时,通过找到与目标页面元素的元素坐标距离最近并且元素文本不为空的页面元素作为替代页面元素,可以确保能获取对应的元素关键词,基于元素关键词,通过目标应用的规则库找到匹配的输入数据,实现输入内容的联想,自动执行对目标页面元素的输入操作,而无需额外编写特定的输入操作脚本来实现,提高执行输入操作的效率,进而提高探索测试路径的效率。
在步骤S22303中,可以类似步骤S22302,通过自然语言处理模型对替代页面元素的元素文本进行词性分析,获取对应的元素关键词,以及根据元素关键词,在目标应用的规则库中查询获取与元素关键词匹配的输入数据,在此不再赘述。
以图4所示的页面为例,在对于作为目标页面元素的输入框的元素文本为空时,可以将与目标页面元素距离最近、并且元素文本不为空而是“PIN to verify youridentity”的页面元素作为替代页面元素,对元素文本“PIN to verify your identity”通过自然语言处理模型进行词性分析后,确定“PIN”、“identity”均是名词,其余的“to”是介词、“verify”是动词、“your”是形容词,对应得到元素关键词是“PIN identity”,通过该元素关键词在图5所示的规则库中查询,匹配得到的输入数据是“123456”,可以将该输入数据作为输入,填入作为目标页面元素的输入框中,完成输入操作。
通过上述步骤S22301-步骤S22303,可以对元素类型是输入类型的目标页面元素,执行目标测试操作项是输入操作项对应的输入操作时,分析获取目标页面元素的元素关键词,通过元素关键词在目标应用的规则库中匹配查询对应的输入数据,实现输入内容的联想,自动执行对目标页面元素的输入操作,而无需额外编写特定的输入操作脚本来实现,提高执行输入操作的效率,进而提高探索测试路径的效率。
在这个例子中,步骤S2230可以包括:步骤S2231-步骤S2234。
步骤S2231,在目标页面元素执行与目标测试操作项对应的操作后,获取操作后的应用状态。
在对目标页面元素执行与目标测试操作项对应的操作,可通过目标应用提供或支持的接口,监测获取目标应用在操作后的应用状态。在实际应用中,如果操作后目标应用停留的页面未设置对应的应用状态,可以通过与上述根据页面所包括的所有页面元素的页面文本设置页面对应的应用状态的步骤,设置操作后跳转页面的应用状态。
步骤S2232,当操作后的应用状态与当前页面对应的应用状态相同时,确定操作结果是应用状态未改变。
如前文所述,目标应用的应用状态可以通过与其唯一对应的页面中包括的所有页面元素的页面文本拼接得到的字符串来指示。
在这个例子中,可以通过对指示操作后的应用状态的字符串以及指示当前页面对应的应用状态的字符串进行字符串比对,根据比对后两个字符串是否相同来确定应用状态是否改变。
类似地,在应用状态通过页面中包括的所有页面元素的页面文本拼接得到的字符串的哈希值指示时,可以比较哈希值的数值是否相同来确定应用状态是否改变。
步骤S2233,当操作后的应用状态与当前页面对应的应用状态不同、并且操作后的应用状态所对应的页面属于目标应用的页面时,确定操作结果是应用状态改变。
步骤S2234,当操作后的应用状态与当前页面对应的应用状态不同、并且操作后的应用状态所对应的页面不属于目标应用的页面时,确定操作结果是退出应用。
通过上述步骤S2231-步骤S2234来实现步骤S2230,可以确定在测试环境中对目标页面元素执行目标测试操作项对应的操作时,具体得到的应用状态未改变、应用状态改变或者退出应用三类操作结果,可以结合后续步骤,根据不同的操作结果设置不同的操作奖励值,体现不同的操作反馈评价。
步骤S2240,根据操作结果,设置目标页面元素在目标测试操作项下的操作奖励值,对应得到更新后的当前页面的探索状态表,以供此后测试路径探索时获取使用,并且,根据与操作结果对应的页面跳转关系,生成或者更新对应的测试路径。
在这里例子的一个更具体的应用场景中,操作结果包括应用状态未改变、应用状态改变以及退出应用。对应的,根据操作结果,设置目标页面元素在目标测试操作项下的操作奖励值,对应得到更新后的所述当前页面的探索状态表的步骤可以包括:步骤S22401-S22402。
步骤S22401,操作结果是应用状态未改变或者退出应用时,设置目标页面元素在目标测试操作项下的操作奖励值为最小奖励值。
如前文所述,最小奖励值表征对一个页面元素在执行一个测试操作项对应的操作给予的最低评价。操作结果是应用状态未改变或者退出应用,意味着实际对目标页面元素执行的目标测试操作项所对应的操作是无效或者异常的测试操作,设置目标页面元素在目标测试操作项下的操作奖励值为最小奖励值,可以在后续的测试路径探索中,引导避开重复这类无效或者异常的测试操作。
步骤S22402,操作结果是应用状态改变时,设置目标页面元素在目标测试操作项下的操作奖励值为当前数值与最大奖励值之和。
最大奖励值表征对一个页面元素在执行一个测试操作项对应的操作给予的最高评价。最大奖励值的具体数值大于最小奖励值、并且小于初始化探索状态表使用的奖励起点值,可以根据具体的应用场景或者应用需求设置,例如,最小奖励值是-10000,奖励起点值是0,可以将最大奖励值设置为-1。
操作结果是应用状态改变,意味着实际对目标页面元素执行的目标测试操作项所对应的操作是有效的测试操作,设置目标页面元素在目标测试操作项下的操作奖励值为当前数值与最大奖励值之和,可以在后续的测试路径探索中,引导通过这类有效的测试操作来实施测试路径探索。
以图6所示为例,假设本次测试路径探索时,当前页面是页面1,页面1中包括页面元素{element_1,elment2_2,...,elment2_n},测试操作项包括点击操作项(click)、输入操作项(input)、返回操作项(back)以及滑动操作项(swipe),操作优先级由高至低依次为:input、click、swipe以及back;
并假设当前页面并未存在探索状态表,根据上文提供的初始化状态探索表步骤,初始化获取当前页面的探索状态表如图6的状态探索表1,其中状态探索表1所有操作奖励值都被初始化为奖励起点值0,对应的应用状态是state;
在探索状态表1中选取目标页面元素以及目标测试操作项,input的优先级最高,将input作为目标测试操作项,在input下随机选择一个element_2作为目标页面元素,对element_2执行与input对应的输入操作,获取对应的操作结果:
如果操作结果是退出应用或者应用状态未改变,将input下对应的element_2的操作奖励值设置为最小奖励值-10000;如果操作结果是应用状态改变,将input下对应的element_2的操作奖励值设置为当前数值0与最大奖励值-1之和:-1;对应可以得到本次测试路径探索更新的探索状态表2;
继续执行测试路径探索,每次测试路径探索到达页面1时,会选择操作奖励值为0对应的目标测试操作项以及目标页面元素进行测试路径探索,不会再选取操作奖励值为-1或-10000的测试操作项以及页面元素,直至多次测试路径探索后,页面1的探索状态表更新为探索状态表3,在探索状态表3中所有的操作奖励值都小于0;
如果当前还未达到预设探索次数,将继续进行测试路径探索,在到达页面1时继续更新探索状态表3。
目标应用其他的应用状态对应的页面的状态探索表的更新,也与图6类似,不再重复举例。并且,在实际实施时,当某个页面的状态探索表中的操作奖励值均为最小奖励值时,意味着目标应用可能存在异常,可以终止对目标应用的测试路径探索进行测试报错,便于定位目标应用的异常进行解决。
继续基于上述具体的应用场景,操作结果包括应用状态未改变、应用状态改变以及退出应用,根据与操作结果对应的页面跳转关系,生成或者更新对应的所述测试路径的步骤包括:步骤S2241-S2243。
步骤S2241,当操作结果是应用状态改变时,确定对应的页面跳转关系。
页面跳转关系用于描述对目标页面元素执行与目标测试操作项对应的操作后,由当前页面跳转到改变的应用状态所对应的目标应用的跳转页面。
例如,在本次测试路径探索时对应的当前页面是页面1,对目标页面元素element1执行与目标测试操作项input对应的输入操作后,目标应用跳转到页面2,页面跳转关系可以通过{跳转前页面:页面1;目标页面元素:element1;目标测试操作项:input;跳转后页面:页面2}这样的数据结构来表达。
步骤S2242,当目标应用的测试路径的路径节点,与当前页面对应或者与目标应用的跳转页面对应时,根据页面跳转关系更新对应的测试路径。
继续以上述步骤S2241中所举为例,假设本次测试路径探索之前的测试路径探索过程中探索到的测试路径中,包括页面1或页面2对应的路径节点,可以根据页面1与页面2之间的页面跳转关系,更新对应的测试路径,比如,测试路径中包括页面1对应的路径节点未包括页面2对应的路径节点,可以在测试路径中添加页面2对应的路径节点,并且通过页面1对应的路径节点与页面2对应的路径节点之间的连接,指示页面1是通过对element1实施Input这一测试操作项跳转到页面2的;或者,测试路径中包括页面1、2对应的路径节点,但是连接未体现页面1是通过对element1实施Input这一测试操作项跳转到页面2的页面跳转关系,可以在两个路径节点之间添加与该页面连接关系对应的连接,等等。
步骤S2243,当目标应用的测试路径的路径节点,与目标应用的当前页面以及目标应用的跳转页面均不对应时,根据页面跳转关系生成新的测试路径。
继续以上述步骤S2241中所举为例,假设本次测试路径探索之前的测试路径探索过程中探索到的测试路径中,不存在与页面1或页面2对应的路径节点,即不包括与页面1或页面2对应的路径节点,对应的,可以生成新的测试路径,该测试路径包括与页面1以及页面2对应的路径节点,并且通过页面1对应的路径节点与页面2对应的路径节点之间的连接,指示页面1是通过对element1实施Input这一测试操作项跳转到页面2的。
通过上述步骤S2241-S2243,在操作结果是应用状态改变时,确定对应的实际有效的页面跳转关系,根据该页面跳转关系对应更新此前探索到的测试路径或者生成新的测试路径,可以获取精准、有效的测试路径。
以上已经结合具体的应用场景下的例子说明步骤S2240的实现。通过上述步骤S2210-S2240来实现步骤S2200中的每一次的探索测试路径,获取每一次探索测试路径对应的当前页面的状态探索表,根据状态探索表反映的对于不同测试操作的评价,获取测试路径探索的指导信息,调整本次测试路径探索的方向以及行为来适应测试环境,以此反复执行探索测试路径,直至执行到满足预设探测次数后,获取目标应用的所有测试路径。应当理解的是,如果某次测试路径探索后退出目标应用,但是当前还未满足预设探测次数,可以触发重新进入目标应用继续进行测试路径探索。
在一个例子中,预设探索次数是预设数目的探索周期中包括的探索子次数的总和。探索子次数可以根据具体的应用场景或者应用需求设置,预设数目可以根据预设探索次数以及探索子次数确定。例如,预设探索次数是5000,每个探索周期中包括的探索子次数是100,对应的探索周期的预设数目是50。
对应的,步骤S2200可以包括:
在每个探索周期,初始化目标应用后,对目标应用进行探索子次数的测试路径探索,以此重复直至完成预设数目的探索周期对目标应用的测试路径探索,获取目标应用的测试路径。
在每个探索周期,对目标应用重新初始化后,清楚目标应用中已有的应用数据后,再重新启动目标应用的主进程进行探索子次数的测试路径探索,可以排除已有的应用数据对测试路径探索的异常影响,提高测试路径探索的效率。
在上述步骤S2200完成对目标应用的测试路径探索,获取目标应用的测试路径之后,进入:
步骤S2300,根据目标应用的测试路径,生成对应的测试用例,以根据测试用例执行目标应用的自动化测试。
如前文所述,获取的目标应用的每条测试路径所指示的目标应用的多个不同应用状态所对应的页面之间的页面跳转关系是实际有效的,已经排除导致目标应用状态未实际发生改变或者退出目标应用的、无效的页面跳转关系。
因此,基于目标应用的每条测试路径反映的实际有效的页面跳转关系,选取满足具体的应用测试需求的页面跳转关系或者页面跳转关系的集合,根据选取的页面跳转关系或者页面跳转关系的集合,生成对应的测试用例,实现自动生成测试用例来实现应用的自动化测试,极大节省为编写及设计测试用例所投入的人力或物力资源。同时,基于该自动生成的测试用例是遵循选取的页面跳转关系或者页面跳转关系的集合生成的,可以基于该页面跳转关系或者页面跳转关系的集合直接执行应用的自动化测试,而无需额外再编写执行自动化测试的测试脚本,提高应用的自动化测试的执行效率。此外,由于目标应用的测试路径的获取是通过预设探索次数的测试路径探索实现的,在每次测试路径探索时会对目标应用的不同应用状态下对应的页面进行对应的测试操作,在测试路径探索过程中也能同步完成对于目标应用的可靠性测试或者鲁棒性测试,节省测试投入的时间、人力以及物力成本,提高测试效率。
<例子>
在图7中示出了目标应用是电子钱包类应用,实施本实施例中提供的应用测试方法过程中探索测试路径的结果。目标应用中共有80个支持通过对应的应用接口触发自动执行对应操作到达的应用组件(activity)。activity是Android组件中最基本也是最为常见用的应用组件,提供对应的页面与用户实现交互,用来与用户交互完成某项特定任务。
如图7所示,在通过5000次的测试路径探索,已经遍历自动执行支付、充值、绑卡、解绑等电子钱包类应用常见的应用操作,并且探索到的测试路径已经可以覆盖60个应用组件,覆盖率达到75%。
可见,通过本实施例中提供的应用测试方法,能通过有限次数的测试路径探索,就获取对目标应用的应用组件覆盖率极高的测试路径,基于该测试路径来自动生成满足测试需求的测试用例,来实现对目标应用的自动化测试,可以极大节省自动化测试所需的人力或物力资源,提高测试效率。
<应用测试装置>
在本实施例中,还提供一种应用测试装置3000,如图8所示,包括:应用初始化单元3100、测试路径探索单元3200以及测试用例生成单元3300,用于实施本实施例中提供的应用测试方法,在此不再赘述。
应用初始化单元3100,用于初始化待测试的目标应用。
测试路径探索单元3200,用于对所述目标应用进行预设探索次数的测试路径探索,获取所述目标应用的测试路径。
可选地,测试路径探索单元3200还用于:
在每次进行测试路径探索时,获取本次测试路径探索对应的所述目标应用的当前页面的探索状态表;所述探索状态表中包括所述当前页面中每个页面元素在不同的测试操作项下的操作奖励值以及所述目标应用的当前页面对应的应用状态;
根据所述当前页面的探索状态表,选取符合测试探索条件的目标页面元素以及目标测试操作项;
对所述目标页面元素执行与所述目标测试操作项对应的操作,获取对应的操作结果;
根据所述操作结果,设置所述目标页面元素在目标测试操作项下的所述操作奖励值,对应得到更新后的所述当前页面的探索状态表,以供此后测试路径探索时获取使用,并且,根据与所述操作结果对应的页面跳转关系,生成或者更新对应的所述测试路径。
可选地,测试路径探索单元3200用于实施所述在每次进行测试路径探索时,获取本次测试路径探索对应的所述目标应用的当前页面的探索状态表的步骤包括:
在所述当前页面不存在对应的所述探索状态表时,识别确定所述当前页面包括的所有页面元素;每个所述页面元素具有对应的元素属性,所述元素属性至少包括元素文本、元素坐标以及元素类型;
根据所述当前页面包括的所有所述页面元素的元素文本,设置所述当前页面对应的所述应用状态;
根据所述当前页面的每个所述页面元素的元素类型,设置所述页面元素在不同的测试操作项下的操作奖励值的初始值;
根据所述当前页面的每个所述页面元素在不同的测试操作项下的操作奖励值的初始值以及所述当前页面对应的所述应用状态,初始化生成对应的所述探索状态表。
可选地,测试路径探索单元3200用于实施的所述在所述当前页面不存在对应的所述探索状态表时,识别确定所述当前页面包括的页面元素的步骤包括:
通过场景文字识别模型,对所述当前页面进行场景文字识别,得到第一页面元素集合;所述第一页面元素集合中每个所述页面元素具有对应的元素坐标以及元素文本;所述场景文字识别模型是基于深度学习算法训练的、用于在图像中检测和识别文字的机器学习模型;
通过页面解析工具,解析所述目标应用的当前页面,得到第二页面元素集合;所述第二页面元素集合中每个所述页面元素具有对应的元素坐标、元素文本以及控件属性;所述页面解析工具用于解析页面,得到页面中包括的页面元素;
根据所述第二页面元素集合,对所述第一页面元素集合进行修正处理,使得修正处理后的所述第一页面元素集合中每个所述页面元素具有对应的所述元素属性;
将所述校对处理后的所述第一页面元素集合中包括的所有所述页面元素,确定为所述当前页面包括的页面元素。
可选地,测试路径探索单元3200用于实施的所述根据所述第二页面元素集合,对所述第一页面元素集合进行修正处理的步骤包括:
在所述第二页面元素集合中包括所述控件属性是不可点击的页面元素、并且所述第一页面元素集合中包括与所述控件属性是不可点击的页面元素的元素坐标相同的页面元素时,在所述第一页面元素集合中删除所述元素坐标相同的页面元素;
在所述第二页面元素集合中包括所述控件属性是可点击的所述页面元素、并且所述第一页面元素集合中不包括与所述控件属性是可点击的页面元素的元素坐标相同的页面元素时,将所述控件属性是可点击的页面元素添加到所述第一页面元素集合中,并将添加的所述页面元素的元素类型设置为点击类型;
在所述第二页面元素集合中包括所述控件属性是可点击的页面元素、并且所述第一页面元素集合中包括与所述控件属性是可点击的页面元素的元素坐标相同的页面元素时,将所述第一页面元素集合中所述元素坐标相同的页面元素的元素类型设置为点击类型;
在所述第二页面元素集合中包括所述控件属性是可输入的页面元素、并且所述第一页面元素集合中不包括与所述控件属性是可输入的页面元素的元素坐标相同的页面元素时,将所述控件属性是可输入的页面元素添加到所述第一页面元素集合中,并将添加的所述页面元素的元素类型设置为输入类型;
在所述第二页面元素集合中包括所述控件属性是可输入的页面元素、并且所述第一页面元素集合中包括与所述控件属性是可输入的页面元素的元素坐标相同的页面元素时,将所述第一页面元素集合中所述元素坐标相同的页面元素的元素类型设置为输入类型;
对所述第一页面元素集合中未根据所述第二元素集合设置元素类型的其他所述页面元素,分别设置对应的所述元素类型为场景文字识别类型。
可选地,所述页面元素的元素类型包括点击类型、输入类型以及场景文字识别类型;所述测试操作项至少包括点击操作项、输入操作项、滑动操作项、返回操作项;
测试路径探索单元3200用于实施的所述根据所述当前页面的每个所述页面元素的元素类型,设置所述页面元素在不同的测试操作项下的操作奖励值的初始值的步骤包括:
当所述页面元素的元素类型是点击类型时,设置所述页面元素在所述输入操作项下的操作奖励值的初始值为最小奖励值,以及在其他不同的测试操作项下的操作奖励值的初始值为奖励起点值;
当所述页面元素的元素类型是输入类型时,设置所述页面元素在所述点击操作项下的操作奖励值的初始值为最小奖励值,以及在其他不同的测试操作项下的操作奖励值的初始值为奖励起点值;
当所述页面元素的元素类型是场景文字识别类型时,设置所述页面元素在每个不同的测试操作项下的操作奖励值的初始值为奖励起点值。
可选地,所述测试探索条件是在所述当前页面的探索状态表中,在所述目标测试操作项下所述目标页面元素的操作奖励值最大;
或者,
所述测试探索条件是在所述当前页面的探索状态表中,在所述目标测试操作项下所述目标页面元素的操作奖励值最大,并且所述目标测试操作项的操作优先级最高。
可选地,测试路径探索单元3200用于实施的所述对所述目标页面元素执行与所述目标测试操作项对应的操作,获取对应的操作结果的步骤包括:
在所述目标页面元素执行与所述目标测试操作项对应的操作后,获取操作后的所述应用状态;
当所述操作后的所述应用状态与所述当前页面对应的应用状态相同时,确定操作结果是应用状态未改变;
当所述操作后的所述应用状态与所述当前页面对应的应用状态不同、并且所述操作后的所述应用状态所对应的页面属于所述目标应用的页面时,确定操作结果是应用状态改变;
当所述操作后的所述应用状态与所述当前页面对应的应用状态不同、并且所述操作后的所述应用状态所对应的页面不属于所述目标应用的页面时,确定操作结果是退出应用。
可选地,所述操作结果包括应用状态未改变、应用状态改变以及退出应用;
测试路径探索单元3200用于实施的所述根据所述操作结果,设置所述目标页面元素在目标测试操作项下的所述操作奖励值,对应得到更新后的所述当前页面的探索状态表的步骤包括:
所述操作结果是应用状态未改变或者退出应用时,设置目标页面元素在目标测试操作项下的所述操作奖励值为最小奖励值;
所述操作结果是应用状态改变时,设置目标页面元素在目标测试操作项下的所述操作奖励值为当前数值与最大奖励值之和;
以及,
所述根据与所述操作结果对应的页面跳转关系,生成或者更新对应的所述测试路径的步骤包括:
当所述操作结果是应用状态改变时,确定对应的页面跳转关系;所述页面跳转关系用于描述对所述目标页面元素执行与所述目标测试操作项对应的操作后,由所述当前页面,跳转到所述改变的应用状态所对应的目标应用的跳转页面;
当所述目标应用的测试路径的路径节点,与所述当前页面对应或者与所述目标应用的跳转页面对应时,根据所述页面跳转关系更新对应的所述测试路径;
当所述目标应用的测试路径的路径节点,与所述目标应用的当前页面以及所述目标应用的跳转页面均不对应时,根据所述页面跳转关系生成新的所述测试路径。
可选地,每个所述页面元素具有对应的元素属性,所述元素属性至少包括元素文本、元素坐标以及元素类型;所述页面元素的元素类型包括输入类型;所述测试操作项包括输入操作项;
测试路径探索单元3200用于实施的所述对所述目标页面元素执行与所述目标测试操作项对应的操作的步骤包括:
当所述目标页面元素的元素类型是输入类型并且所述目标输入项是操作输入项时,判断所述目标页面元素的元素文本是否为空;
当所述目标页面元素的元素文本不为空时,通过自然语言处理模型对所述目标页面元素的元素文本进行词性分析,获取对应的元素关键词;根据所述元素关键词,在所述目标应用的规则库中查询获取与所述元素关键词匹配的输入数据,将所述输入数据作为所述目标页面元素的输入执行输入操作;
当所述目标页面元素的元素文本为空时,选取与所述目标页面元素的元素坐标距离最近、并且所述元素文本不为空的所述目标应用的当前页面的页面元素作为替代页面元素;通过自然语言处理模型对所述替代页面元素的元素文本进行词性分析,获取对应的元素关键词;根据所述元素关键词,在所述目标应用的规则库中查询获取与所述元素关键词匹配的输入数据,将所述输入数据作为所述目标页面元素的输入执行输入操作;
所述自然语言处理模型是基于机器学习训练得到的、用于处理自然语言的机器学习模型;所述目标应用的规则库中包括所述目标应用中不同的所述元素关键词分别对应的输入数据。
可选地,所述预设探索次数是所述预设数目的探索周期中包括的探索子次数的总和;测试路径探索单元3200还用于:
在每个所述探索周期,初始化所述目标应用后,对所述目标应用进行所述探索子次数的测试路径探索,以此重复直至完成所述预设数目的探索周期对所述目标应用的测试路径探索,获取所述目标应用的测试路径。
测试用例生成单元3300,用于根据所述目标应用的测试路径,生成对应的测试用例,以根据所述测试用例执行所述目标应用的自动化测试。
本领域技术人员应当明白,可以通过各种方式来实现应用测试装置3000。例如,可以通过指令配置处理器来实现应用测试装置3000。例如,可以将指令存储在ROM中,并且当启动设备时,将指令从ROM读取到可编程器件中来实现应用测试装置3000。例如,可以将应用测试装置3000固化到专用器件(例如ASIC)中。可以将应用测试装置3000分成相互独立的单元,或者可以将它们合并在一起实现。应用测试装置3000可以通过上述各种实现方式中的一种来实现,或者可以通过上述各种实现方式中的两种或更多种方式的组合来实现。
在本实施例中,应用测试装置3000可以是内置在待测试的目标应用中模块,或者可以作为插件、补丁或者嵌入件等被安装或加载在目标应用中后运行使用,还可以是封装成类似SDK(Software Development Kit,软件开发工具包)的测试工具包被调用来测试目标应用。
<应用测试设备>
图9是示出可以实现本发明的实施例的应用测试设备4000的硬件配置的框图。
应用测试设备4000可以是便携式电脑、手机、平板电脑等移动终端,也可以是台式计算机、中央处理设备等电子设备。如图9所示,应用测试设备4000可以包括处理器4100、存储器4200、接口装置4300、通信装置4400、显示装置4500、输入装置4600、扬声器4700、麦克风4800等等。其中,处理器4100可以是中央处理器CPU、微处理器MCU等。存储器4200例如包括ROM(只读存储器)、RAM(随机存取存储器)、诸如硬盘的非易失性存储器等。接口装置4300例如包括USB接口、耳机接口等。通信装置4400例如能够进行有线或无线通信,具体地可以包括Wifi通信、蓝牙通信、2G/3G/4G/5G通信等。显示装置4500例如是液晶显示屏、触摸显示屏等。输入装置4600例如可以包括触摸屏、键盘、体感输入等。用户可以通过扬声器4700和麦克风4800输入/输出语音信息。
图9所示的应用测试设备4000仅仅是说明性的并且决不意味着对本实施例的应用或使用的任何限制。尽管在图8中对应用测试设备4000示出了多个装置,但是,本实施例中可以仅涉及其中的部分装置,例如,应用测试设备4000只涉及处理器4100和存储装置4200。
在一个的子中,本实施例的应用测试设备4000可以包括:
存储器4200,用于存储可执行的指令;
处理器4400,用于根据所述可执行的指令的控制,运行所述应用测试设备4000执行如本实施例中的任意一项所述的应用测试方法。
技术人员可以根据本发明所公开方案设计指令。指令如何控制处理器进行操作,这是本领域公知,故在此不再详细描述。
具体的一个例子中,应用测试设备4000可以包括安装或加载有待测试目标应用的手机以及与该手机建立连接用于处理测试数据的服务器,或者,应用测试设备4000也可以仅是安装或加载有待测试目标应用的手机。
<可读存储介质>
在本实施例中,还提供一种可读存储介质,可读存储介质存储有可被计算机读取并运行的计算机程序,所述计算机程序用于在被所述计算机读取运行时,执行如本实施例所述的应用测试方法。
可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
以上已经结合附图描述了本发明的实施例,根据本实施例,提供一种应用测试方法、装置、设备及可读存储介质,在初始化待测试的目标应用后,通过对目标应用进行预设探索次数的测试路径探索,获取可以确保对目标应用实现有效测试的测试路径,实现根据测试路径可以自动生成对应的测试用例,来执行对目标应用的自动化测试,实现无需依赖测试人员的人力投入,就能自动生成测试用例对目标应用进行自动测试,节省大量的测试人力或物力资源,提高测试效率。
本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。
计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
用于执行本发明操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本发明的各个方面。
这里参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。对于本领域技术人员来说公知的是,通过硬件方式实现、通过软件方式实现以及通过软件和硬件结合的方式实现都是等价的。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。本发明的范围由所附权利要求来限定。