IBM自动化测试

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

软件在开发过程中是不断变化的,之后各个版本间的更替也会不可避免地引起界面、功能的变化,可以说唯一不变的,就是变化。这对自动化测试提出了很高的要求:要随需应变。自动化测试的脚本必须具有相当的自适应能力,在各种环境下都能正常工作。只有提高脚本的复用程度和兼容性,自动化测试才有实际意义,否则随着软件的各个版本的变更、发布,测试人员只能不停地去更新脚本,造成效率的低下、人力物力的极大浪费。要达到这个目标,可以从以下两个方面来着手:1)充分利用RationalFunctionalTester的强大功能,比如ScriptAssure?技术、正则表达式,数据驱动,RationalFunctionalTesterAPI等;2)合理地编写、优化脚本。提纲挈领地对测试过程进行抽象,对关键过程进行必要的验证。本文将从录制一个简单脚本开始,一步步对其进行改造和完善,不断提高脚本的自适应能力,使之能够摆脱种种束缚,灵活可靠地在多变的测试环境中顺利执行。一摆脱初始录制环境的束缚文中我们以这个简单的Web页面测试场景为例:用户进入IBM网站,搜索关键字lotus,验证这一链接存在于结果集内。首先,我们可以使用RationalFunctionalTester录制这段脚本:1.打开RationalFunctionalTester,新建一个FunctionalTest项目,命名为SearchLotusProject;2.右键单击项目管理器中的SearchLotusProject,选择使用记录器添加脚本;3.将新脚本命名为SearchLotusLink,单击完成按钮;此时会弹出脚本记录器的窗口,脚本记录已经开始了;4.依次打开IE,输入地址:回车;在搜索栏里输入lotus,单击Search按钮,可以得到一个结果列表,其中就有;5.插入验证点。点击脚本记录器上的按钮,会出现验证点向导窗口。按住手形的对象选择器,选中链接(红框高亮显示),以默认的设置创建一个数据验证点,点击按钮完成。6.点击脚本记录器上的按钮停止记录,完成录入过程。通过以上的操作,我们得到脚本:publicvoidtestMain(Object[]args){//HTMLBrowserbrowser_htmlBrowser(document_htmlDocument(),DEFAULT_FLAGS).click(atPoint(455,108));browser_htmlBrowser(document_htmlDocument(),DEFAULT_FLAGS).inputKeys({ENTER});//Document:IBMUnitedStates:().click(atPoint(25,7));browser_htmlBrowser(document_ibmUnitedStates(),DEFAULT_FLAGS).inputChars(lotus);button_search().click();http().performTest();}Java语言的脚本有很好的可读性,稍有Java知识的人便能看懂这些操作的具体含义。接下来我们试着回放这段脚本(注意:此时搜索结果页面尚未关闭)。点击工具栏上的按钮运行FunctionalTester脚本,开始回放。整个回放过程大约需要1分钟,但回放日志中有2条警告信息:对象识别较困难(在警告阈值以上),并给出了识别分数和警告阈值。这是由于RationalFunctionalTester所使用的ScriptAssure?技术认为这两次识别是弱识别,可能存在问题。下面我们来看看具体原因:ScriptAssure技术给各个界面元素赋予了一定的权重,再综合目标对象的各个属性得出一个量化的特征值,便于在对象之间进行比较,因此可以大大提高脚本对频繁变更的应用程序界面的弹性适应能力,ScriptAssure技术的原理并不难懂。打开脚本资源管理器中的对象document_htmlDocument,可以看到这个对象在识别时,使用到3个属性:.class,.title和.url,权重各有不同。权重用来标识这个属性在识别过程中的重要程度,权重为100,表明这个属性非常关键,必须和原值完全一致;权重为0,表明这个属性是无关紧要的。识别分数就是在这些权重的基础上进行一定的运算而得到的。识别对象时,如果有一个权重100的属性值与原值不符,识别分数就要加上权重×100,即10000分。在这个例子中,录制时使用的是空白的IE页面,而回放时使用的是录制遗留下的搜索结果页面,导致.title和.url这两项属性值不符,因此它的识别分数就是.title权重×100再加上.url权重×100,一共是9000分+4000分=13000分,这就是警告信息里识别分数的由来。至于警告信息里提到的警告阈值,可以在RationalFunctionalTester首选项的ScriptAssure高级选项里修改。缺省值是10000,表明有一个阈值为100的重要属性不匹配。警告阈值越小,则意味着识别过程越严格。对于这一例子而言,使用空白页面和非空页面对结果都没有影响,只要操作对象是浏览器即可,因此我们可以把.title和.url这两项属性的权重设为0。修改之后,保存,再回放一次。同样使用刚才的结果页面,但在回放日志里不再有警告信息,而且回放过程也仅仅用了13秒,快速合格地完成了测试。在录制脚本中,除了有录制时浏览器页面的限制,还有一处隐藏的限制:脚本中没有打开浏览器的操作。如果没有在回放前打开一个浏览器页面,回放操作肯定会失败。幸好RationalFunctionalTester的API提供了这样的功能,在所有Java脚本的公共父类com.rational.test.ft.script.RationalTestScript里,有一个方法startBrowser(java.lang.Stringurl),可以用来启动浏览器,并打开某个URL。因此需要在脚本的第一行前加上startBrowser();用来打开一个空白页面,然后再执行其他操作。通过修改页面对象的识别属性和添加必要的Java代码,我们完成了对脚本内容和录制环境的解耦工作。二摆脱时间的束缚回放时,Java脚本是由Java虚拟机解释执行,进行速度很快;而浏览器的打开,页面的装入则往往由于机器性能、网络带宽、服务器负载而速度缓慢。如果被测程序的运行和脚本执行的时间差过大,极有可能导致测试的失败,因此等待时间是我们应该妥当设置的一个要素。可以在工具级和程序级这两个层次上进行设置。1)工具级设置在RationalFunctionalTester首选项的回放选项里,可以看到四项时间有关的回放设置。缺省的尝试查找测试对象的最长时间值为20秒。由于此处设置比较简单,而且是一个对所有项目和脚本都有效的全局设置,因此很难设定一个能满足所有脚本的值。建议接受默认设置,不在这一层上做时间定制,而是去程序级进行更为灵活的控制。2)程序级设置我们可以在程序级上,对脚本做适量的加工。在某些关键操作后加上适当的等待,直到该操作完全执行完毕,再继续之后的操作。步步为营地执行脚本,确保每一步的前提都是正确的。脚本可以使用以下两种方式来添加等待时间:定长等待调用Java脚本的公共父类com.rational.test.ft.script.RationalTestScript里的方法:sleep(doubleseconds)。这一方法可以使回放过程等待若干秒。这种方式直观、简单。但缺点也是明显的:固定的时间常常不能适应多变的真实环境:等待时间设置得过长,无疑会拉长测试的回放时间,降低效率;等待时间设置得过短,在某些情况下,又无法起到延时应有的效果,仍然错过了被测对象。不定长等待脚本记录器记录下的这些页面对象都是从接口com.rational.test.ft.object.interfaces.TestObject继承下来的,在TestObject中有一个方法waitForExistence()可以用以实现不定长的等待。在一定的时间限度内,等待该对象的出现;一旦出现后就不再等待,程序继续往下执行。最大时间限度是在首选项的回放选项里设置的。不定长等待既达到灵活等待的目的,又没有浪费不必要的等待时间,是一个值得推荐的解决方案。本例中,我们在脚本中添加了不定长的等待设置,如下:publicvoidtestMain(Object[]args){startBrowser();document_htmlDocument().waitForExistence();//HTMLBrowserbrowser_htmlBrowser(document_htmlDocument(),DEFAULT_FLAGS).click(atPoint(455,108));browser_htmlBrowser(document_htmlDocument(),DEFAULT_FLAGS).inputKeys({ENTER});//Document:IBMUnitedStates:().waitForExistence();text_q().click(atPoint(25,7));browser_htmlBrowser(document_ibmUnitedStates(),DEFAULT_FLAGS).inputChars(lotus);button_search().click();document_ibmSearchResultsLotus().waitForExistence();http().performTest();}针对新打开的空页面,搜索输入框和结果页面,分别做了相应的等待设置。正常情况下,这段脚本的回放需要20秒钟,耗时略多于设置等待之前,但此时的脚本在等待时间方面,处理得更为灵活。在牺牲部分效率的同时,获得了更高的可靠性。对于持续性的、大规模的自动化测试而言,其中的价值不言而喻。三摆脱空间的束缚脚本记录器将记录下来的对象保存在该脚本的专用测试对象图中,而且是以树形结构保存。专用测试对象图不仅保存了对象本身的相关属性,连它和其他对象的相对关系也一并保存下来。这段脚本使用方法document_htmlDocument()来调用页面的Document对象,使用方法text_q()来调用搜索输入框,使用方法button_search()来调用搜索按钮。这些方法是由脚本SearchLotusLink的父类SearchLotusLinkHelper定义的:protectedGuiTestObjectdocument_htmlDocument(){returnnewGuiTestObject(getMappedTestObject(document_htmlDocument));}protectedTextGuiTestObjecttext_q(){returnnewTextGuiTestObject(getMappedTestObject(text_q));}protectedGuiTestObjectbutton_search(){returnnewGuiTestObject(getMappedTestObject(button_search));}脚本回放时,RationalFunctionalTester利用专用测试对象图进行静态识别,可以从浏览器这个顶级容器开始,层层深入地定位到指定的某个对象。但这种呆板的对象查找方式也留下了很大的隐患:Web页面里层次结构的变化屡见不鲜,而这种变化对于对象的查找而言,有着致命的影响。在这种模式下要想适应页面层次结构的变化,只能重新录制对象,

1 / 23
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功