基于用户接口状态流图的Web应用测试用例生成方法与流程

文档序号:15271498发布日期:2018-08-28 22:29阅读:267来源:国知局

本发明属于软件工程中软件分析与测试领域,具体涉及一种基于用户接口状态流图的web应用测试用例生成方法。



背景技术:

随着网络技术的普及和实际应用需求的不断增加,web应用的开发和使用日益广泛。随之而来的web应用质量问题对人们的生产和生活产生重要影响,尤其在电子商务、信息管理等应用领域,web应用的质量问题有时会给人们带来不可估量的损失。web应用测试是一种重要的软件质量保证手段,其中如何有效地生成web应用的测试用例是web应用测试研究的关键技术。根据测试用例生成方式的不同,web应用测试可分为捕捉-回放法、模型法、基于用户会话的方法、基于动态搜索的方法等。

捕捉-回放法是目前工业界普遍采用的web应用自动化测试方法,该方法首先人工记录用户的操作过程并生成测试脚本,然后回放脚本、模拟用户操作,自动运行web应用,相应工具包括loadrunner、qtp以及ibmrationalrobot等。该方法因需人工录制脚本,测试成本高,覆盖路径少,测试不充分,且本质上,该方法仅重复运行人工生成的web应用测试用例,不能生成新的测试用例。当web应用软件发生变化时,原有的测试脚本一般无法运行,需重新录制脚本。

模型法一般通过分析源代码或者需求说明构造web应用模型,根据模型再生成测试用例。模型法测试覆盖率较高,但一般需手工建立模型,代价很高,且因在建立模型时难以考虑web应用的动态性和不确定性等特点,模型不够精确。当web应用发生变化时,新模型需经人工重新分析和建立,模型的维护和更新困难、成本高。

基于用户日志的方法从用户日志中提取测试用例有关信息,生成web应用测试用例。该方法所生成的测试用例代表了实际用户的使用情行,可覆盖用户的常用功能,但不能保证覆盖全部功能,测试不够充分。此外,因用户日志中主要包含用户与服务器之间的同步请求信息,缺乏完整的用户接口状态信息(如ajax技术的普遍应用使得服务器端难以获得完整的用户交互信息),难以有效地生成web应用测试用例。

基于动态搜索的方法一般通过动态分析和模拟潜在的用户接口行为,自动搜索web应用状态空间,生成用户接口状态流图(sfg,其节点表示用户接口状态,边表示用户接口gui上可触发的事件)作为web应用的测试模型,然后遍历sfg图生成web应用测试用例。基于搜索的web应用测试不需人工干预,可自动生成web应用测试用例,覆盖web应用的大部分路径,测试充分。

目前,一般采用深度优先搜索(dfs)方法遍历sfg图,生成测试用例。但在dfs搜索sfg图的过程中,往往易陷入对相同子路径的重复搜索,所生成的web应用测试用例集一般较大,由此造成web应用测试成本较高,测试效率较低。



技术实现要素:

发明目的:本发明的目的在于解决现有技术中存在的不足,提供一种基于用户接口状态流图的web应用测试用例生成方法,本发明可在保证对web应用状态流图边覆盖的前提下,减小测试用例集规模,降低web应用测试成本,提高测试效率。

技术方案:本发明所述的一种基于用户接口状态流图的web应用测试用例生成方法,依次包括以下步骤:

(1)生成sfg图:

通过动态分析和模拟潜在的用户接口行为,采用动态搜索技术搜索web应用状态空间,生成用户接口状态流图sfg,sfg图中的节点表示用户接口状态,sfg图中的边表示用户接口gui上可触发的事件;

(2)获取终态集:

找出上述sfg图中无出边的状态作为sfg的终态集;

(3)逆向遍历sfg图,生成sfg完整路径集:

从每个终态开始,逆向深度优先遍历sfg,直至初态节点,在遍历过程中,对于各类相应节点(包括:初态节点(一条路径的首节点)、已访问节点以及其他节点)进行如下处理:

(3.1)若当前访问节点是初态节点,则当前路径为一个完整sfg路径,保存该路径;

(3.2)若当前节点标记为已访问,则采用dijkstra算法找出从初态节点到该节点的最短路径,并用最短路径与已遍历路径进行拼接,生成一个完整的sfg路径,保存该路径;

(3.3)若当前节点既不是初态节点,也未标记已访问,则标记该节点已访问,获取该节点的入边集,并对其中的每个边进行逆向深度遍历;

(4)生成web应用测试用例集

对sfg完整路径集中的每个完整路径,获取该路径上的事件序列(sfg的数据结构中保存了边的信息,每个边就是一个事件,根据上述步骤得到sfg路径,就是边的集合,可以自然地转换成边的序列,也就是事件序列),并将其保存为selenium脚本格式,生成web应用测试用例集。

上述用户接口状态流图的web应用测试用例生成工具,包括嵌入浏览器模块、dom分析模块、动态搜索模块和测试用例生成模块,所述嵌入浏览器模块、dom分析模块、动态搜索模块生成用户接口状态流图sfg,所述测试用例生成模块通过逆向深度优先遍历sfg图生成web应用测试用例集。给定一个待测网站的入口地址,嵌入浏览器模块与服务器进行交互,发送http请求并接受其响应,同时提供一个访问javascript引擎和动态dom对象的接口,将动态dom对象发送给dom分析模块;dom分析模块一方面获取新dom对象,增量式构造用户接口状态流图(sfg)作为web应用测试模型,另一方面分析抽取当前dom对象中与可点击事件相关的dom元素,如超链接、按钮、表单以及包含事件标签等可能产生新状态的dom元素,生成相应的可点击事件;动态搜索控制模块模拟用户点击事件,在嵌入浏览器上发送http请求,同时该模块采用深度优先策略动态搜索web应用的用户接口状态空间;当完整的用户接口状态流图生成后,测试用例生成模块采用逆向深度优先搜索方法自动生成web应用测试用例。

有益效果:本发明采用动态搜索技术生成用户接口状态流图(sfg)作为web应用测试模型,通过逆向深度优先遍历sfg图生成web应用测试用例,在遍历sfg图时标记已访问节点,并在后续测试用例生成过程中,对已访问节点采用初始节点至已标记节点的最短路径替换深度遍历生成的路径,从而在保证对sfg图边覆盖的前提下,减小测试用例集的规模,降低web应用的测试成本。

总体来说,本发明在保证用户接口状态流图边覆盖的前提下,通过逆向深度优先遍历sfg生成web应用测试用例,减小测试用例集规模,降低web应用测试成本。

附图说明

图1为本发明的应用测试流程图;

图2为实施例中web应用测试用例生成方法示意图。

具体实施方式

下面对本发明技术方案进行详细说明,但是本发明的保护范围不局限于所述实施例。

本发明所述的一种基于用户接口状态流图的web应用测试用例生成方法,依次包括以下步骤:

(1)生成sfg图:

通过动态分析和模拟潜在的用户接口行为,采用动态搜索技术搜索web应用状态空间,生成用户接口状态流图sfg,sfg图中的节点表示用户接口状态,sfg图中的边表示用户接口gui上可触发的事件;

(2)获取终态集:

找出上述sfg图中无出边的状态作为sfg的终态集;

(3)逆向遍历sfg图,生成sfg完整路径集:

从每个终态开始,逆向深度优先遍历sfg,直至初态节点,在遍历过程中,对于各类节点进行如下处理:

(3.1)若当前访问节点是初态节点,则当前路径为一个完整sfg路径,保存该路径;

(3.2)若当前节点标记为已访问,则采用dijkstra算法找出从初态节点到该节点的最短路径,并用最短路径与已遍历路径进行拼接(即是指将两个路径的相应序列相加),生成一个完整的sfg路径,保存该路径;

(3.3)若当前节点既不是初态节点,也未标记已访问,则标记该节点已访问,获取该节点的入边集,并对其中的每个边进行逆向深度遍历(从初始节点进行遍历,逆向深度遍历就是从终态节点反向进行遍历到初始节点);

(4)生成web应用测试用例集

对sfg完整路径集中的每个完整路径,获取该路径上的事件序列,并将其保存为selenium脚本格式,生成web应用测试用例集,

如图1所示,上述基于用户接口状态流图的web应用测试用例生成工具,包括嵌入浏览器模块、dom分析模块、动态搜索模块和测试用例生成模块,所述嵌入浏览器模块、dom分析模块、动态搜索模块生成用户接口状态流图sfg,所述测试用例生成模块通过逆向深度优先遍历sfg图生成web应用测试用例集;给定一个待测网站的入口地址,嵌入浏览器模块与服务器进行交互,发送http请求并接受其响应,同时提供一个访问javascript引擎和动态dom对象的接口,将动态dom对象发送给dom分析模块;dom分析模块一方面获取新dom对象,增量式构造用户接口状态流图(sfg)作为web应用测试模型,另一方面分析抽取当前dom对象中与可点击事件相关的dom元素,如超链接、按钮、表单以及包含事件标签等可能产生新状态的dom元素,生成相应的可点击事件;动态搜索控制模块模拟用户点击事件,在嵌入浏览器上发送http请求,同时该模块采用深度优先策略动态搜索web应用的用户接口状态空间;当完整的用户接口状态流图生成后,测试用例生成模块采用逆向深度优先搜索方法自动生成web应用测试用例。

实施例:

本实施例采用深度优先的动态搜索技术生成用户接口状态流图(sfg)作为web应用测试模型,通过逆向遍历sfg图生成测试用例,sfg图中的一个完整路径对应web应用的一个测试用例,具体实施步骤如下:

1.生成sfg图

1)初始时载入web应用的入口地址,生成sfg的初始状态index;

2)分析index对象中与可点击事件相关的dom元素,抽取可点击事件集合{e1,e5},选择其中某一未点击事件e1,模拟其触发,生成新状态s1,更新sfg图;

3)采用深度优先策略动态搜索新状态,更新sfg图,直至当前状态已无可点击事件,则进行回溯。如从s1出发选择e2模拟触发,生成新状态s2,如此反复,生成新状态s3和s6,直至到达终态s7。此时,回溯至s6,选择e9模拟触发,生成s8;继续回溯至index,沿s4、s5、s6动态搜索,此时所有可点击事件都触发完毕,由此生成完整的sfg图。

4)为避免陷入回路,采用栈结构记录当前搜索路径上的所有状态,在动态搜索过程中,当前生成的状态与栈中已生成状态进行对比,如当前生成的状态已在栈中,表明存在回路,结束当前状态的后续搜索,开始回溯。

2.获取终态集

找出sfg图中无出边的状态作为sfg的终态集,本实施例中终态集为{s7,s8}。

3.逆向遍历sfg图,生成sfg完整路径集

从每个终态开始,逆向深度优先遍历sfg,直至初态节点,在遍历过程中,对于各类节点进行如下处理:

a)若当前访问节点是初态节点,则当前路径为一个完整sfg路径,保存该路径;

b)若当前节点标记为已访问,则采用dijkstra算法找出从初态节点到该节点的最短路径,并用最短路径与已遍历路径进行拼接,生成一个完整的sfg路径,保存该路径;

c)若当前节点既不是初态节点,也未标记已访问,则标记该节点已访问,获取该节点的入边集,并对其中的每个边进行逆向深度遍历。

如图2所示,初始选择终态s7开始在图2中逆向搜索,并置当前搜索路径path为空,标记s7为已访问,获取其入边集合{e8},将其添加到path中,此时path从空集变为{e8},然后获取e8的起始状态s6,标记s6为已访问,获取其入边集合{e4,e7},初始选择并标记e4的起始状态s3,则path变为{e4,e8},如此反复逆向遍历经e2和e1至初始状态index,则path记录了第一个从初态至终态的完整路径{e1,e2,e3,e4,e8},将该完整路径保存下来。

类似地,若选择并标记e7的起始状态s5,则当前path为{e7,e8},如此反复逆向遍历经e6和e5至初始状态index,则path记录了第二个完整路径{e5,e6,e7,e8},将该路径保存下来。其次,选择终态s8,将s8的入边e9加入path中,path为{e9},然后检查其起始状态s6,由于s6为已访问节点,因此不再向前遍历,而是直接使用从初始状态到s6的最短路径{e5,e6,e7}将当前的子路径补充完整,生成第三个完整路径{e5,e6,e7,e9}。此时所有的终态都已进行遍历,搜索过程结束。上述3个完整路径覆盖了图2中所有的边,3个测试路径事件总数为13。

若采用传统的深度优先搜索策略搜索图2中,则生成4个完整路径,分别是{e1,e2,e3,e4,e8},{e5,e6,e7,e8},{e1,e2,e3,e4,e9},{e5,e6,e7,e9},且这些路径之间存在较多的重复子路径,4个测试路径事件总数为18。

由此实例可见,本发明可在保证对用户接口状态流图边覆盖基础上,减少了测试用例数量和测试事件总数,从而降低测试代价,提高测试效率。

4.生成web应用测试用例集

对上述测试路径集中的每个完整路径,获取该路径上的事件序列,并将其保存为selenium脚本格式,生成web应用测试用例集。

表1给出了采用本发明和现有的深度优先搜索方法(dfs)在6个web应用上生成测试用例集的实验结果。表中的测试用例数表示测试用例总数,事件总数表示所有测试用例所包含的事件数量总和。与现有的dfs相比,采用本发明生成的测试用例数目减少了12.2%,测试事件总数减少了14.4%。实验结果表明,本发明可有效地减少测试用例集的规模,降低web应用的测试成本,提高web应用测试效率。

表1本发明方法与dfs方法的测试用例集

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