基于GUI元素相似度计算的Web应用测试修复方法
文献发布时间:2023-06-19 11:35:49
技术领域
本发明属于软件工程中软件分析与测试领域,尤其是Web应用测试领域,具体涉及一种基于GUI元素相似度计算的Web应用测试修复方法。
背景技术
随着网络技术的普及和Web应用开发新技术的发展,Web应用因具有无需安装维护和升级仍可使用最新版本软件以及数据持久、安全且易于共享访问等诸多优势,其开发和使用日益广泛,从最初简单的信息发布和信息共享,到电子商务、信息管理、搜索引擎、服务计算、多媒体等,Web应用已逐步渗透到人们的生产、生活的各个领域之中,发挥着越来越重要的作用。随着Web应用的快速发展,Web应用的质量问题也随之产生,对人们的生产和生活产生重要影响。作为一种重要的软件质量保证手段,Web应用测试已成为一个重要的研究方向。
如所知,通过测试可发现Web应用中的错误,发现错误后需进行修改,修改后为验证修改的正确性,还需进行回归测试。事实上,Web应用版本的演化过程可视为一个不断发现错误、修改并进行回归测试的过程。在Web应用回归测试过程中,大部分测试脚本可从原有测试脚本集中选择,但由于Web应用的变化,特别是某些页面的结构和内容的变化,使得部分测试脚本不能直接运行,需要经过一定程度的修复才能使用,而目前脚本修复工作一般由人工分析完成,其成本高、自动化程度低。因此,迫切需要Web应用测试修复方法、技术和工具的支持,以提高Web应用软件的质量和生产率。
经验性研究表明,Web应用测试脚本失效的主要原因,包括基于图形化用户接口(即Graphical User Interface,简称GUI)元素定位失败、值异常、页面重载、用户会话异常、动态脚本弹框异常等,其中最主要的原因是元素定位失败,占总失效脚本数的74%。目前,Web应用测试脚本修复研究主要集中在因GUI元素定位失败引起的脚本失效修复方面,其Web应用修复方法大多采用差异性测试策略,即基于应用新旧版本版本页面中GUI元素信息的比较,如比较GUI元素本身的属性信息,或者比较GUI元素在DOM树上的编辑距离,或者比较GUI元素的视觉图像,来定位目标GUI元素。Choudhary等提出一种基于GUI元素属性对比的Web应用失效修复方法以及相应的工具—WATER,该方法通过分析测试脚本在新旧版本执行过程中GUI元素属性的差异,可半自动化地提供修复脚本的建议。Stocco等提出一种基于GUI元素图像对比的Web应用修复方法以及工具—VISTA,该方法一定程度上提高了修复率,但如果遇到元素样式改变较大或者页面布局有很大的修改,该方法几乎失效。
由于上述方法在修复过程中仅从GUI元素的属性或图像对比来定位目标GUI元素,未考虑GUI元素本身的语义信息,一旦GUI元素的属性或图像发生微小的变化,便无法进行有效的修复。为此,需融合GUI元素的语义信息,提高GUI元素定位分析的准确性,进而提高Web应用测试脚本的修复率。
发明内容
针对上述修复方法的不足,本发明提出了一种基于GUI元素相似度计算的Web应用测试修复方法。与现有方法相比,本发明方法在测试脚本修复过程中,通过融合GUI元素语义信息,计算GUI元素的结构和语义综合相似度,提高GUI元素定位分析的准确性,改善Web应用测试脚本修复效果,提高修复率。
本发明的技术方案为:
一种基于GUI元素相似度计算的Web应用测试修复方法,包含以下三个步骤:
步骤(1)给定某Web应用测试脚本,在原Web应用版本上运行该测试脚本,依次分析、提取每个测试脚本语句操作的GUI元素的结构和语义信息;
步骤(2)定位目标GUI元素,在Web应用新版本上运行原测试脚本,对其操作的每一个GUI元素是否正确定位进行检查,若定位失败,则利用步骤(1)中记录的信息,计算原GUI元素与在Web应用新版本页面中GUI元素的结构和语义综合相似度,并据此查找相似GUI元素作为候选目标GUI元素;
步骤(3)用候选目标GUI元素替换定位失败的GUI元素,修复测试脚本,然后运行,验证修复的有效性。
进一步地,所述步骤(1)具体包括以下步骤:
给定某Web应用测试脚本,在原Web应用版本上执行该测试脚本,分析和提取每一个脚本语句操作的GUI元素的主要属性及其文本信息,主要属性具体包括tag、id、class、name、value、type、title、text以及XPath路径。
进一步地,所述步骤(2)具体包括以下步骤:
3.1在新版本Web应用上执行原测试脚本,依次检查每个脚本语句操作的GUI元素是否定位成功;
3.2对GUI元素定位失败的脚本语句,计算该脚本语句中原GUI元素e与当前Web页面中各GUI元素e′的综合相似度sim(e,e′),选择综合相似度值大于给定阈值的GUI元素作为候选目标GUI元素;
综合相似度sim(e,e′)是结构相似度sim
sim(e,e′)=sim
其中,ω表示权重,sim
结构相似度sim
sim
其中,r表示e与e′相同属性个数占总属性数量的比值,d表示e与e′之间的XPath编辑距离,sim
语义相似度sim
其中,WS(e)和WS(e′)分别表示描述e和e′的文本经过分词以及去除停用词后生成的词集,sim(w,w′)表示词向量w和w′之间的余弦相似度值,N表示WS(e)中词的个数,sim
3.3选择综合相似度值大于给定阈值的GUI元素作为候选目标GUI元素,并按综合相似度值大小进行排序。
进一步地,所述步骤(3)具体包括以下步骤:
4.1依次选择综合相似度值大的候选目标GUI元素替换脚本语句中失效的GUI元素,修复失效脚本;
4.2运行修复的脚本语句,若成功运行,则进入下一个脚本语句;否则,选择下一个候选目标GUI元素进行修复及验证。
本发明的有益效果为:通过融合GUI元素的语义信息,计算GUI元素的结构和语义综合相似度,提高GUI元素定位分析的准确性,从而改善Web应用测试脚本修复的效果,提高修复率。
附图说明
图1为本发明方法的实施流程图。
图2为某开源的信息管理系统Address Book的测试用例脚本,用于说明本发明方法,其中图2(a)是测试3.0版本“新建分组”业务流程的测试脚本,图2(b)是测试4.0版本“新建分组”业务流程的测试脚本。
具体实施方式
本发明提供一种基于GUI元素相似度计算的Web应用测试修复方法,本发明通过融合GUI元素的语义信息,计算GUI元素的结构和语义综合相似度,提高GUI元素定位分析的准确性,对因GUI元素定位失败的脚本语句,选择综合相似度高的GUI元素作为目标候选GUI元素,修复失效脚本,以保证修复的有效性,提高修复率。
本发明主要包括嵌入浏览器模块、信息抽取模块、GUI元素定位模块以及脚本修复验证模块等。嵌入浏览器模块用于模拟用户与浏览器进行交互,信息抽取模块用于抽取GUI元素信息,GUI元素定位模块用于定位目标GUI元素,脚本修复验证模块用于修复脚本并验证其有效性。信息抽取模块通过在原版本V上执行测试用例脚本,利用面向切面编程技术拦截抽取相关结构和语义信息,输出记录了GUI元素信息的XML文件。元素定位模块通过计算GUI元素的结构和语义综合相似度在新版本V′页面中查找相似GUI元素,若找到相似GUI元素,则输出目标GUI元素用于修复失效脚本。脚本修复验证模块用目标GUI元素替换原GUI元素,修复失效脚本,并在新版本V′上单步执行测试脚本,验证测试修复脚本的有效性。
Addressbook是一个典型的Web应用,主要功能为地址簿信息管理,可分组管理个人信息,包括姓名、生日、地址、联系方式及邮箱等。下面以测试“新建分组”业务流程为例,说明本发明方法。图2为Addressbook从版本3.0演化为4.0时“新建分组”业务流程的测试脚本。在版本3.0中,首先点击"manage groups"超链接进入到群组管理界面,再点击新建群组按钮,并在界面输入框中填入新群组的信息,最后点击提交信息按钮完成群组创建。在版本4.0中,初始界面发生了较大变化,群组管理功能从界面左侧转移到了界面上部,同时链接文字也由"manage groups"变成"groups"。采用原测试脚本运行失败。采用本发明方法的具体实施步骤如下:
1.抽取原GUI元素信息
将原测试脚本在版本3.0上运行,记录每个脚本语句操作的GUI元素信息,包括元素的属性及其文本信息,属性包括tag、id、class、name、value、type、title、text以及XPath路径。
2.查找候选目标GUI元素,修复失效测试脚本
(1)将原测试脚本在版本4.0上运行,运行脚本语句①时,由于页面布局发生变化,无法在当前页面上定位到"manage groups"的链接,测试运行中止。
(2)利用在版本3.0上面运行时仅收集到"manage groups"链接属性及其文本,XPath="html[1]/body[1]/table[1]/tbody[1]/tr[2]/td[2]/table[1]/tbody[1]/tr[12]/td[1]/a[1]",文本为"manage groups"。根据链接属性,在当前页面中查找相似GUI元素,在当前页面中未找到相似GUI元素。
(3)计算原GUI元素与当前页面中各GUI元素的结构和语义综合相似度,选取大于给定相似度阈值的GUI元素作为候选目标GUI元素。
设原GUI元素为e,当前页面中文本为"group"的GUI元素为e′,下面以e和e′为例说明如何进行综合相似度的计算。具体过程如下:
a)计算结构相似度
版本4.0中e′的XPath是"/html[1]/body[1]/div[1]/div[3]/ul[1]/li[3]/a[1]",将e和e′的XPath结构按照元素的tag进行拆分成两个字符串数组("html[1]","body[1]","table[1]","tbody[1]","tr[2]","td[2]","table[1]","tbody[1]","tr[12]","td[1]","a[1]")和("html[1]","body[1]","div[1]","div[3]","ul[1]","li[3]","a[1]"),两个数组长度分别为11和7,编辑距离为8,则d=1-8/11=0.27。两个元素都是超链接文本,不存在其他的标签属性,因此相同属性个数为0,r=0/1=0。按照公式(2)计算sim
b)计算语义相似度
将e和e′的属性值文本分词之后分别放入集合WS
c)计算综合相似度
设公式(1)中ω为0.4,根据公式(1)计算sim(e,e′)=0.4*0+1*(1-0.4)=0.6,则e和e′的综合相似度为0.6。设相似度阈值为0.5,e和e′的综合相似度值大于等于0.5,则e′可作为候选目标GUI元素。采用同样方法计算e和当前页面中所有其他GUI元素的综合相似度值,发现只有e′的综合相似度值大于0.5。
3.修复失效脚本,并验证
(1)用e′替换失效的e,修复第1个脚本语句,并重新运行,运行成功。
(2)继续执行原测试用例中的②-⑤步,运行成功。
实验结果表明,与其他Web应用测试修复方法WATER和VISTA相比,本发明方法,可明显改善Web应用测试修复的有效性,提高修复率。
上述实施例仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和等同替换,这些对本发明权利要求进行改进和等同替换后的技术方案,均落入本发明的保护范围。
- 基于GUI元素相似度计算的Web应用测试修复方法
- 基于XML封装关键字的GUI自动测试方法及自动测试平台