掌桥专利:专业的专利平台
掌桥专利
首页

一种基于强化学习的Web应用测试用例自动生成方法及系统

文献发布时间:2024-04-18 19:53:33


一种基于强化学习的Web应用测试用例自动生成方法及系统

技术领域

本发明涉及一种基于强化学习的Web应用测试用例自动生成方法及系统,属于软件测试领域。

背景技术

近年来,Web应用急剧增加。最近的调查显示,截止2022年7月,全球Web应用已超过10亿个。每天,用户平均花费7小时使用web应用。人工测试和自动化测试是保证web应用质量的重要手段。

但是,人工测试十分耗时。并且,Web应用中存在大量可行序列。人工测试用例只能覆盖其中一小部分。Selenium、playwright等工具能够根据测试人员编写的测试脚本,生成模拟人工操作的点击、输入等动作来与目标应用交互。但是这些工具仍然需要测试人员具有专业知识来编写测试用例。一种Web应用程序自动化测试工具及方法CN201710023922.8进一步支持T语言编写测试用例,测试人员仅需要了解网页测试场景和简单的基础编程知识,即可编写测试脚本进行测试。尽管T语言对Java和C语言进行了简化,CN201710023922.8仍然需要测试人员具备研发技能与场景知识。

总之,尽管现有技术简化了测试用例便携,但是仍然需要人工介入,难以自动化生成有效动作序列。

发明内容

本发明技术解决问题:克服现有技术的不足,提供一种基于强化学习的Web应用测试用例自动生成方法及工具,能够利用已执行过的动作序列训练有效的动作选择策略生成测试用例,支持自动化提取应用状态,并在状态上选择动作,根据动作执行结果,采用强化学习训练动作选择策略,从而不再人力进行测试用例生成。

本发明技术解决方案:

第一方面,提供一种基于强化学习的Web应用测试用例自动生成方法,包括以下步骤:

步骤1:从网页中提取状态:获取网页的节点树,并用节点树初始化状态;然后遍历状态删除对页面可视化没有影响的冗余节点树的元素及其相关边,化简状态的元素数量;将化简之后的节点树称为渲染树,对渲染树上的元素进行宽度优先遍历,如果两个元素相似,则认为两个元素具有相似的功能,对于一个元素,如果存在另一元素与该一个元素相似,则认为两个元素为具有相似功能的元素,具有似功能的元素被识别为同一状态,从而从网页中提取状态;

步骤2:在提取的状态中识别可访问元素,生成可访问元素的动作:通过节点树的元素识别动作,遍历原始节点树上的元素,如果一个元素符合预先定义的条件,则认为在动作中存在可访问元素,并生成可访问元素的动作;

步骤3:构建以状态为结点,以状态之间转移的动作为边的状态图,反映各状态之间的转移关系,所述状态图包括状态集、动作集、动作可触发状态转移和初始状态;并且将当前状态和当前动作加入状态图中时,需要判断当前状态是否已经存在于状态图中,识别当前状态是否为已知状态,避免状态图中存在冗余状态;对于当前动作,遍历状态图的动作集,判断动作集中是否存在已知动作与该当前动作相同,避免状态图中存在冗余动作;

步骤4:基于状态图中的状态和动作,评估每一步执行的动作对状态执行的贡献,设计奖励模型,通过奖励模型为动作计算奖励;每当当前动作执行完毕,状态从前一个状态转移至当前状态,根据所述奖励模型为当前动作计算奖励;

步骤5:根据步骤1的状态、步骤2输出的动作和步骤4的奖励,利用强化学习算法训练动作选择策略,并根据动作选择策略选择动作,输出所选择的动作;

步骤6:在Web应用上执行步骤5输出的动作,使得Web应用跳转到另一网页;

步骤7:继续执行步骤1-6,在Web应用上执行的动作序列保存为测试用例。

进一步,所述步骤1具体实现过程如下:

(11)获取网页的DOM树,并用DOM树初始化状态,即分别用DOM树的结点集和边集初始化状态的结点集和边集;

(12)遍历状态删除冗余元素,如果一个元素有且仅有一个儿子元素,则从状态的结点集中删除该元素,从状态的边集中删除与该元素相关联的边,并向状态的边集中添加从该元素的父元素到该元素的儿子元素的边;

(13)在渲染树上进行宽度优先遍历,对于一个元素,如果存在另一个元素与该一个元素相似,则认为该一个元素和另一元素为相同的服务功能,并用该一个元素表征该服务功能;然后进一步遍历两个元素的子元素,在另一个元素的子元素中寻找与该一个元素的子元素的相似元素;反之,如果该一个元素不存在相似元素,则停止寻找该一个元素的子元素的相似元素。

进一步,所述步骤(13)中,另一个元素与该一个元素相似的判断包括:另一个元素与该一个元素具有相似结构,或另一元素与该一个元素具有相似样式,其中:

(131)另一个元素与该一个元素具有相似结构:是利用元素的路径语言的模糊性识别元素之间是否具有相似结构,即通过忽略它路径语言上祖辈元素的索引来查找相似元素;

(132)另一个元素与该元素具有相似样式:将另一个元素与该元素的样式相似度定义为它们类名、位置、尺寸、超链接、外部文件引用和标识的编辑距离的加权平均值;如果另一个元素与该一个元素的样式相似度大于等于预先设定的阈值,则认为另一个元素与该一个元素具有相似样式。

进一步,所述步骤2中,预先定义的条件为如下三个之一:

(21)如果一个元素的标签名匹配的默认设置,则认为该一个元素被操作,并生成一个访问该一个元素的动作;

(22)如果一个元素的标签名是输入控件或多行纯文本编辑控件,并且该一个元素的类型是单选按钮和复选框之一,则认为该一个元素是可点击元素,并为该一个元素生成一个类型为可点击的动作访问该一个元素;

(23)如果一个元素标签名和类型匹配用户配置,认为该一个元素可被操作,并生成访问该一个元素的动作。

进一步,所述步骤3中,将状态和动作加入状态图时,均识别是否已经存在于状态图中具体判断如下:

(31)逐一比较当前状态和已有状态是否相同,如果当前状态与已有状态相同,并将当前状态置为已有状态;反之,如果当前状态与已有状态不同,说明当前状态尚未存在于状态图的状态集中,将当前状态加入状态图的状态集中;然后,向状态图中添加转移从前一状态转移到当前状态的转移;

(32)在当前状态时,也需要将当前状态的每一个可行动作和状态图中的已有动作比较,如果当前动作和已有动作相同,则不再将当前动作加入动作集中;反之,如果当前动作和已有动作不相同,则将当前动作加入动作集;对于动作,遍历状态图的动作集以检查是否存在已有动作和当前动作相同,如果两个动作的类型相同,且它们所访问的元素相似,则认为这两个动作相同。

进一步,所述步骤(1)中,判断如果当前状态与已有状态相同时,构建一棵状态索引树,采用相似度进行判断,如果当前状态与状态集中的已有状态相似度高于预先设定的阈值,则认为当前状态与已有状态相同;

所述相似度判断具体如下:

给定当前状态,构建一棵状态索引树,通过相似度判断比较状态和状态索引树判断状态图中是否存在已有状态与当前状态相同;

具体实现为:构建状态索引树时,首先为当前状态s-上的所有元素打上标签用来表示元素属于哪一状态;然后,获取到已有状态构成的状态索引树,如果状态索引树尚未构建,将状态索引树置为当前状态,并且不存在与当前状态相同的状态;

如果存在状态索引树,遍历状态索引树计算当前状态和已有状态之间的相似元素数量;同时,也将当前状态的元素合并入状态索引树中,计算得到当前状态与已有状态的相似元素数量;

获得当前状态与已有状态的相似元素数量后,分别计算当前状态与已有状态之间的相似度,当前状态与已有状态之间的相似度定义为:

其中,#similarNum是状态s与已有状态s′之间相似元素数量,#s和#s′分别表示状态s与已有状态s′的元素数量;min表示最小;

确定某一状态与已有状态之间具有最大相似度,如果最大相似度大于预先设定的阈值,则认为该状态与已有状态是相同状态;否则,某一状态与已有状态不是相同状态。

进一步,所述步骤4中,所述奖励模型如下:

r

r′

其中,w

所述r

其中,h(e)和w(e)分别表示一个元素e

所述r

即如果当前动作所访问的元素是变化变化元素,当前动作被赋予的奖励值为1/mutants(s

所述r

其中,N

所述r

其中,m

进一步,所述步骤5,利用强化学习算法训练动作选择策略具体实现如下:

给定一个Web应用,自动化生成一组测试用例,首先记录目标应用主页链接,并初始化测试用例集、策略和状态集;

执行若干个周期,当周期开始时,通过重新访问目标应用的主页链接到达主页重置目标应用;接着从主页提取状态及动作;在每个周期中,通过执行若干步生成动作序列,在第i步中,在前一状态选择当前动作,执行当前动作后,目标应用跳转至当前网页,从当前网页中提取当前状态和可行动作,利用提取到的当前状态更新状态集,并为可行动作中的当前动作计算当前动作的奖励,基于前一状态、当前动作、当前状态和和当前动作的奖励r

所述更新策略通过更新函数Q进行,更新方式为:

Q(s

Q(s

第二方面,本发明提供一种基于强化学习的Web应用测试用例自动生成系统,包括:状态提取模块、动作提取模块、状态图构建模块、奖励模型模块和强化学习智能体模块;其中:

状态提取模块:从网页中提取状态:获取网页的节点树,并用节点树初始化状态;然后遍历状态删除对页面可视化没有影响的冗余节点树的元素及其相关边,化简状态的元素数量;将化简之后的节点树称为渲染树,对渲染树上的元素进行宽度优先遍历,如果两个元素相似,则认为两个元素具有相似的功能,对于一个元素,如果存在另一元素与该一个元素相似,则认为两个元素为具有相似功能的元素,具有似功能的元素被识别为同一状态,从而从网页中提取状态;

动作提取模块:在提取的状态中识别可访问元素,生成可访问元素的动作:通过节点树的元素识别动作,遍历原始节点树上的元素,如果一个元素符合预先定义的条件,则认为在动作中存在可访问元素,并生成可访问元素的动作;

状态图构建模块:构建以状态为结点,以状态之间转移的动作为边的状态图,反映各状态之间的转移关系,所述状态图包括状态集、动作集、动作可触发状态转移和初始状态;并且将当前状态和当前动作加入状态图中时,需要判断当前状态是否已经存在于状态图中,识别当前状态是否为已知状态,避免状态图中存在冗余状态;对于当前动作,遍历状态图的动作集,判断动作集中是否存在已知动作与该当前动作相同,避免状态图中存在冗余动作;

奖励模型模块:基于状态图中的状态和动作,评估每一步执行的动作对状态执行的贡献,设计奖励模型,通过奖励模型为动作计算奖励;每当当前动作执行完毕,状态从前一个状态转移至当前状态,根据所述奖励模型为当前动作计算奖励;

强化学习智能体模块:根据状态、动作和奖励,利用强化学习算法训练动作选择策略,并根据动作选择策略选择动作,输出所选择的动作;在Web应用上执行输出的动作,使得Web应用跳转到另一网页,继续执行状态提取模块、动作提取模块、状态图构建模块、奖励模型模块,在Web应用上执行的动作的序列保存为测试用例。

第三方面,本发明的提供一种电子装置(计算机、服务器、智能手机等),包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行本发明一种基于强化学习的Web应用测试用例自动生成方法中各步骤的指令。

第四方面,本发明提供一种计算机可读存储介质(如ROM/RAM、磁盘、光盘),所述计算机可读存储介质存储计算机程序,所述计算机程序被计算机执行时,实现本发明一种基于强化学习的Web应用测试用例自动生生方法的各个步骤。

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

(1)采用本发明可以自动化地为目标Web应用提供测试用例,大大提高了已有测试用例的覆盖率,尽早发现潜在缺陷。在测试用例生成过程中,通过收集页面信息,提取状态和动作构建状态空间,并采用强化学习算法执行状态空间,提高了Web应用测试的自动化程度,进一步提高了Web应用的可用性。

(2)现有基于随机的方法随机探索状态空间,难以生成有效的动作序列。在基于模型的方法中,模型能够提供生成有效动作序列的信息。但是现有基于模型的方法难以为目标应用建立完整的模型。因此,这些方法所只能生成有限的动作序列。为了生成能够覆盖多种状态的测试用例,本发明主要包括两个阶段:状态和动作。每当一个动作执行后,从网页提取状态和动作。为了有效识别状态,本发明以相似元素表征相同的功能这一技术特征,合并相似功能元素,具有相似功能的网页被识别为同一状态,再通过强化学习智能体来选择合适的动作,并在目标应用上执行。根据执行结果,更新所选择的动作的奖励。为了提高状态执行效率,还设计了创新的奖励模型引导像人类测试人员一样与Web应用交互,采用强化学习训练动作选择策略,从而不再人力进行测试用例生成,且大大提高了已有测试用例的覆盖率,尽早发现潜在缺陷。在测试用例生成过程中,提高了Web应用测试的自动化程度,进一步提高了Web应用的可用性。

附图说明

图1为本发明方法的实现流程图

图2为本发明工具的组成框图;

图3为本发明中从网页中提取状态的流程图;

图4为本发明中提取的状态中识别可访问元素的流程图。

具体实施方式

下面结合附图对本发明进行详细说明。

如图1和2所示,本发明方法的实现具体如下:

步骤1:如图3所示,从网页中提取状态:获取网页的节点树,本发明实施例采用DOM树,并用DOM树初始化状态;然后遍历状态删除对页面可视化没有影响的冗余DOM树的元素及其相关边,化简状态的元素数量;将化简之后的DOM树称为渲染树,对渲染树上的元素进行宽度优先遍历,如果两个元素相似,则认为两个元素具有相似的功能,对于一个元素e,如果存在另一元素e′与该一个元素e相似,则认为该一个元素e和另一元素e′为具有相似功能的元素,合并具有相似功能的元素,同时具有似功能的元素被识别为同一状态,从而从网页中提取状态s;

上述具体实现为:

(11)获取网页的DOM树(即节点树),并用DOM树初始化状态,即分别用DOM树的结点集和边集初始化状态s的结点集和边集;

(12)遍历状态删除冗余元素,如果一个元素有且仅有一个儿子元素,则从状态的结点集中删除该元素e,从状态的边集中删除与该元素相关联的边,并向状态s的边集中添加从该元素的父元素到该元素的儿子元素的边;

(13)在渲染树上进行宽度优先遍历,对于一个元素e,如果存在另一个元素e′与该一个元素e相似,则认为该一个元素e和另一元素e′为相同的服务功能,并用该一个元素e来表征该服务功能;然后进一步遍历两个元素e和e′的子元素,在另一个元素e′的子元素中寻找与该一个元素e的子元素的相似元素;反之,如果该一个元素不存在相似元素,则停止寻找该一个元素e的子元素的相似元素。

所述步骤(13)中,另一个元素e′与该一个元素e相似的判断包括:另一个元素e′与该一个元素e具有相似结构,或另一元素e′与该一个元素e具有相似样式,其中:

(131)另一个元素e′与该一个元素e具有相似结构:是利用元素的路径语言的模糊性识别元素之间是否具有相似结构,即通过忽略它路径语言上祖辈元素的索引来查找相似元素;

(132)另一个元素e′与该元素e具有相似样式:将另一个元素e′与该元素e的样式相似度定义为它们类名className、位置position、尺寸size、超链接href、外部文件引用src和标识id的编辑距离的加权平均值;如果另一个元素e′与该一个元素e的样式相似度大于等于预先设定的阈值,则认为另一个元素e′与该一个元素具有相似样式。

步骤2:如图4所示,在提取的状态中识别可访问元素,生成可访问元素的动作:通过DOM树的元素识别动作,遍历原始DOM树上的元素,如果一个元素e符合预先定义的条件,则认为在动作act中存在可访问元素e,并生成可访问元素的动作act;

上述预先定义的条件为如下三个之一:

(21)如果一个元素e的标签名tagName匹配的默认设置,则认为该一个元素e被操作,并生成一个访问该一个元素e的动作;

(22)如果一个元素e的标签名是输入控件或多行纯文本编辑控件