基于页面对象流验证在回归测试中的应用方法及系统的制作方法

文档序号:6458133阅读:174来源:国知局

专利名称::基于页面对象流验证在回归测试中的应用方法及系统的制作方法
技术领域
:本发明涉及计算机网络应用领域,尤其涉及一种基于页面对象流验证在回归测试中的应用方法及系统。
背景技术
:目前市场上有较多的商业与开源自动化测试工具,包括采用DOM(DocumentObjectModel,文件对象才莫型)技术的测试工具、采用HTTP(HypertextTransferProtocol,超文本传输协议)的测试工具和采用仿真浏览器的测试工具。其中,采用DOM技术的测试工具,都是直接对浏览器进行控制,读取或控制页面中的对象从而达到自动测试的目的,大部分的自动测试工具(SeleniumRC,Watir和QTP等)都是基于DOM技术的。基于HTTP的测试工具,必须生成每个功能的HTTP请求,并对应答进行校验。基于仿真浏览器的测试工具,必须对浏览器行为完全模拟,复杂度高。然而,从上面的工具原理和实现的4支术特点可以看到,目前市场上用的自动化测试工具,基本上是在解决程序中或web页面上对象识别,对象维护再加上测试工程师加以程序的组织来模拟用户操作行为,从软件测试角度来看,这只是自动化测试工具所要解决问题之一,但更多的软件测试所要做的重要工作是一次软件功能执行行为与符合用户期望的差异性比较的输出,即希望正确的程序执行的输入(符合期望的对象流顺序或状态),当程序在测试执行完成后,最后得到与正确结果差异性的输出。这一点是自动化测试工具所不完善也没有4艮好帮助测试人员做到位的地方。现有技术中自动化工具以对象库或对象的属性作为对象的标识和脚本执行的参照。对象库中对象的更改,或作为标识某对象属性值的变化,将导致脚本执行的失败。因此,不得不手工维护对象库,或对象属性,增加测试人员脚本的时间维护成本。另夕卜,随着软件工程和web技术发展和演变,越来越多基于互联网的产品或项目得到用户的首选,但是进一步也带来因用户的需求或业务频繁变更,软件测试是软件质量保证过程中一个必不可手的重要手段。通常,业务需求变更或项目中程序代码修改结束,必将引入新的一轮回归测试的开始,每一次测试的执行主要参照依据测试人员设计的用例,随着项目迭代和回归测试次数的增加,测试工程师都要每次部分或全部选4奪用例来重新执行从而保证软件测试质量,但随着测试的迭代次数的增多,也同样加大项目时间或资源的投入。目前市场上,也有一些商业的或开源的辅助测试工具,如QuickTestProfessional,Winrunner,silktest,watir,selenuim等,这些工具的特点基本是通过对页面对象的识别,再加上测试工程师程序设计组织来模拟用户操作行为,达到对软件功能验证测试,自动化测试基本思路为录制测试场景,或人工通过阅读web源代码方式来得到某个对象的属性;在脚本中把测试场景相关的对象维护到工具或脚本中去。但是,但这些测试工具只是操作或验证与测试场景相关的操作步骤对象,并不能一次性的把web页面中符合某一类型所有的对象进行测试比较验证。
发明内容本发明提供了一种基于页面对象流验证在回归测试中的应用方法及系统,以获取软件功能执行行为与符合用户期望的差异性比较的输出。为达到上述目的,本发明提供了一种基于页面对象流验证在回归测试中的应用方法,包:^舌以下步骤录制功能流操作的自动化测试脚本,根据主干功能流操作顺序,从不同页面生成对象基准表;在新一轮回归测试执行时,生成功能流操作页面的对象历史表;比较所述基准表与所述对象历史表在同一功能流页面、同一对象的状态或次序是否存在差异,生成并输出测试差异报告。其中,所述录制功能流操作的自动化测试脚本,根据主干功能流操作顺序,从不同页面生成对象基准表具体包括根据测试场景录制某功能流的自动化脚本;在当前页面,根据对象类型生成页面对象流基准;按对象流生成次序和状态将对象流基准存储到基准表中。其中,所述生成功能流操作页面的对象历史表具体包括新的回归测试开始,根据录制的自动化脚本测试执行;在每一页面,根据对象类型生成历史页面对象表;按对象流生成次序和状态将每一页面的对象流存储到历史表。其中,所述比较基准表与对象历史表在同一功能流页面、同一对象,状态或次序是否存在差异,生成并输出测试差异报告具体包括访问基准表获得当前功能流测试执行对象状态基准结果集合;从历史表中获得回归测试执行的对象流集合;关联两表进行查询,判定比较同一功能流页面、同一对象的状态或次序是否存在差异;自动化脚本输出测试差异报告。本发明提供了一种基于页面对象流验证在回归测试中的装置,包括基准表生成单元,用于录制功能流操作的自动化测试脚本,根据主干功能流操作顺序,从不同页面生成对象基准表;历史表生成单元,用于在新一轮回归测试执行时,生成功能流操作页面的对象历史表;比较输出单元,用于比较基准表与对象历史表在同一功能流页面、同一对象的状态或次序是否存在差异,生成并输出测试差异报告。其中,所述基准表生成单元具体包括录制子单元,用于根据测试场景录制某功能流的自动化脚本;生成子单元,用于在当前页面,根据对象类型生成页面对象流基准;保存子单元,用于按对象流生成次序和状态将对象流基准存储到基准表中。其中,所述历史表生成单元具体包括录制子单元,用于新的回归测试开始,根据录制的自动化脚本测试执行;生成子单元,用于在每一页面,根据对象类型生成历史页面对象表;保存子单元,用于按对象流生成次序和状态将每一页面的对象流存储到历史表。其中,所述比较输出单元具体包括基准表访问子单元,用于获得当前功能流测试执行对象状态基准结果集合;历史表访问子单元,用于从历史表中获得版本回归测试执行的对象流集合;比较子单元,用于关联两表查询,判定比较同一功能流页面、同一对象的状态或次序是否存在差异;输出子单元,用于利用自动化脚本输出测试差异报告。与现有技术相比,本发明具有以下优点本发明可在上面提到的自动化工具的基础之上,对程序中每一主干功能流页面对象进行提取,与可作为参照基准对象流顺序及状态的存储进行比较;并在回归测试中,引入自动化测试验证,由自动化测试程序输出测试差异的结果,可以大大减少人工测试时间和因程序修改频繁而致测试的次数的上升,保证项目质量,夂见避测试风险。图1是本发明中基于页面对象流验证在回归测试中的应用方法流程图;图2是本发明中页面中对象基准表的生成流程图;图3是本发明中对象历史表生成流程图4是本发明中回归测试执行与基准测试对象差异输出流程图;图5是本发明中基于页面对象流验证在回归测试中的装置结构图。具体实施例方式在基于B/S(Browser/Server,浏览器/月良务器)架构web页面测试过程中,抓取功能流页面中各种web对象,以一定的顺序或状态存储到基准表,每一次的回归测试生成执行历史表,最后比较历史表与基准表中同一功能流页面对象顺序或状态差异,从而得到新的一轮回归测试过程中页面对象流与符合期望之间的差异。本发明当测试执行到一定阶段,或主干功能流程已经趋于稳定或代码趋于冻结,也就是可以得到每个功能流(或叫测试场景、测试用例)页面,以及页面对象的顺序或状态,按一定规则组织存储到数据表中,作为"可参照基准",随着回归测试中迭代次数增加,每一次测试执行历史与基准表比较,自动得到历史测试与基准测试差异结果,以及不同版本历史测试中差异比较,不需要再花太多时间把每一轮测试用例再执行一遍,节约测试时间、缩短整个软件生命周期。本发明的具体实施方式提出了一种基于页面对象流验证在回归测试中的应用方法,具体流程如图l所示,包括以下步骤步骤IOI,当回归测试开始时,录制功能流才喿作的自动化测试脚本(如QuickTestProfessional自动化测试工具),根据主干功能流操作顺序,从不同页面生成对象基准表。步骤102,随着开发与测试迭代,在新一轮回归测试执行时,生成功能流操作页面的对象历史表。步骤103,比较基准表与对象历史表在同一功能流页面、同一对象,状态或次序是否存在差异,生成并输出测试差异报告。其中,页面中对象基准表的生成流程如图2所示,包括以下步骤步骤201,根据测试场景录制某功能流的自动化脚本。步骤202,在当前页面,才艮据对象类型调用FunctiongenerateStandardObjectByType,生成页面对象流基准。例如,只十于不同页面的功能流操作,需要每一页面按对象类型,生成对象基准,对象类型包括link,webedit,text等,调用FunctiongenerateStandardObjectByType(parent,type),其中parent为传入参数,指某一页面,type指要生成某一页面的对象流类型。步骤203,按对象流生成次序和状态将对象流基准存储到基准表中保存。例如调用FunctiongenerateObjectToDB(moduleid,pageid,object—name,object_order,object_property)来实现。对象流验i正包括对象名、对象在页面的顺序、对象的其它属性,如htmltag,innertext等,被用来存储在object』roperty参数中。步骤2(M,判断是否需要进行换页操作,如果是,则转步骤步骤207,否则,转步骤205。步骤205,判断当前功能是否操作结束,如果是,则转步骤206,否则转步骤201。步骤206,功能流脚本录制结束。步骤207,点击访问新页面,并转步骤202。回归测试中功能流页面对象历史表生成流程如图3所示,包括以下步骤步骤301,新的回归测试开始,根据录制的自动化脚本测试执行。显然,回放的页面操作流程与录制是一样的。步骤302,在每一页面,根据对象类型调用函数FunctiongenerateHistoryObjectByType(parent,type),生成历史页面乂于象表。步骤303,按对象流生成次序和状态将每一页面的对象流存储到历史表。其中,也是调用FunctiongenerateObjectToDB(moduleid,roundid,pageid,object—name,object—order,objectjproperty)来实现,同才羊可以<呆存对象名、对象次序,也可以4巴对象的属性如htmltag,innertext,alt等用object_property变量传入。步骤304,脚本判定是否需要换页操作,如果是,转步骤307,否则,转步骤305。步骤305,判断当前功能是否操作结束,如果是,转步骤306,否则,转步骤301。步骤306,功能流脚本执行结束。步骤307,脚本执行访问新页面,并转步骤302。回归测试执行与基准测试对象差异输出流程如图4所示,包括以下步骤步骤401,自动化脚本执行。步骤402,访问基准表,获得当前功能流测试执行对象状态基准结果集合。步骤403,访问历史表,针对每一次回归测试,从历史表中获得版本回归测试执行的对象流集合。步骤404,SQL脚本关联两表查询,判定比较同一功能流页面、同一对象的状态或次序是否存在差异。如对象属性htmltag,innertext,或visible等。最后输出测试执行差异报告。步骤405,自动化脚本输出测试差异报告。步骤406,功能流脚本执行结束。本发明用到的三个重要函数(在QTP工具下VBScript脚本开发实现,〃后为中文注释),包括第一个函数FunctiongenerateStandardObjectByType(parent,type)〃某page中某种类型对象集合;//Parent是生成对象的父层次,通常是页面;〃ObjectType是生成对象的类型,如Webedit,Link,RadioButton等;SetoDesc=Description.Create〃代码用VBscript实现;ODesc("micclass").Value=Type〃用描述性编程,得到页面对象集合;SetoObjectCollection=parent.ChildObjects(oDesc)NumOfObjects=oObjectCollection.countZ/耳又得对象的个凄t;property="HtmlTag"〃以htmltag属性为例;Fori=0ToNumOfObjects-1object—name=oObjectCollection(I).getroproperty("name")〃才巴取到的对象名赋值给变量;object—order=1//取到对象的位置,QTP默认对象在页面中布局次序是从上到下,从左到右,从O开始递增作为index的;value=oObjectCollection(I).getroproperty(property)〃取互)J^f象纟合定属性取值;callgenerateObjectToStandardDB(page—id,object—name,object—order,property,value)〃生成数据放到Test—Regress—Base表中;〃pagejd可用sequence来贝武值,也可以自定义;〃object—name对象名;〃object—order对象在页面中的次序;〃property^f象的属')"生,^口inertext,htmltag,color,visible,item等;〃value对应属性的取值;NextEndfunction第二个函数FunctiongenerateHistoryObjectByType(Parent,ObjectType)〃历史表的执行对象生成方法实现,类似基准表对象生成,都需要在不同页面调用生成历史;〃表对象方法;〃上部分代码实现,与生成基准表的相同;callgenerateObjectToHistoryDB(page—id,object—name,object—order,property,value)〃生成数据放到Test—Regress—History表中;6ndfunction第三个函数FunctionCompareObjectToGetResult(ReportType)〃调用PL/SQL存储过程来生成测试报告;〃存储过程的功能如下〃得到新增对象,ReportType=0selectcaseReportTypecase"0"select*FromTest—Regress—Historywhereobject—namenotin(selectobject—nameFromTest—Regress_base)〃得到删除对象,ReportType=lCass"r'select*FromTest—Regress—basewhereobject—namenotin(selectobject—nameFromTest—Regress—history)〃得到维护修改的对象,ReportType=2case"2"select*FromTest—Regress—basea,Test—Regress—Historybwherea.object—name—b.object—nameanda.property=b.propertyanda.valueb.value〃得到对象在页面显示次序,ReportType=3case'T'select*FromTest—Regress—basea,Test—Regress—Historybwherea.object_name=b.object—nameanda.index<>b.indexendfunction本发明实施例中,某用户登陆到系统,进行查询系统管理功能;结合QTP自动化工具和本发明的方法,测试步骤如下(本示例是测试验证web页面对象中一种,link流的验证)1,使用QTP录制测试场景脚本。Browser("Browser").Dialog("安全警报").WinButton("是(Y)").Click〃Browser是指当前打开的〃浏览器对象,Browser,dialog,winbutton是指对象,括号里取值是把对象其中一个属性作为;〃此处脚本是指点击dialog表单上,"是(Y)"的按钮;Browser("Browser").Page("随时随地签单").WebEdit("id").Set"Wiston丄i"〃把页面表单中,名'为id的webedit对象设值为wistonLi;Browser("Browser").Page("随时随地签单").WebEdit("password").Set"123456"〃设置密码;〃123456Browser("Browser").Page("随时随地签单").WebButton("登录").Click〃点击登陆按钮;Browser("Browser").Page("销售管理信息系统")丄ink("系统管理").Click〃点击系统管理link;Browser("Browser").Page("销售管理信息系统—2").WebButton("查询").Click/7点击查询按钮;2,生成基准对象。因为上述脚本涉及三个页面,需要调用三次生成基准对象的函数,脚本修改如下'Browser("Browser").Dialog("安全警报").WinButton("是(Y)").Click〃注释如上类似'Browser("Browser").Page("随时随i也签单").WebEdit("id").Set"Wiston丄i"'Browser("Browser").Page("随时随地签单").WebButton("登录").Click'Browser("Browser").Page("销售管理信息系统").Link("系统管理").ClickBrowser("Browser").Page("销售管理信息系统—2").WebButton("查询").ClickDimparent,object〃定义变量type="link"〃生成link类型setparent=Browser("Browser").Page("销售管理信息系统—2")〃把生成对象页面的层次;〃赋给parent对象;callgenerateStandardObjectByType(parent,type)〃调用生成才示准只十象的方法;假设场景举例生成,销售管理信息系统—2页面中的所有link对象,如生成三个对象如表1所示,分别为,表1:<table>tableseeoriginaldocumentpage13</column></row><table><table>tableseeoriginaldocumentpage14</column></row><table>3,生成测试执行历史对象,脚本修改如下(举例生成,销售管理信息系统一2页面中的所有link对象)'Browser("Browser").Dialog("安全警报").WinButton("是(Y)").Click〃注释如上类似'Browser("Browser").Page("随时随:t也签单").WebEdit("id").Set"Wiston丄i"'Browser("Browser").Page("随时随地签单").WebButton("登录").Click'Browser("Browser").Page("销售管理信息系统")丄ink("系统管理").ClickBrowser("Browser").Page("销售管理信息系统—2").WebButton("查询").ClickDimparent,object〃注释如上类似type="link"setparent=Browser("Browser").Page("销售管理信息系统—2")callgenerateHistoryObjectByType(Parent,ObjectType)〃调用生成历史对象的方法假设场景举例生成,销售管理信息系统—2页面中的所有link对象,如生成三个对象如表2所示,分别为,表2:名<table>tableseeoriginaldocumentpage14</column></row><table>4:比较历史执行版本与基准版本之间的对象差异'得到测试4艮告,新增对象linkdReportType="0"callCompareObjectToGetResult(ReportType)〃得到测试报告,删除对象linkbReportType="1"callCompareObjectToGetResult(ReportType)〃得到测试报告,对象linka的属性值由true变为falseReportType="2"callCompareObjectToGetResult(ReportType)〃得到测试报告,对象linka的index值有变化,由0变为1ReportType="3"callCompareObjectToGetResult(ReportType)上述只是以link作为测试对象来举例,当然也可以验证如某个dropdownlistbox有多少选项,或页面中radiobox对象,check状态的变化等。对于基准表系统,生成了鸟某个页面相关的,任意类型对象流基准,保存到数据库中去。再通过回归测试执行,得到历史对象流,通过在页面中某个类型对象的次序,与属性值等的比较,得到与功能流相关的所有页面不同类型对象差异的测试结果的自动化输出,从而大家大大减少回归测试的时间(自动化脚本维护与测试验证的时间)。显然,从上面的举例也可以得到,如果在执行测试时,只需要执行下面的脚本,生成历史对象流就可以了,而不需要像自动化工具那样关注所有脚本涉及对象,或属性如同脚本录制或开发时对象或属性值的一致。Browser("Browser").Page("销售管理信息系统_2").WebButton("查询").ClickDimparent,object'';主释钕口上类4以type="link"setparent=Browser("Browser").Page("销售管理信息系统—2")callgenerateStandardObjectByType(parent,type),由于本发明主要基于在回归测试中,关注与功能流场景相关web页面对象流的验证测试,特别是表单中对象次序与状态变化,通过程序自动输出测试执行报告,而减少需要人工参与的测试,如不同版本web对象的比较,特别减轻测试工程师重复测试劳动。本发明提供了一种基于页面对象流验证在回归测试中的装置,如图5所示,包括基准表生成单元10,用于录制功能流操作的自动化测试脚本,根据主千功能流操作顺序,从不同页面生成对象基准表;历史表生成单元20,用于在新一轮回归测试执行时,生成功能流操作页面的对象历史表;比较输出单元30,用于比较基准表与对象历史表在同一功能流页面、同一对象的状态或次序是否存在差异,生成并输出测试差异报告。所述基准表生成单元IO具体包括录制子单元ll,用于根据测试场景录制某功能流的自动化脚本;生成子单元12,用于在当前页面,根据对象类型生成页面对象流基准;保存子单元13,用于按对象流生成次序和状态将对象流基准存储到基准表中。所述历史表生成单元20具体包括录制子单元21,用于新的回归测试开始,根据录制的自动化脚本测试执行;生成子单元22,用于在每一页面,根据对象类型生成历史页面对象表;保存子单元23,用于按对象流生成次序和状态将每一页面的对象流存储到历史表。所述比较输出单元30具体包括基准表访问子单元31,用于获得当前功能流测试执行对象状态基准结果集合;历史表访问子单元32,用于从历史表中获得版本回归测试执行的对象流集合;比较子单元33,用于关联两表查询,判定比较同一功能流页面、同一对象的状态或次序是否存在差异;输出子单元34,用于利用自动化脚本输出测试差异报告。通过以上实施例的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质算机软件产品存储在一个存储介质中,包括若干指令用以^f吏得一台网络设备执行本发明各个实施例所述的方法。以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。权利要求1、一种基于页面对象流验证在回归测试中的应用方法,其特征在于,包括以下步骤录制功能流操作的自动化测试脚本,根据主干功能流操作顺序,从不同页面生成对象基准表;在新一轮回归测试执行时,生成功能流操作页面的对象历史表;比较所述基准表与所述对象历史表在同一功能流页面、同一对象的状态或次序是否存在差异,生成并输出测试差异报告。2、如权利要求1所述基于页面对象流验证在回归测试中的应用方法,其特征在于,所述录制功能流操作的自动化测试脚本,根据主干功能流操作顺序,从不同页面生成对象基准表具体包括根据测试场景录制某功能流的自动化脚本;在当前页面,根据对象类型生成页面对象流基准;按对象流生成次序和状态将对象流基准存储到基准表中。3、如权利要求1所述基于页面对象流验证在回归测试中的应用方法,其特征在于,所述生成功能流操作页面的对象历史表具体包括新的回归测试开始,根据录制的自动化脚本测试执行;在每一页面,根据对象类型生成历史页面对象表;按对象流生成次序和状态将每一页面的对象流存储到历史表。4、如权利要求1所述基于页面对象流验证在回归测试中的应用方法,其特征在于,所述比较基准表与对象历史表在同一功能流页面、同一对象,状态或次序是否存在差异,生成并输出测试差异报告具体包括访问基准表获得当前功能流测试执行对象状态基准结果集合;从历史表中获得回归测试执行的对象流集合;关联两表进行查询,判定比较同一功能流页面、同一对象的状态或次序是否存在差异;自动化脚本输出测试差异报告。5、一种基于页面对象流验证在回归测试中的装置,其特征在于,包括基准表生成单元,用于录制功能流操作的自动化测试脚本,根据主干功能流操作顺序,从不同页面生成对象基准表;历史表生成单元,用于在新一轮回归测试执行时,生成功能流操作页面的对象历史表;比较输出单元,用于比较基准表与对象历史表在同一功能流页面、同一对象的状态或次序是否存在差异,生成并输出测试差异报告。6、如权利要求5所述基于页面对象流验证在回归测试中的装置,其特征在于,所述基准表生成单元具体包括录制子单元,用于根据测试场景录制某功能流的自动化脚本;生成子单元,用于在当前页面,根据对象类型生成页面对象流基准;保存子单元,用于按对象流生成次序和状态将对象流基准存储到基准表中。7、如权利要求5所述基于页面对象流验证在回归测试中的装置,其特征在于,所述历史表生成单元具体包括录制子单元,用于新的回归测试开始,根据录制的自动化脚本测试执行;生成子单元,用于在每一页面,根据对象类型生成历史页面对象表;保存子单元,用于按对象流生成次序和状态将每一页面的对象流存储到历史表。8、如权利要求5所述基于页面对象流验证在回归测试中的装置,其特征在于,所述比较输出单元具体包括基准表访问子单元,用于获得当前功能流测试执行对象状态基准结果集合;历史表访问子单元,用于从历史表中获得版本回归测试执行的对象流集合;比较子单元,用于关联两表查询,判定比4支同一功能流页面、同一对象的状态或次序是否存在差异;输出子单元,用于利用自动化脚本输出测试差异报告。全文摘要本发明提供了一种基于页面对象流验证在回归测试中的应用方法,包括以下步骤录制功能流操作的自动化测试脚本,根据主干功能流操作顺序,从不同页面生成对象基准表;在新一轮回归测试执行时,生成功能流操作页面的对象历史表;比较所述基准表与所述对象历史表在同一功能流页面、同一对象的状态或次序是否存在差异,生成并输出测试差异报告。本发明提供了一种基于页面对象流验证在回归测试中的应用装置。本发明可以大大减少人工测试时间和因程序修改频繁而致测试的次数的上升,保证项目质量,规避测试风险。文档编号G06F11/36GK101526916SQ20081000764公开日2009年9月9日申请日期2008年3月3日优先权日2008年3月3日发明者李辅炳申请人:阿里巴巴集团控股有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1