51Testing独家连载:(二十七)精通QTP——自动化测试技术领航

发表于:2012-1-12 11:36

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:余杰 赵旭斌    来源:51Testing软件测试网

  (4)QTP自带的网上订票系统是一个非常经典的描述性编程例子

  众所周知,在QTP里自带着一个网上订机票的网站,也就是Mercury Tour。现在一起来看一下在订票过程中何时需要使用描述性编程。

  首先登录系统后,如果需要订票的话,就要先搜索航班,此时系统要求输入订票乘客的数量,假设在第一次写脚本的时侯将Passengers设置成了1,然后成功地完成了订票。然后,需要参数化乘客数量来测试订票系统,我们会发现QTP回放失败了。其根本原因在于,乘客的数量已经变化了,导致在订票时需要输入每个乘客的姓名,而在写第一个脚本的时候,只设定了一个乘客的姓名。乘客姓名的输入框是随着乘客数量的变化而动态生成的,我们不可能从对象库里得到没有添加过的对象(如果是100个乘客,那需要事先将100个乘客对应的姓名输入框添加到对象库里,显然这是不可取的)。因此,必须使用描述性编程来完成这个业务。现在,我们假设将乘客数量设定为2,如图1-193所示。

图1-193

  然后来看一下设定单个乘客时的脚本如下所示:

Browser("Welcome: Mercury Tours")._

Page("Book a Flight: Mercury").WebEdit("passFirst0").Set "FirstName"

Browser("Welcome: Mercury Tours")._

Page("Book a Flight: Mercury").WebEdit("passLast0").Set "LastName"

  然后到对象库里看看WebEdit控件,可以看到对象的属性如图1-194所示。

图1-194

  当系统对于发生多个FirstName时,命名规则是passFirst0,passFirst1…依次类推。因此,我们现在只要通过描述性编程就可以完成动态FirstName与LastName的识别工作了。假设参数化的乘客数已经赋值给intPassNum = 3,那么在此,描述性编程脚本就该这样写:

For i = 0 to 3

   Browser("Find a Flight:")._

   Page("Book a Flight:").WebEdit("name:=passFirst"& i).Set "FirstName"

   Browser("Find a Flight:")._

   Page("Book a Flight:").WebEdit("name:=passLast"& i).Set "LastName"

Next

  再举一个和这个经典例子差不多的案例,比如现在有一个订书的网站,有一个输入框可以输入想要订购的数量,输入1就会出现1个输入书名的文本框,代码是:WebEdit("name:=book1");输入2就会出现2个输入书名的文本框,代码是WebEdit("name:=book2")…同样也是依此类推。像碰到这类情况,最好的解决方案就是描述性编程,代码可以是:WebEdit("name:= book"& i)。

  小结:以上这些都是对象库编程搞不定或者不适宜搞定的案例。在真实的项目中一定还会有形形色色的案例,在此无法全部列举。但是完全可以举一反三,善加利用描述性编程,从而可以出色地辅助我们完成各种自动化测试需求。

本文选自《51Testing软件测试作品系列》之九——《精通QTP——自动化测试技术领航》。

本站经人民邮电出版社和作者的授权,近期将进行部分章节的独家连载,敬请期待!

版权声明:51Testing软件测试网获人民邮电出版社和作者授权独家连载本书部分章节。

任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。

相关阅读:

查看本书介绍>>

查看本书更多试读章节连载>>

查看软件测试作品系列其他书籍>>

44/4<1234
《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • feil飞
    2015-9-09 16:16:50

    不知道为什么,有好几行都是false。如Print Baidu.Link("name:=新闻").Exist就是false,顶部是有这个新闻链接的

  • liqiuheng
    2013-6-03 16:57:02

    图1-192下的代码直接运行,会有general run error,需要在all_oEdit("micClass").value = "WebEdit" 后加一句:
    all_oEdit("html tag").value="input"
    就不会有问题了,有人知道这是为什么吗?虽然可以运行了,但想知道原理。。。求高人指点

  • 51test_pp
    2012-2-17 21:49:27

    从开始到现在已经看了二十七节,发现作者每节都写的非常精彩。我想问一下,如果对一个以Java Applet为主的网站应该怎样进行测试,到目前为止,我还不是很清楚。希望作者后续会讲到。谢谢作者

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号