CN102567201B - 跨模型的图形用户界面测试脚本自动修复方法 - Google Patents

跨模型的图形用户界面测试脚本自动修复方法 Download PDF

Info

Publication number
CN102567201B
CN102567201B CN201110419535.9A CN201110419535A CN102567201B CN 102567201 B CN102567201 B CN 102567201B CN 201110419535 A CN201110419535 A CN 201110419535A CN 102567201 B CN102567201 B CN 102567201B
Authority
CN
China
Prior art keywords
event
gui
accessibility
model
self
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN201110419535.9A
Other languages
English (en)
Other versions
CN102567201A (zh
Inventor
陈振宇
高则宝
邹云潇
骆斌
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing University
Original Assignee
Nanjing University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nanjing University filed Critical Nanjing University
Priority to CN201110419535.9A priority Critical patent/CN102567201B/zh
Publication of CN102567201A publication Critical patent/CN102567201A/zh
Application granted granted Critical
Publication of CN102567201B publication Critical patent/CN102567201B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

跨模型的图形用户界面测试脚本自动修复方法,对在旧版本图形用户界面GUI程序上录制的GUI测试脚本,针对新版本的GUI程序进行自动修复,本发明提出使用两个事件可达性模型互补的方法,以更加完整和准确的描述应用程序的GUI结构和事件可达性模型,使用两个事件可达性模型检验GUI测试脚本语句的合法性,并对在新版本GUI程序中不正确的GUI测试脚本给出自动修复方案;本发明使用两个模型协作来完成脚本的合法性验证和修复,自建事件可达性模型在修复过程中不断完善,不再需要测试工程师过多确认,两个模型的共同分析验证保证了完整描绘GUI应用程序中包含的全部事件流程,实现GUI测试脚本合法性验证和修复的自动化。

Description

跨模型的图形用户界面测试脚本自动修复方法
技术领域
    本发明属于软件测试技术领域,尤其是软件测试中针对图形用户界面GUI程序的回归测试技术领域,修复对象是自动化GUI测试脚本,具体来说是测试工程师使用自动化GUI测试工具录制的测试脚本,为一种跨模型的图形用户界面测试脚本自动修复方法。
背景技术
软件工程中,软件测试是必不可少的重要的一环。为了保证软件质量,软件测试工程师需要花费大量人力物力进行软件测试。这些测试活动包括系统级别的测试,即图形用户界面GUI测试。现有的自动化测试工具提供了录制/重放的功能,测试工程师可以手工录制测试脚本,并在回归测试过程中重新执行测试脚本。
然而随着软件演化和版本变更,应用程序的GUI往往会发生或大或小的变更。由于自动化测试工具录制的GUI测试脚本的执行依赖于GUI具体的层次结构,因而应用程序GUI上细微的变更往往可能导致回归测试中大量在旧版本GUI程序上录制的GUI测试脚本在新版本的GUI程序上无法顺利执行。手工修复这些旧版本GUI测试脚本或者抛弃旧版本测试脚本重新为新版本GUI程序录制一套GUI测试用例集是一项繁杂的工作,需要耗费大量的人力和时间。
目前业界使用的自动化GUI测试工具很多,有HP公司的QTP(Quick Test Professional)、HP公司的Win Runner,IBM公司的Rational Robot等。以HP公司的QTP为例,它是目前业界应用广泛的GUI测试工具,它使用录制/重放的机制辅助测试工程师实现GUI测试脚本的手工录制和自动回放。
事件可达性模型是基于应用程序的GUI结构而得到的有向图模型。有向图中的节点为应用程序的GUI中的控件元素上触发的点击事件,而有向图中的一条有向边表示从上一个GUI元素上的点击事件到下一个GUI元素的点击事件可达。GUI应用程序的事件可达性模型数据通常用XML文件的形式来持久化。目前存在一些工具如GUITAR等可以用来自动抓取应用程序的GUI结构并分析控件点击事件之间的可达性,从而得到GUI应用程序的事件可达性模型。
目前已有一些工具,比如GUITAR使用自动化的过程来抓取并解析应用程序的GUI结构和事件流程,从而得到GUI程序的事件可达性模型。然而,由于实际GUI应用中GUI结构具有较大的复杂性,并且许多GUI控件需要通过执行特定操作产生特定情景之后才可用,因而给自动抓取带来了很大困难,进而导致自动抓取解析得到的事件可达性模型在很大程度上不能完整描绘GUI应用程序中包含的全部事件流程,甚至很可能会有大量控件未被识别。
因此目前阶段,完全基于自动化获取的事件可达性模型的修复方法在实际的GUI测试脚本修复中往往很难解决具体的问题,可用性有限。
发明内容
本发明要解决的问题是:现有的自动化事件可达性模型不能完整描绘GUI应用程序中包含的全部事件流程,甚至很可能会有大量控件未被识别;在脚本修复过程中需要处理事件不可识别,即在新版本的事件可达性模型中找不到相应的GUI控件和事件,或者事件流可达性失效,也即上一个事件触发之后,不可以直接触发当前事件的问题。
本发明的技术方案为:跨模型的图形用户界面测试脚本自动修复方法,对在旧版本图形用户界面GUI程序上录制的GUI测试脚本,针对新版本的GUI程序进行自动修复, 
    1) 使用工具自动获得新版本GUI程序的自动化事件可达性模型,通过GUI测试脚本语句中描述的GUI控件的层次信息,在自动化事件可达性模型中描述的GUI层次结构中找到对应的GUI控件元素,事件可达性模型中GUI控件和其点击事件一一对应, GUI测试脚本的GUI控件对应映射到自动化事件可达性模型中的点击事件,完成事件流映射;
2)建立一个自建事件可达性模型,自建事件可达性模型为有向图结构,图中的节点为GUI事件,包含事件相关的GUI控件信息以及事件类型信息,GUI控件信息包括GUI控件的名称、类型、以及父级GUI元素的层级关系, 图中的有向边A->B表示从事件A到事件B可达,也即应用程序在触发事件A之后可以直接触发事件B,自建事件可达性模型初始为空; 
3)使用自动化事件可达性模型和自建事件可达性模型分析GUI测试脚本的事件流,当检查到某行GUI测试脚本语句相应的事件在自动化事件可达性模型以及自建事件可达性模型中找不到对应节点的时候,出现了事件不可识别的问题:
3.1) 如果测试工程师指出没有找到的节点是因为相应GUI控件在新版本GUI程序中已经被删除,则使用跳过此节点直到找到下一个合法节点的方法修复GUI测试脚本;
3.2) 如果测试工程师指出没有找到节点是因为GUI名称变更,则由测试工程师指定由旧版本GUI程序到新版本GUI程序的映射方式,然后根据映射后新的节点在两个事件可达性模型中检测节点是否存在,并且保存下测试工程师提供的映射关系:
3.2.1) 如果映射后节点在两个事件可达性模型中找到,则认为修复完成;其中,如果测试工程师只指明了节点名称变更,而没有指出从GUI测试用例中的上个事件到当前事件可达性失效的问题,则认为从上个事件到映射后的当前事件不存在可达性失效的问题;如果测试工程师明确指明了从GUI测试用例中的上个事件到映射后的事件不再可达,并且指明了上个事件到当前事件之间需要添加的事件流,则修复过程中在上个事件和当前事件之间添加测试工程师指定的事件流,并且将添加的事件流相关的节点和边添加到自建事件可达性模型中;
3.2.2) 如果映射后节点在两个事件可达性模型中找不到,则认为此处问题是自动化事件可达性模型的不完整,需要完善自建事件可达性模型,将涉及的GUI测试脚本语句所对应的事件添加到自建事件可达性模型中,并且在自建事件可达性模型中添加从上一个事件到当前事件的一条边,至此认为修复完成;
4)如果检测到某行GUI测试脚本语句相应的事件在两个事件可达性模型中存在对应节点,则进一步检验从上一个事件到当前事件的可达性: 
4.1)如果通过两个事件可达性模型检测到从GUI测试用例中的上个事件节点到当前事件节点可达,则此处合法性检验通过,无需修复;
4.2)如果通过两个事件可达性模型检测到从GUI测试用例中的上个事件节点到当前事件节点不可达,则使用图搜索算法在事件可达性模型中搜寻出一条从上个事件到当前事件的合法路径,完成脚本修复;
4.3)如果出现跨模型问题,即GUI测试用例中的上一个事件和当前事件分别处于自动化事件可达性模型和自建事件可达性模型中,除非测试工程师特别指定需要添加的事件流,否则默认跨模型的两个事件是可达的,如果测试工程师指定了需要添加的事件流,则将指定的事件流添加到最终的修复结果以及自建事件可达性模型中;
5)生成测试用例集修复结果报告:对于可修复的失效的GUI测试脚本给出自动化修复之后的可在新版本GUI程序上执行的GUI测试脚本;对于不可修复的失效的GUI测试脚本给出问题报告;对于整个GUI测试脚本的修复给出全局的修复信息报告;得到的自建事件可达性模型和自动化事件可达性模型一起用于后续其它旧版本GUI程序的GUI测试脚本的自动修复,实现GUI测试脚本合法性验证和修复的自动化。
自建事件可达性模型根据自身有向图结构,完成与GUI测试脚本的事件流映射,根据自动化事件可达性模型与自建事件可达性模型与GUI测试脚本的事件流映射,在步骤3)-4)GUI测试脚本的事件流分析完成后,将修复之后的事件流转换为GUI测试脚本,得到可在新版本GUI程序上执行的GUI测试脚本。
本发明使用的自动事件可达性模型和自建事件可达性模型都是针对新版本GUI程序进行建模的,自动化事件可达性模型通过工具获得,并且在本发明的修复方法过程中是一直稳定不变的。自建事件可达性模型在修复GUI测试脚本开始之前是没有内容的,初始为空,在GUI测试脚本修复过程中,本发明跨模型的图形用户界面测试脚本自动修复方法会将经过测试工程师确认的事件流信息添加到自建可达性模型,随着分析和修复GUI测试脚本过程的进行,将逐步有更多被测试工程师确认的事件流信息被添加到自建事件可达性模型,从而完善自建事件可达性模型。更加完善的自建可达性模型将更好地弥补自动化事件可达性模型对GUI程序事件流描述的欠缺,并在后续脚本修复过程中通过两个模型的共同使用更好地验证和修复GUI测试脚本。
另外,为了对GUI测试脚本进行分析验证以及将修复之后的事件流转换为GUI测试脚本,同样需要自建模型的事件流同GUI测试脚本之间的映射。因为自建事件可达性模型使用自己定义的有向图结构,图中的节点为GUI事件,其中使用文本保存了相关GUI控件的完整信息和事件类型信息,因此自建事件可达性模型中的事件同GUI测试脚本的映射可以通过非常直观和快捷的文本解析、文本连接等操作实现;
本发明提出使用两个事件可达性模型互补的方法,以更加完整和准确的描述应用程序的GUI结构和事件可达性模型。第一个模型是使用现有工具自动化建立的自动化事件可达性模型,其完备程度取决于应用程序GUI结构的复杂度以及使用的工具的自动化抓取流程的智能程度。我们发现,在GUI应用程序的GUI结构较为复杂或者有一定应用逻辑的情况下,比如包含多个窗口、包含需要通过执行特定应用逻辑、在特定情境下才能可用进而触发的GUI控件等等情况下,使用目前的工具进行自动化可获取的事件可达性模型往往会停留于对GUI程序最初始和浅层次GUI的认识,而往往缺乏对最有价值的应用逻辑相关的层次较深的GUI结构和相应事件可达性的描述。
基于这种现状,本发明提出建立和使用另一个补充的自建事件可达性模型,通过旧版本GUI应用程序上的GUI测试脚本建立起自动化事件可达性模型的补充模型。自建事件可达性模型是对自动化得到的事件可达性模型的补充,它的内容可能不是很多,具体内容多少取决于应用程序的GUI结构的复杂度、自动化事件可达性模型的完备度、旧版本GUI测试脚本的规模等多种因素,但是它是经过测试工程师确认的准确内容,并且在大多数情况下,自动化的事件可达性模型可能欠缺GUI程序关键逻辑相关的事件流,而通过在分析过程中对旧版本GUI测试脚本的学习,自建事件可达性模型可以很好的完善自动化的事件可达性模型,从而使得我们可以通过这两个模型的结合更加完整而准确的描述较为复杂的GUI应用程序的GUI结构及其事件可达性模型。
本发明主要流程是使用两个事件可达性模型检验GUI测试脚本语句的合法性,并对在新版本GUI程序中不正确的GUI测试脚本给出自动修复方案。跨两个事件可达性模型的GUI测试脚本修复过程同时也是一个进行自我学习、逐步完善自建事件可达性模型的过程。因为自动化事件可达性模型内容不完备,因此我们从当前已经存在的GUI测试脚本中学习经过测试工程师确认的合理GUI控件、事件和合理的事件流,并将新学习到GUI控件、事件、和事件可达性关系添加到自建事件可达性模型中。这样,可以逐步建立起完善的自建事件可达性模型,在处理后续旧版本GUI测试脚本的过程中,继续使用两个模型协作来完成脚本的合法性验证和修复,此时自建事件可达性模型已经趋于完善,不再需要测试工程师过多确认,两个模型的共同分析验证保证了完整描绘GUI应用程序中包含的全部事件流程,实现GUI测试脚本合法性验证和修复的自动化。
附图说明
图1为本发明的流程示意图。
具体实施方式
为了解决回归测试中旧版本自动化GUI测试脚本因为GUI变更等原因而在新版本GUI程序上大量失效的问题,避免手工修改大量测试脚本或者甚至不得不重新录制GUI测试用例集而带来的巨大人力和时间开销。本发明提出跨模型的GUI测试脚本自动修复方法,使用模型检验的方法帮助测试工程师进行自动化的脚本修复。跨模型的GUI测试脚本自动修复方法需要使用新版本GUI程序的事件可达性模型验证旧版本GUI测试脚本的有效性,并基于事件可达性模型删除、新增或修改旧版本GUI测试脚本中失效的部分,使得修改之后的GUI测试脚本能够在新版本的GUI程序上顺利执行通过。
本发明方法的修复对象是测试工程师使用自动化GUI测试工具对旧版本GUI程序录制的测试脚本,是一种对GUI程序的回归测试中失效的旧版本GUI测试脚本进行自动化修复的技术。本发明基于事件可达性模型进行GUI测试脚本的正确性验证和自动修复,并结合使用通过工具自动化获得的事件可达性模型以及自建的事件可达性模型,因此称之为跨模型的修复方法。
自动化GUI测试工具,如QTP等提供的GUI测试脚本中通常使用一行语句描述一个事件,而自动化获取事件可达性模型的工具,如GUITAR等通常使用层次化的XML结构描述应用程序GUI结构,并基于GUI指定特定GUI控件相对应的点击事件。由于自动化GUI测试工具和自动化抓取事件可达性模型的工具往往由不同的供应商提供,因此两者使用的数据表示形式以及事件描述粒度等方面存在一些的差异,因此本发明方法的基础是GUI测试脚本和事件可达性模型事件流之间的相互映射技术。基于这项技术,我们可以将GUI测试脚本映射为事件可达性模型中描述的事件流,进而使用事件可达性模型进行正确性验证、图搜索和修复等处理。并在事件可达性模型事件流修复完成之后将其重新映射回GUI测试脚本。因为自建事件可达性模型使用自己定义的有向图结构,图中的节点为GUI事件,其中使用文本保存了相关GUI控件的完整信息和事件类型信息,因此自建事件可达性模型中的事件同GUI测试脚本的映射可以通过非常直观和快捷的文本解析、文本连接等操作实现。所以GUI测试脚本和事件可达性模型事件流之间的相互映射技术的主要应用方面是GUI测试脚本和自动化事件可达性模型之间的映射。自建事件可达性模型根据自身有向图结构,完成与GUI测试脚本的事件流映射,然后根据自动化事件可达性模型与自建事件可达性模型与GUI测试脚本的事件流映射,在GUI测试脚本的事件流分析完成后,将修复之后的事件流转换为GUI测试脚本,得到可在新版本GUI程序上执行的GUI测试脚本。
本发明提出的跨模型的GUI测试脚本自动修复方法适用于所有的自动化GUI测试工具录制的测试脚本,并且也不受限于具体的自动化获取事件可达性模型的工具,提出的是一种通用的方法。下面首先以HP公司的自动化测试工具QTP作为自动化GUI测试工具、以GUITAR为自动化获取事件可达性模型的工具为例,简要介绍QTP脚本和事件可达性模型中的事件流二者之间的映射方法。由于事件可达性模型中GUI控件和其点击事件一一对应,因此这个映射方法的主要工作是,通过QTP语句,在GUITAR生成的XML描述的GUI层次结构中找到对应的GUI元素。
其主要思想是根据QTP语句中提供的控件类型信息得到控件的类(Class)信息以及其在GUITAR生成的描述GUI的XML结构中节点(DOM Node)的标签(Tag Name)信息,根据QTP语句中提供的标题获得控件的标题(Title)信息。基于已经获得的Tag Name,以及Class、Title等一些属性的值,我们可以在GUITAR得到的描述GUI的XML文件中定位到特定的节点,进而确定此GUI控件元素相应的事件。在定位的过程中,因为QTP语句中天然包含了GUI控件元素的父子节点层次关系,我们可以依据这个关系在GUITAR生成的描述GUI的XML文件中逐步精确定位到最终的控件元素。并最终通过最终控件元素的ID得到相应事件可达性模型中事件的ID。这样就完成了QTP和GUITAR的事件流映射。
例如,“Crossword Sage”是一个用来编辑字谜的GUI应用程,在这个应用程序中进行加载字谜的操作使用如下QTP测试脚本:
JavaWindow("Crossword Sage").JavaMenu("File").JavaMenu("Load Crossword to Solve").Select
首先需要在GUITAR生成的描述GUI的XML文件中找到JavaWindow("Crossword Sage")对应的DOM节点。GUITAR生成的描述GUI的XML文件按GUI元素的父子、层次关系组织,如窗口中包含容器,容器中包含控件。对于窗口、容器、控件等每一种层次的GUI元素,使用不同的标签名,并且使用Title、Class等属性表示GUI元素的一些特征值。我们可以在其中找到Tag Name为“Window”,Title属性为“Crossword Sage”(以XML标准来看,并不是XML属性,但此处Title含义为表示一个属性)的DOM节点。进而在其子节点中搜索JavaMenu("File"),并最终定位到JavaMenu("Load Crossword to Solve")。JavaMenu("New Crossword")对应到Tag Name为“Widget”,Class属性为“javax.swing.JMenuItem”,Title属性为“Load Crossword to Solve”的DOM节点元素。
下面继续以HP公司的自动化测试工具QTP作为自动化GUI测试工具、以GUITAR为自动化获取事件可达性模型的工具为例,介绍本发明跨模型的GUI测试脚本自动修复方法的主要内容。
主要的处理流程如图1所示。
1. 获取自动化事件可达性模型和自建事件可达性模型,自动化事件可达性模型使用GUITAR工具得到;自建事件可达性模型为有向图结构,初始为空,图中的节点为GUI事件,包含事件相关的GUI控件信息以及事件类型信息,GUI控件信息包括GUI控件的名称、类型、以及父级GUI元素的层级关系, 图中的有向边A->B表示从事件A到事件B可达,也即应用程序在触发事件A之后可以直接触发事件B; 使用自建事件可达性模型分析GUI测试脚本,分析过程中由测试工程师对应自建可达性模型的结构确定节点信息,并将节点信息加入自建可达性模型,随着分析GUI测试脚本的过程,完善自建事件可达性模型; 
2. 使用自动化事件可达性模型和自建事件可达性模型两个模型分析QTP测试脚本的事件流;
3. 当检查到某行QTP脚本语句相应的事件在自动化事件可达性模型以及自建事件可达性模型中找不到对应节点的时候,出现了事件不可识别的问题;
3.1 如果测试工程师指出在事件可达性模型中没有找到的节点是因为相应GUI控件在新版本GUI程序中已经被删除,则使用跳过此节点直到找到下一个合法节点的方法修复脚本;
3.2 如果测试工程师指出在事件可达性模型中没有找到节点是因为GUI名称变更,则由测试工程师指定由旧版本GUI到新版本GUI的映射方式,然后根据映射后新的节点在事件可达性模型中检测节点是否存在,并且保存下测试工程师提供的映射关系;
3.2.1 如果映射后节点在两个事件可达性模型中找到,则认为修复完成。在一般情况下,此处默认如果测试工程师只指明了节点名称变更,而不同时指出从GUI测试用例中的上个事件到当前事件可达性失效的问题,则认为从上个事件到映射后的当前事件不存在可达性失效的问题。但是如果测试工程师明确指明了从GUI测试用例中的上个事件到映射后的事件不再可达,并且指明了上个事件到当前事件之间需要添加的事件流,则修复的过程中会在上个事件和当前事件之间添加测试工程师指定的事件流,并且将添加的事件流相关的节点和边添加到自建事件可达性模型中。
3.2.2 如果映射后节点在两个事件可达性模型中找不到,则认为此处问题是自动化模型的不完整,需要完善自建模型。将此语句相应的事件添加到自建模型中,并且在自建模型中添加从上一个事件到当前事件的一条边。至此认为修复完成。此处存在与3.2.1中相同的处理思路,在一般情况下,此处默认如果测试工程师只指明了节点名称变更,而不同时指出从GUI测试用例中的上个事件到当前事件可达性失效的问题,则认为从上个事件到映射后的当前事件不存在可达性问题。但是如果测试工程师明确指明了从GUI测试用例中的上个事件到映射后的事件不再可达,并且指明了上个事件到当前事件之间需要添加的事件流,则修复的过程中会在上个事件和当前事件之间添加测试工程师指定的事件流,并且将添加的事件流相关的节点和边添加到自建事件可达性模型中。
4. 如果检测到某行QTP脚本语句相应的事件在两个事件可达性模型中存在对应节点,则需要进一步检验从上一个事件到当前事件可达性问题:如果在自动化事件可达性模型或者自建事件可达性模型中,存在从GUI测试用例中的上个事件到当前事件的一条直接连接的边,则认为从上个事件到当前事件可达。因此我们需要在自动化事件可达性模型和自建事件可达性模型这两个模型中检测边的能力,具体来说,如果GUI测试用例中的上个事件和当前事件都处于自动化事件可达性模型中,就需要在自动化事件可达性模型中进行检验, 如果上个事件和当前事件都处于自建事件可达性模型中,就需要在自建事件可达性模型中进行检验;
4.1 如果通过事件可达性模型图模型检测到从GUI测试用例中的上个事件节点到当前事件节点可达,则此处合法性检验通过,无需修复;
4.2 如果通过事件可达性模型图模型检测到从GUI测试用例中的上个事件节点到当前事件节点不可达,则使用图搜索算法在两个事件可达性模型中搜寻出一条从上个事件到当前事件的合法路径,完成脚本修复,在任何一个模型中搜寻到的路径都可以用于完成修复。图搜索算法使用最短路径搜索的Dijkstra算法实现。
此处需要特别注意的是,如果出现跨模型问题,也即GUI测试用例中的上一个事件和当前事件分别处于自动化事件可达性模型和自建事件可达性模型中,则按照之前处理的原则,除非测试工程师特别指定需要添加的事件流,则默认跨模型的两个事件是可达的。如果测试工程师指定了需要添加的事件流,则会将测试指定的事件流添加到最终的修复结果以及自建模型中。
5. 生成测试用例集修复结果报告:对于可修复的失效的QTP脚本给出自动化修复之后的可在新版本GUI程序上执行的QTP脚本;对于不可修复的实效的QTP脚本给出问题报告;对于整个QTP测试用例集的修复给出全局的修复信息报告。
本发明方法的基础思想是将GUI应用程序的事件可达性模型用于对测试脚本进行正确性验证和自动的错误修复。从思想上来说可以认识到测试脚本的具体形式的一些差异、以及事件可达性模型的具体持久化形式没有必然联系。具体来说,修复对象是自动化测试工具录制的测试脚本,不同的GUI测试工具的脚本在表示形式(文本)上稍有差异,但是都可以从中抽取出相同的信息用于映射到事件可达性模型中的事件即相关控件,也即GUI控件的层次结构信息(父窗口、上层容器等)、GUI控件的类型(Class)信息、标题(Title)信息等。
下面以另外两个应该用较为广泛的录制/回放GUI测试工具为例,说明本发明方法的可用性。
首先以HP公司的测试工具WinRunner为例进行阐述。
WinRunner录制的脚本中同样包含控件的类型(Class)、标题(Title)以及事件类型等信息。例如,点击“OK”按钮会产生如下脚本:
button_set("OK" ON);
button可映射到控件类型(Class)信息“javax.swing.JButton”,而“OK”即为控件标题(Title)信息。而set_ON则反映出事件类型为点击,当然对事件类型也可以不用映射到另外一套事件定义,不影响对自动化事件可达性模型的解析和自建事件可达性模型的建立。
另外WinRunner 每次录制脚本的时候可以自动增加注释行。例如,当点击“Crossword Sage”窗口的时候,WinRunner 产生下列注释行:
# Crossword Sage
因此我们可以基于此获得控件的上层窗口信息。
基于以上这些信息,我们就可以像前述介绍的方法一样,在事件可达性模型中对此脚本进行精确地解析和匹配了。当然,事件验证和修复之后,最终将事件可达性模型中的事件映射回可执行的WinRunner脚本同样也是基于这些映射信息。
再以IBM公司的GUI测试工具Rational Robot为例进行可行性分析。
Rational Robot通过AUT监控用户交互进而生成Rational的SQABasic脚本。SQABasic有一套定义好的图形界面(GUI)对象,这些SQABasic GUI对象表现为他们的属性和功能表现。这些功能定义允许Robot模拟用户操作和对象进行交互。
举个具体的例子,当用户点击一个Java GUI组件(比如:JButton),Rational Robot生成如下SQABasic脚本:
PushButton Click, recMethod
这里的recMethod是AUT一个唯一可识别的按钮名称。同样的命令别用于所有的按钮,不管它使用什么语言开发的。
虽然Rational Robot的脚本表现形式和QTP以及WinRunner均不同,但是从中我们同样可以获得足够的关于控件的类型(Class)、标题(Title)等信息。
同样地,上文的语句进行窗口切换的时候会产生SQABasic脚本:
Window SetContext, "currentwindow", ""
通过对脚本上下文语境的解析,同样可以获得控件的上层窗口信息。进而同样地在事件可达性模型中对此脚本进行精确地解析和匹配。同样地,事件验证和修复之后,最终将事件可达性模型中的事件映射回可执行的Rational Robot脚本同样也是基于这些映射信息。
另一方面,本发明方法不会受限于事件可达性模型的具体数据持久化形式。目前事件可达性模型作为学术界教信息的模型被提出,可用以自动化建模的工具不是很多,而其中最具影响力的是在学术界知名度较高的GUITAR工具。
虽然自动建立事件可达性模型的工具可能会有不同形式,但是事件可达性模型作为一个理论模型是相对稳定的。事件可达性模型是以GUI事件为节点的有向图。而GUI事件与GUI控件之间有着直接的映射关系,比如目前的GUITAR模型,GUI控件与GUI控件的点击事件一一对应,因而我们在已经获取了足够精确详细的控件属性值以及控件层次结构信息的基础上,必然可以在事件可达性模型中精确匹配到GUI控件,进而匹配到GUI控件上的事件。
综合以上两个方面,可以说明本发明提出的跨模型的GUI测试脚本自动修复方法具有通用性,而不会局限于GUI测试工具以及自动化事件可达性模型建模工具的具体的数据表现形式的。

Claims (2)

1.跨模型的图形用户界面测试脚本自动修复方法,其特征是对在旧版本图形用户界面GUI程序上录制的GUI测试脚本,针对新版本的GUI程序进行自动修复,
1)使用工具自动获得新版本GUI程序的自动化事件可达性模型,通过GUI测试脚本语句中描述的GUI控件的层次信息,在自动化事件可达性模型中描述的GUI层次结构中找到对应的GUI控件,事件可达性模型中GUI控件和其点击事件一一对应,GUI测试脚本的GUI控件对应映射到自动化事件可达性模型中的点击事件,完成事件流映射;
2)建立一个自建事件可达性模型,自建事件可达性模型为有向图结构,图中的节点为GUI事件,包含事件相关的GUI控件信息以及事件类型信息,GUI控件信息包括GUI控件的名称、类型、以及父级GUI元素的层级关系,图中的有向边A->B表示从事件A到事件B可达,也即应用程序在触发事件A之后可以直接触发事件B,自建事件可达性模型初始为空;
3)使用自动化事件可达性模型和自建事件可达性模型分析GUI测试脚本的事件流,当检查到某行GUI测试脚本语句相应的事件在自动化事件可达性模型以及自建事件可达性模型中找不到对应节点的时候,出现了事件不可识别的问题:
3.1)如果测试工程师指出没有找到的节点是因为相应GUI控件在新版本GUI程序中已经被删除,则使用跳过此节点直到找到下一个合法节点的方法修复GUI测试脚本;
3.2)如果测试工程师指出没有找到节点是因为GUI名称变更,则由测试工程师指定由旧版本GUI程序到新版本GUI程序的映射方式,然后根据映射后新的节点在两个事件可达性模型中检测节点是否存在,并且保存下测试工程师提供的映射关系:
3.2.1)如果映射后节点在两个事件可达性模型中找到,则认为修复完成;其中,如果测试工程师只指明了节点名称变更,而没有指出从GUI测试用例中的上个事件到当前事件可达性失效的问题,则认为从上个事件到映射后的当前事件不存在可达性失效的问题;如果测试工程师指明了从GUI测试用例中的上个事件到映射后的事件不再可达,并且指明了上个事件到当前事件之间需要添加的事件流,则修复过程中在上个事件和当前事件之间添加测试工程师指定的事件流,并且将添加的事件流相关的节点和边添加到自建事件可达性模型中;
3.2.2)如果映射后节点在两个事件可达性模型中找不到,则认为此处问题是自动化事件可达性模型的不完整,需要完善自建事件可达性模型,将涉及的GUI测试脚本语句所对应的事件添加到自建事件可达性模型中,并且在自建事件可达性模型中添加从上一个事件到当前事件的一条边,至此认为修复完成;
4)如果检测到某行GUI测试脚本语句相应的事件在两个事件可达性模型中存在对应节点,则进一步检验从上一个事件到当前事件的可达性:
4.1)如果通过两个事件可达性模型检测到从GUI测试用例中的上个事件节点到当前事件节点可达,则此处合法性检验通过,无需修复;
4.2)如果通过两个事件可达性模型检测到从GUI测试用例中的上个事件节点到当前事件节点不可达,则使用图搜索算法在两个事件可达性模型中搜寻出一条从上个事件到当前事件的合法路径,完成脚本修复;
4.3)如果出现跨模型问题,即GUI测试用例中的上一个事件和当前事件分别处于自动化事件可达性模型和自建事件可达性模型中,除非测试工程师指定需要添加的事件流,否则默认跨模型的两个事件是可达的,如果测试工程师指定了需要添加的事件流,则将指定的事件流添加到最终的修复结果以及自建事件可达性模型中;
5)生成测试用例集修复结果报告:对于可修复的失效的GUI测试脚本给出自动化修复之后的可在新版本GUI程序上执行的GUI测试脚本;对于不可修复的失效的GUI测试脚本给出问题报告;对于整个GUI测试脚本的修复给出全局的修复信息报告;得到的自建事件可达性模型和自动化事件可达性模型一起用于后续其它旧版本GUI程序的GUI测试脚本的自动修复,实现GUI测试脚本合法性验证和修复的自动化。
2.根据权利要求1所述的跨模型的图形用户界面测试脚本自动修复方法,其特征是自建事件可达性模型根据自身有向图结构,完成与GUI测试脚本的事件流映射,根据自动化事件可达性模型与自建事件可达性模型与GUI测试脚本的事件流映射,在步骤3)-4)GUI测试脚本的事件流分析完成后,将修复之后的事件流转换为GUI测试脚本,得到可在新版本GUI程序上执行的GUI测试脚本。
CN201110419535.9A 2011-12-15 2011-12-15 跨模型的图形用户界面测试脚本自动修复方法 Expired - Fee Related CN102567201B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110419535.9A CN102567201B (zh) 2011-12-15 2011-12-15 跨模型的图形用户界面测试脚本自动修复方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110419535.9A CN102567201B (zh) 2011-12-15 2011-12-15 跨模型的图形用户界面测试脚本自动修复方法

Publications (2)

Publication Number Publication Date
CN102567201A CN102567201A (zh) 2012-07-11
CN102567201B true CN102567201B (zh) 2014-09-10

Family

ID=46412668

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110419535.9A Expired - Fee Related CN102567201B (zh) 2011-12-15 2011-12-15 跨模型的图形用户界面测试脚本自动修复方法

Country Status (1)

Country Link
CN (1) CN102567201B (zh)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103577316B (zh) * 2012-07-31 2016-02-10 国际商业机器公司 脚本自动修复的方法和装置
CN104239199B (zh) * 2013-06-18 2017-11-14 阿里巴巴集团控股有限公司 虚拟机器人的生成方法、自动化测试方法及相关装置
CN104156313B (zh) * 2014-08-12 2017-01-25 南京大学 一种Web服务测试用例自动生成方法
CN106021103B (zh) * 2016-05-16 2019-01-04 南京大学 一种基于代码变更的移动应用测试脚本自动维护方法
CN108536576B (zh) * 2017-03-02 2021-08-27 富士通株式会社 用于对应用程序的测试脚本进行优化的方法和装置
CN109558307B (zh) * 2017-09-26 2022-03-22 卓望数码技术(深圳)有限公司 一种游戏程序的测试方法及系统
CN107766253A (zh) * 2017-11-13 2018-03-06 南京大学 一种基于模型变更的自动维护测试脚本的方法
CN108845925B (zh) * 2018-03-30 2022-02-11 新华三技术有限公司 web页面测试方法、装置、电子设备及计算机可读介质
CN109359042B (zh) * 2018-10-08 2021-08-03 北京云测信息技术有限公司 一种基于路径搜索算法的自动化测试方法
WO2020181417A1 (en) * 2019-03-08 2020-09-17 Entit Software Llc Internationalization of automated test scripts
CN111582478B (zh) * 2020-05-09 2023-09-22 北京百度网讯科技有限公司 用于确定模型结构的方法和装置
CN112965895B (zh) * 2021-02-07 2023-12-08 卫宁健康科技集团股份有限公司 桌面应用程序自动化测试方法、装置、设备及存储介质
CN114297081A (zh) * 2021-12-30 2022-04-08 深圳市捷顺科技实业股份有限公司 一种自动化测试方法以及相关设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101655817A (zh) * 2009-09-24 2010-02-24 成都市华为赛门铁克科技有限公司 图形用户界面测试方法及测试装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8151276B2 (en) * 2008-02-27 2012-04-03 Accenture Global Services Gmbh Test script transformation analyzer with change guide engine

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101655817A (zh) * 2009-09-24 2010-02-24 成都市华为赛门铁克科技有限公司 图形用户界面测试方法及测试装置

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
Repairing GUI Test Suites Using a Genetic Algorithm;Si Huang 等;《2010 Third International Conference on Software Testing,Verification and Validation》;20100410;第245-254页 *
Si Huang 等.Repairing GUI Test Suites Using a Genetic Algorithm.《2010 Third International Conference on Software Testing,Verification and Validation》.2010,第245-254页.
刘大铭.面向GUI的自动化回归测试技术研究.《中国优秀硕士学位论文全文数据库》.2006,第14页-49页.
面向GUI的自动化回归测试技术研究;刘大铭;《中国优秀硕士学位论文全文数据库》;20060715;第14页-49页 *

Also Published As

Publication number Publication date
CN102567201A (zh) 2012-07-11

Similar Documents

Publication Publication Date Title
CN102567201B (zh) 跨模型的图形用户界面测试脚本自动修复方法
Leotta et al. Approaches and tools for automated end-to-end web testing
CN103164328B (zh) 一种业务功能的回归测试方法、装置及系统
CN101369249B (zh) 标识软件的gui部件的方法和装置
US20040143819A1 (en) Generic software testing system and mechanism
CN101996131A (zh) 基于xml封装关键字的gui自动测试方法及自动测试平台
CN108345532A (zh) 一种自动化测试用例生成方法和装置
Bettini et al. Quality-driven detection and resolution of metamodel smells
CN104657274B (zh) 软件界面测试方法及装置
Li et al. Classification of software defect detected by black-box testing: An empirical study
CN102411538B (zh) 基于事件可达性模型的图形用户界面测试脚本修复方法
Paiva et al. From requirements to automated acceptance tests with the RSL language
CN107622017B (zh) 一种通用自动化软件测试的解析方法
CN112131116A (zh) 一种嵌入式软件自动化回归测试方法
Spichkova et al. Towards a human-centred approach in modelling and testing of cyber-physical systems
CN110286882B (zh) 一种基于模型检测的前台系统设计与验证方法
Moketar et al. TestMEReq: generating abstract tests for requirements validation
Zhang et al. Towards correct product derivation in model-driven product lines
Kaur et al. A modelling framework for automotive software design and optimal test path generation
CN116302919A (zh) 一种多语言可扩展的代码依赖解析模型及解析方法
Farah-Stapleton et al. Behavioral modeling of software intensive system architectures
Marín et al. A tool for automatic defect detection in models used in model-driven engineering
CN111078193A (zh) 一种面向数据分析系统的软件开发方法及系统
CN112148608B (zh) 一种基于控件功能标注的移动端自动化软件测试方法
CN114610320B (zh) 一种基于llvm的变量类型信息修复与比较方法及系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20140910

Termination date: 20141215

EXPY Termination of patent right or utility model