一种页面测试方法和页面测试装置的制作方法

文档序号:6438780阅读:148来源:国知局
专利名称:一种页面测试方法和页面测试装置的制作方法
技术领域
本发明涉及页面测试技术,尤其涉及一种页面测试方法和页面测试装置。
技术背景
以动作字(Action Word, AW)为主要特点的第三代软件测试技术,因其使用方便, 一经推出便取得了巨大的成功。
在这种软件测试技术中,测试软件厂商预先为在标准页面(例如基于超文本标记语言(HyperText Markup Language,HTML)编写的标准网页)上执行的每一种标准动作(例如“鼠标左键单击按钮”或者“鼠标左键单击下拉框”等)定义对应的动作函数。这种动作函数通过对应的动作名称(例如“鼠标左键单击按钮”或者“鼠标左键单击下拉框”等)进行标识,其作用并非用于触发对应的动作,而是用于触发动作执行后产生的直接结果,该直接结果可称为动作事件。测试软件中会维护一动作列表,其中列有通过各自动作名称标识的各种动作函数。
在测试过程中,这种测试软件首先提取待测试页面中的所有页面元素(例如“按钮”和“下拉框”等),生成对照表(MAP)。此后,测试人员便可通过在动作列表中选择动作名称和在对照表中选择页面元素的方式来生成对应的测试语句,以便对针对该页面元素进行的特定动作(即动作名称所对应的动作)进行测试。接下来,在加载待测试页面(目的是使页面处于工作状态以便对页面进行测试)后,测试软件读取测试语句,调用其中的动作名称所对应的动作函数,来触发对测试语句中的页面元素执行对应动作后导致的动作事件,获得最终的动作结果(该动作结果可通过页面的变化反映出来)并对其进行验证,得到最终的测试结果。如上文所述,执行动作函数的的作用并非用于触发对应的动作,而是触发动作执行后产生的直接结果。
如上文所述,在上述测试过程中,测试人员需要通过选择动作名称和页面元素的方式来生成对应的测试语句。例如,如果测试人员需要对“鼠标左键单击登录按钮”这一页面操作进行测试,则测试人员需要首先选择“鼠标左键单击按钮”这一动作名称,然后选择 “登录按钮”这一页面元素,以生成对应的测试语句。又例如,如果测试人员需要对“鼠标左键单击性别下拉框”这一页面操作进行测试,则测试人员需要首先选择“鼠标左键单击下拉框”这一动作名称,然后选择“性别下拉框”这一页面元素,以生成对应的测试语句。不难发现,测试人员需要同时依据动作类型(例如“鼠标左键单击”)和待测试动作所面向的待测试页面元素的类型(例如,“登录按钮”的类型为“按钮”,“性别下拉框”的类型为“下拉框”)这两个参考条件,来选择对应的动作名称(例如,“鼠标左键单击按钮”或者“鼠标左键单击下拉框”)以确定对应的动作函数,而不能仅仅依据动作类型来选择对应的动作名称,这是因为针对不同类型的页面元素,即使动作类型相同,执行动作后触发的动作事件也很可能是不同的(例如鼠标左键单击“登录按钮”可能导致弹出登录结果界面,而鼠标左键单击“下拉框”可能导致列出可供选择的选项),因此需要根据页面元素的类型开发对应的动作函数。这种因页面元素类型不同而导致的动作函数上的差异,增大了测试软件的复杂度。一方面,即便对于同一类型的动作,测试软件厂商也需要根据动作所面向的页面元素的类型而编写多个不同的动作函数,因此增大了测试软件的开发复杂度。另一方面,在选择动作函数时,测试人员需要根据动作所面向的页面元素的类型在多个相似的动作函数中进一步选择所需的动作函数,增大了测试软件的使用复杂度。发明内容
有鉴于此,实有必要提供一种页面测试方法,来降低现有测试软件的开发复杂度和使用复杂度。
同时,提供一种页面测试装置,来降低现有测试软件的开发复杂度和使用复杂度。
根据本发明实施例的一个方面,提供一种页面测试方法,用于对页面进行测试,所述方法包括
读取用于指示页面元素和测试动作的测试语句;
根据所述页面的源代码查找所述页面元素在所述页面上的位置;
在所述位置执行所述测试动作;
验证所述测试动作的执行结果以获得测试结果。
根据本发明实施例的另一方面,提供一种页面测试装置,用于对页面进行测试,所述装置包括
读取模块,用于读取用于指示页面元素和测试动作的测试语句;
查找模块,用于根据所述页面的源代码查找所述页面元素在所述页面上的位置;
执行模块,用于在所述位置执行所述测试动作;
验证模块,用于验证所述测试动作的执行结果以获得测试结果。
本发明实施例提供的技术方案读取用于指示页面元素和测试动作的测试语句,根据页面的源代码查找所述页面元素在所述页面上的位置,并在所述位置执行所述测试动作,再验证所述测试动作的执行结果以获得测试结果。由此可见,本发明实施例无需使用动作函数,而是直接触发指定的测试动作,因此测试软件的开发复杂度和使用复杂度均得以降低。


图1是依据本发明一实施例的页面测试方法的示范性流程图2是依据本发明一实施例的页面测试装置的示范性逻辑结构示意图3是依据本发明一实施例的页面的示范性示意图。
具体实施方式
图1是依据本发明一实施例的页面测试方法100的示范性流程图。页面测试方法 100用于对页面进行测试,其中,该页面可以是基于HTML编写的网页(Web I^age),也可以是软件界面。
步骤102,读取用于指示页面元素和测试动作的测试语句。
步骤104,根据所述页面的源代码查找所述页面元素在所述页面上的位置。
步骤106,在所述位置执行所述测试动作。
步骤108,验证所述测试动作的执行结果以获得测试结果。
本发明实施例提供的技术方案读取用于指示页面元素和测试动作的测试语句,根据页面的源代码查找所述页面元素在所述页面上的位置,并在所述位置执行所述测试动作,再验证所述测试动作的执行结果以获得测试结果。由此可见,本发明实施例无需使用动作函数,而是直接触发指定的测试动作,因此测试软件的开发复杂度和使用复杂度均得以降低。此外,本发明实施例无需预先提取待测试页面中的所有页面元素以生成对照表。
下面就对上述方法100中的各个步骤进行详细描述。
在具体实现过程中,方法102中提及的测试语句可以是基于预设语句模板输入的基于自然语言的测试语句,其中,上述语句模板与动作关键词相对应,不同的动作关键词对应不同的语句模板。例如,对于“鼠标左键单击”这一动作关键词,对应的语句模板可采用如下格式
鼠标左键单击+页面元素
其中+无需输入。而页面元素可以是例如但不限于“登录按钮”、“性别下拉框”等页面元素。又例如,对于“输入”这一动作关键词,对应的语句模板可采用如下格式
在+页面元素+中+输入+动作值
其中+无需输入。区别于上述动作关键词“鼠标左键单击”,动作关键词“输入” 所对应的语句模板中需要包含动作值,该动作值可以是任何需要输入的字符,例如数值、符号和字母等之中的至少一种组成的字符串等。不难发现,在基于语句模板输入的测试语句中,该测试语句所指示的测试动作即为该语句模板所对应的动作关键词所指示的动作。此外,在确定了测试语句中包含的动作关键词之后,即可根据该动作关键词对应的语句模板, 解析出该测试语句所指示的页面元素和动作值(如果包含动作值的话)。在具体实现过程中,测试动作可包括例如但不限于鼠标左键单击、鼠标右键单击、鼠标左键双击、鼠标右键双击、鼠标悬停、键盘输入、滚轮滚动等各种动作。由此可见,相比现有技术中标识动作函数的动作名称,动作关键词仅为动作类型,而不包括动作所指向的页面元素的类型。
此外,上述语句模板中提到的页面元素可以通过页面元素的内容和类型共同来指示,也可以通过页面元素的属性(包含属性名称和属性值)来指示,或者同时通过页面元素的内容和类型以及页面元素的属性来指示,以便更为精确的指示页面元素。例如,对于“员工编号栏”这一页面元素来说,在测试语句中,该页面元素既可以通过该页面元素的内容和类型即文字“员工编号”和“栏”来指示,也可以通过该页面元素的属性名称例如id、name 等及其对应的属性值来指示,或者同时通过文字“员工编号”和“栏”以及属性id或者name 及其对应的属性值来指示。当测试语句同时包含页面元素的内容和类型以及属性名称及其属性值时,在测试语句中,语句模板中的该页面元素可采用如下格式
页面元素的内容+页面元素的类型(页面元素的属性名称=属性值)
其中+无需输入。例如,对于页面上的“员工编号栏”这一页面元素即可写成员工编号栏(id = staff),其中,员工编号是该页面元素的内容,栏是该页面元素的类型,id是该页面元素的属性名称,staff是该页面元素的属性值。更为具体的,当在测试语句中使用页面元素的属性名称时,还可将该属性名称统一标识为一通用变量,例如通用变量X,该通用变量X既可以是id,也可以是name,还可以是其他属性名称。在这种情况下,该页面元素将通过该通用变量X的值来指示。例如,上述页面元素“员工编号栏”可写成X = staff,在这种情况下,该页面元素即为具有属性值为staff的页面元素,无论该属性值所属的属性的属性名称是何种属性名称。
如上文所述,在基于上述语句模板输入的基于自然语言的测试语句中,通过动作关键词来指示测试动作,而通过页面元素的内容和类型来指示页面元素,或者通过页面元素的属性名称及属性值来指示页面元素,又或者同时通过页面元素的内容和类型以及页面元素的属性名称及属性值来指示页面元素。为便于描述,可将测试语句中用于指示页面元素的信息简称为页面元素指示信息,通过上文描述不难理解,该页面元素指示信息包括下列信息之中的至少一种
页面元素的内容和类型;
页面元素的属性名称及属性值。
即该页面元素指示信息可以包含页面元素的内容和类型,也可以包含页面元素的属性名称及属性值,还可以同时包含页面元素的内容和类型以及页面元素的属性及其属性值。
此外,在具体实现过程中,上述语句模板可采用正则表达式的方式来实现。例如, 动作关键词“输入”所对应的正则表达式可以是
在[“‘“](?P<teXt>·*)[“‘ ”][栏框] ([((]( P<X>[\w]*) = ( ? P<v>·*) D)]) ?
([[](( P<index>[\d]+ ? )( P<offset> ([\+\"] [\d]+) ? ))[]]) [栏框] [内中]?输入[“ 〃 ‘]( P<value>. *)[” “‘]
其中,上述text可代表页面元素的内容,栏框代表页面元素的类型为栏或者框,X 代表通用变量,V代表通用变量的值,value为动作值。由此可见,在根据上述正则表达式输入的测试语句中,页面元素指示信息同时包含页面元素的内容和类型以及页面元素的属性名称及属性值。
由上文所述可知,如果获知测试语句对应的语句模板,即可从测试语句中解析得到该测试语句所指示的页面元素。由于语句模板与动作关键词相对应,因此如果获知测试语句中包含的动作关键词,即可获知测试语句对应的语句模板。在具体实现过程中,可维护一动作关键词列表,其中列有各种动作关键词。在这种情况下,方法100中的步骤102可具体包括
读取所述测试语句;
基于动作关键词列表查找包含在所述测试语句中的动作关键词,其中,所述动作关键词用于指示所述测试动作;
根据所述动作关键词对应的语句模板从所述测试语句中提取所述页面元素,其中,从所述测试语句中提取所述页面元素又可具体解释为,提取所述页面元素的页面元素指不信息。
此外,方法100中的步骤102还可包括根据所述动作关键词对应的语句模板从所述测试语句中提取与所述测试动作相关联的动作值。
如上文所述,在方法100的步骤104中,本发明实施例根据所述页面的源代码查找所述页面元素在所述页面上的位置。具体来说,该位置在可视范围之内。在具体实现过程中,在对页面进行测试时,往往需要加载该页面,即将该页面的源代码加载到内存中。如此一来,便可根据加载到内存中的页面的源代码来查找所述页面元素在所述页面上的位置。 由背景技术可知,现有技术需要加载页面两次。第一次加载页面的目的是提取页面中的所有页面元素以生成对照表,第二次加载页面的目的是使页面处于工作状态以便对其进行测试。与现有技术相比,本发明实施例无需预先提取页面中的所有页面元素以生成对照表,因此仅需加载一次页面即可。
在具体实现过程中,方法100的步骤104可具体包括使所述页面元素出现在可视范围内;根据所述页面的源代码查找所述页面元素在该页面元素所属窗口(window)对象中的位置;根据所述页面的源代码查找所述页面元素所属窗口对象在所述页面上的位置; 根据所述页面的源代码查找影响所述窗口对象的显示位置的滚动条的当前滚动位置;依据所述页面元素在该页面元素所属窗口对象中的位置、所述页面元素所属窗口对象在所述页面上的位置和影响所述窗口对象的显示位置的滚动条的当前滚动位置确定所述页面元素在所述页面上的位置。在具体实现过程中,步骤104中的上述步骤可通过下列代码进行实现
8def getAbsPosition(self, el em):“1荻取指定页面元素的座标输入elem-页面元素返回页面元素座标[χ, y]说明如果页面元素不在可视范围内,会自动将页面元素移到可视范围内"’ #返回值 pos =
#先将页面元素置到可视范围内 elem. scrolllnto View(False) #准备循环 tempelem = elem#在一个document内部,通过相对位置累加出这个elem相对window的位置 #最后取window的绝对位置,相加即得到elem的绝对位置 while True:#x轴pos
+= tempelem. offsetLeft#y轴pos[l] += tempelem. offsetToplogger.debug("[%d, %d],%s" % (pos
, pos[l], tempelem.tagName)) #到了 BODY,就不能再往后取了,再往后offsetParent就会报错了 #这里该取window的绝对位置了 if tempelem.tagName == "BODY":curWindow = tempelem.ownerDocument.parentWindow pos
+= curWindow. screenLeft舰的BUG: screenTop属性不准确,OK,用Windows XP sp3就可以了 #pos[l] += curWindow. screenTop pos[l] += curWindow. screenToplogger. debug("curWindow.screenTop=%d,name=%s"%(curWindow. screenTop, curWindow.location))
logger. debug(McurWindow.parent.screenTop=%d,name=%s"%(curWindow.parent.screenTop, curWindow.parent.location))logger. debug(McurWindow.parent.parent.screenTop=%d,nam e=%s"%(curWindow.parent.parent.screenTop, curWindow.parent.parent.location))logger. debug("curWindow.parent.parent.parent.screenTop 二 %d,name=%s" % (curWindow.parent.parent.parent.screenTop,curWindow.parent.parent.parent.location))logger. debugC'curWindow.parent.parent.parent.parent.screenTopsyoc^namesyos"%(curWindow.parent.parent.parent. parent. screenTop, curWindow.parent.parent.parent.parent.location))logger. debug(McurWindow. top.screenTop=%d,name=%s"%(curWindow.top.screenTop, curWindow.top.location))logger. debug("curWindow.top.frames
. screenTop 二 %d"%curWindow.top.frames
. screenTop)#此时对elem的绝对位置的获取已经完成,以下是才队椐滚动条的状态进行调整。while tempelem:if hasattr(tempelem, 'scrollLeft'): if tempelem.scrollLeft !二 0:logger.debug("在%s上发现滾动条向右偏移%d" % (tempelem.tagName, tempelem. scrollLeft))#scrollLeft是滚动条右向移动的距离 pos
-= tempelem.scrollLeft if hasattr(tempelem, 'scrollTop'): if tempelem.scrollTop != 0:logger.debug(M在%s上发现滾动条向下偏移%d" % (tempelem.tagName, tempelem.scrollTop))#scrollTop是滚动条纵向移动的距离 pos[l] -= tempelem.scrollTop #取其父节点tempelem = tempelem.parentNode break#获取上一级元素,准备下一次循环 tempelem = tempelem.offsetParent
权利要求
1.一种页面测试方法,用于对页面进行测试,其特征在于,所述方法包括读取用于指示页面元素和测试动作的测试语句;根据所述页面的源代码查找所述页面元素在所述页面上的位置;在所述位置执行所述测试动作;验证所述测试动作的执行结果以获得测试结果。
2.如权利要求1所述的方法,其特征在于,所述根据所述页面的源代码查找所述页面元素在所述页面上的位置,具体包括使所述页面元素出现在可视范围内;根据所述页面的源代码查找所述页面元素在该页面元素所属窗口对象中的位置;根据所述页面的源代码查找所述页面元素所属窗口对象在所述页面上的位置;根据所述页面的源代码查找影响所述窗口对象的显示位置的滚动条的当前滚动位置;依据所述页面元素在该页面元素所属窗口对象中的位置、所述页面元素所属窗口对象在所述页面上的位置和影响所述窗口对象的显示位置的滚动条的当前滚动位置确定所述页面元素在所述页面上的位置。
3.如权利要求2所述的方法,其特征在于,所述测试语句中携带有用于指示所述页面元素的页面元素指示信息,所述查找所述页面元素在所述页面上的位置具体包括,根据所述页面元素指示信息查找所述页面元素在所述页面上的位置,其中,所述页面元素指示信息包含页面元素的内容和类型,或者所述页面元素指示信息包含页面元素的属性名称及属性值,或者所述页面元素指示信息同时包含页面元素的内容和类型以及页面元素的属性名称及属性值。
4.如权利要求3所述的方法,其特征在于,所述读取用于指示页面元素和测试动作的测试语句具体包括读取所述测试语句;基于动作关键词列表查找包含在所述测试语句中的动作关键词,其中,所述动作关键词用于指示所述测试动作;根据所述动作关键词对应的语句模板从所述测试语句中提取所述页面元素。
5.如权利要求4所述的方法,其特征在于,所述读取用于指示页面元素和测试动作的测试语句还包括根据所述动作关键词对应的语句模板从所述测试语句中提取与所述测试动作相关联的动作值。
6.如权利要求5所述的方法,其特征在于,当找到的动作关键词为输入时,所述执行所述测试动作具体包括,复制所述动作值并将其粘贴至所述位置。
7.如权利要求6所述的方法,其特征在于,所述方法还包括,显示采用预设透明度的测试窗口,所述页面元素在所述页面上的位置处于所述测试窗口之外,所述测试窗口包含用于显示所述测试语句的第一子窗口和用于显示所述测试结果的第二子窗口,其中,在获得所述测试结果之前,所述测试语句呈现第一色彩;在获得所述测试结果之后,当所述测试结果为测试成功时,所述测试语句呈现第二色彩,所述测试结果呈现第三色彩;在获得所述测试结果之后,当所述测试结果为测试失败时,所述测试语句呈现第四色彩,所述测试结果呈现第五色彩,其中,第一色彩、第二色彩和第四色彩彼此各不相同,第三色彩不同于第五色彩。
8.一种页面测试装置,用于对页面进行测试,其特征在于,所述装置包括 读取模块,用于读取用于指示页面元素和测试动作的测试语句;查找模块,用于根据所述页面的源代码查找所述页面元素在所述页面上的位置; 执行模块,用于在所述位置执行所述测试动作; 验证模块,用于验证所述测试动作的执行结果以获得测试结果。
9.如权利要求8所述的装置,其特征在于,所述查找模块具体用于 使所述页面元素出现在可视范围内;根据所述页面的源代码查找所述页面元素在该页面元素所属窗口对象中的位置; 根据所述页面的源代码查找所述页面元素所属窗口对象在所述页面上的位置; 根据所述页面的源代码查找影响所述窗口对象的显示位置的滚动条的当前滚动位置;依据所述页面元素在该页面元素所属窗口对象中的位置、所述页面元素所属窗口对象在所述页面上的位置和影响所述窗口对象的显示位置的滚动条的当前滚动位置确定所述页面元素在所述页面上的位置。
10.如权利要求9所述的装置,其特征在于,所述测试语句中携带有用于指示所述页面元素的页面元素指示信息,所述查找模块具体用于,根据所述页面元素指示信息查找所述页面元素在所述页面上的位置,其中,所述页面元素指示信息包含页面元素的内容和类型, 或者所述页面元素指示信息包含页面元素的属性名称及属性值,或者所述页面元素指示信息同时包含页面元素的内容和类型以及页面元素的属性名称及属性值。
11.如权利要求10所述的装置,其特征在于,所述读取模块具体用于 读取所述测试语句;基于动作关键词列表查找包含在所述测试语句中的动作关键词,其中,所述动作关键词用于指示所述测试动作;根据所述动作关键词对应的语句模板从所述测试语句中提取所述页面元素。
12.如权利要求11所述的装置,其特征在于,所述读取模块还用于根据所述动作关键词对应的语句模板从所述测试语句中提取与所述测试动作相关联的动作值。
13.如权利要求12所述的装置,其特征在于,所述执行模块具体用于,当找到的动作关键词为输入时,复制所述动作值并将其粘贴至所述位置。
14.如权利要求13所述的装置,其特征在于,所述装置还包括显示模块,用于显示采用预设透明度的测试窗口,所述页面元素在所述页面上的位置处于所述测试窗口之外,所述测试窗口包含用于显示所述测试语句的第一子窗口和用于显示所述测试结果的第二子窗口,其中,在获得所述测试结果之前,所述测试语句呈现第一色彩;在获得所述测试结果之后,当所述测试结果为测试成功时,所述测试语句呈现第二色彩,所述测试结果呈现第三色彩;在获得所述测试结果之后,当所述测试结果为测试失败时,所述测试语句呈现第四色彩,所述测试结果呈现第五色彩,其中,第一色彩、第二色彩和第四色彩彼此各不相同,第三色彩不同于第五色彩。
全文摘要
本发明实施例提供了一种页面测试方法和页面测试装置,其中页面测试方法用于对页面进行测试,该方法包括读取用于指示页面元素和测试动作的测试语句;根据所述页面的源代码查找所述页面元素在所述页面上的位置;在所述位置执行所述测试动作;验证所述测试动作的执行结果以获得测试结果。本发明还提供了一种页面测试装置。本发明实施例无需使用动作函数,而是直接触发指定的测试动作,因此测试软件的开发复杂度和使用复杂度均得以降低。
文档编号G06F11/36GK102521121SQ20111036765
公开日2012年6月27日 申请日期2011年11月18日 优先权日2011年11月18日
发明者王峰, 缪伟 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1