'1对QTP中数组应用做初步认识。
'2对手工检查点的创建做初步了解。
'文章中用到的软件:
'QTP自带售票系统
Dimshuzu(4,2),i
''定义一个数组,数组的第一个值由用例数量决定,这里的4代表5个用例,数组是从0开始计算的,数组的第二''个数由输入的条件以及预计结果构成。
''这里是登录为例子我们需要输入用户名,密码,并得到一个预期的结果。我们有至少5种组合——
''用户名正确,密码错误。相关报错信息。
''用户名错误,密码正确。相关报错信息。
''用户名为空,密码正确。相关报错信息。
''用户名正确,密码为空。相关报错信息。
''用户名为空,密码为空。相关报错信息。
''那么我们至少有5个类似于上面的用例。
shuzu(0,0)="admin"
shuzu(0,1)="testpsd"
shuzu(0,2)="Incorrectpassword.Pleasetryagain"

shuzu(1,0)="asd"
shuzu(1,1)="mercury"
shuzu(1,2)="Agentnamemustbeatleast4characterslong."

shuzu(2,0)=""
shuzu(2,1)="mercury"
shuzu(2,2)="Pleaseenteragentname"

shuzu(3,0)="admin"
shuzu(3,1)=""
shuzu(3,2)="Pleaseenterpassword"

shuzu(4,0)=""
shuzu(4,1)=""
shuzu(4,2)="Pleaseenteragentname"


''数组定义以后,我们该如何用数组呢?,我们在下面的脚本里可以看到用户名和密码的输入情况。QTP录制下''来的只是其中的一种情况,那么我们需要把我们设计的值带进数组中,
''使数组成为我们的变量。
'Dialog("Login").WinEdit("AgentName:").Set"admin"
'Dialog("Login").WinEdit("Password:").SetSecure'"4937d9c2197caa5bdca7fc5915687fffbdbd5d12"
'Dialog("Login").WinButton("OK").Click
'Dialog("Login").Dialog("FlightReservations").WinButton("确定").Click
''修改上面的代码,其中的用户名admin是我们数组中的第一个元素也就是(0,0)(1,0)(2,0)(3,0)(4,0)
''我们可以看出来数组的第二个元素是相对不会发生变化的,那么我们只需要给发生变化的部分定义一个变量就可以实现用户名按照我们需要的来更换。
''这是我们到代码的开始部分定义一个变量i,因为用例之间元素的位置是相同,所以变量i,可以重复的用,
''我们现在把密码变成shuzu(i,1)
'
'Dialog("Login").WinEdit("AgentName:").Setshuzu(i,0)
'Dialog("Login").WinEdit("Password:").SetSecureshuzu(i,1)
'Dialog("Login").WinButton("OK").Click
'Dialog("Login").Dialog("FlightReservations").WinButton("确定").Click
'
''现在对于我们来说,用户名和密码不再是单纯的一个定值了,他可以实现按照我们规定的内容来回改变并且回''放。
''可是看上去是不是少了什么。。。??没错那就是循环!我们有了数组,但是没有循环的话,程序是不知道我们需要如何运行脚本。
''那么我们开始给代码加入循环,
''QTP中加入循环可以直接写for语句也可以通过Insert标签选择for语句来添加。由于俺是比较懒d所''以还是选择insert标签好了。
''操作步骤————Insert——loopstatement——for...next
''插入for语句之后做一些说明,刚插入的语句格式是这样的——
''ForIterator=1To1Step1
''next
''其中Iterator就是我们定义的变量,第一个数字1就是我们变量的起始数值。因为我们在这里是给''数组的第一个元素定义变量所以我们从0这个数字开始以4这个数字结束。
''setp的意思是“步进”,例如我们定义的起始数值是0,setp是1,那么在运行完第一次之后就会运行''0+1,也就是我们的第二个用例,
''如果我们是setp2那么就会运行第0+2,也就是第三个个用例。
''还有一定要注意的就是next一定要放在循环体的最后面,以它结尾,不然我们的循环体会出现问题。
''现在我们将代码改成下面这样,再来运行试试看
'Fori=0To4Step1
'
'Dialog("Login").WinEdit("AgentName:").Setshuzu(i,0)
'Dialog("Login").WinEdit("Password:").SetSecureshuzu(i,1)
'Dialog("Login").WinButton("OK").Click
'Dialog("Login").Dialog("FlightReservations").WinButton("确定").Click
'
'Next
''运行完毕之后是不是感觉很有成就感?
''因为脚本确实如我们所愿的运行了4次,但是问题又来了。。。。
''我们要比较的结果呢?什么是对的呢?什么是错的呢?我们的第三个元素还没用呢!?
''呵呵不着急我们马上把第三个元素用起来!
''那就是————手工插入检查点!

''分析我们的业务,来确定检查点插入的位置
''我们的提示信息是在什么时候出现的?是在我们输入完用户名,密码并且点击确定之后才会出现。
''那么ok我们检查点的位置确定了,就是在点击确定之后。语句中就是''Dialog("Login").WinButton("OK").Click这一句的后面。
''现在开始做。
''第一步打开我们的飞机订票系统登录界面,随便输入用户名,不填写密码,使其弹出错误对话框。
''第二部点击ObjectRepository——AddObjectstolocal获取检查点的对象,并添加到对象库。
''要注意被获取的对象必须是最小化QTP后就能看到的对象。小窍门,添加之前可以用alt+tab来确定一'''''下,如果下一个移动到的目标就是被测目标那么就ok了
''在获取后我们可以看到很详细的信息,接下来我们需要开始手动写入检查点
'
'Fori=0To4Step1
'
'Dialog("Login").WinEdit("AgentName:").Setshuzu(i,0)
'Dialog("Login").WinEdit("Password:").SetSecureshuzu(i,1)
'Dialog("Login").WinButton("OK").Click
'
'dialog("Login").Dialog("FlightReservations").Static("Pleaseenter''password").GetROProperty("text")'抓取对象后直接输入dialog加"("就会自动出现后面的内容
'
'
'Dialog("Login").Dialog("FlightReservations").WinButton("确定").Click
'
'Next

'现在我们可以看到又多了一行代码,这行代码的意思和意义是什么呢?
'我们来看代码的组成
'dialog("Login").Dialog("FlightReservations").Static("Pleaseenter'password").GetROProperty("text")
'现在打开OR,来查看一下我们刚才截取的对象
'仔细查看TO里的目录结构,会发现抓取的内容所在的树状目录是这样的
''login——flightreservation——pleaseenterpassword
'对照代码我们很快就明白了原来引号的部分就是我们的目录顺序。那dialog和static又是什么呢?
'我们再次打开or,这是默认的是选中第一行信息,这里来说选中的是login。
'注意右侧的Class,是不是与我们代码中的一致呢?!嘿嘿肯定是一样的啦。
'把上面的代码可以“翻译”成这样——————
'dialog类的("Login").下的Dialog类的("FlightReservations")下的.Static类的("Please''enterpassword").
'GetROProperty("tsxt")的意思则是我们将取出Static类的("Pleaseenterpassword")的text属''性,放置到我们的RO中。
'现在我们只是取出来我们要用的属性和属性的值那么怎么去比较呢?
'继续看下面的代码let‘sgoon
'
'Fori=0To4Step1
'
'Dialog("Login").WinEdit("AgentName:").Setshuzu(i,0)
'Dialog("Login").WinEdit("Password:").SetSecureshuzu(i,1)
'Dialog("Login").WinButton("OK").Click
'
'shijishuchu=dialog("Login").Dialog("FlightReservations").Static("Pleaseenter''password").GetROProperty("text")
'yujishuchu=shuzu(i,2)
'
'Dialog("Login").Dialog("FlightReservations").WinButton("确定").Click
'
'Next
'这一步就非常简单了,意义一看就明白了。就是我们把取出来的[url=]test[/url]赋值给变量shijishuchu,我们数组''的预计输出shuzu(i,2)赋值给变量yujishuchu
'这时我们有了两个变量,接下来的[url=]工作[/url]就是开始比较他们,已达到我们[url=]测试[/url]的目的

Fori=0To4Step1

Dialog("Login").WinEdit("AgentName:").Setshuzu(i,0)
Dialog("Login").WinEdit("Password:").SetSecureshuzu(i,1)
Dialog("Login").WinButton("OK").Click

shijishuchu=Dialog("Login").Dialog("FlightReservations").Static("Incorrectpassword.Please").GetROProperty("text")
yujishuchu=shuzu(i,2)

Ifshijishuchu=yujishuchuThen
Reporter.ReportEventmicPass,"结果比较","实际输出:"&shijishuchu&",预计输出:"&yujishuchu
else
Reporter.ReportEventmicFail,"结果比较","实际输出:"&shijishuchu&",预计输出:"&yujishuchu
EndIf

Dialog("Login").Dialog("FlightReservations").WinButton("确定").Click

Next

转自:http://www.13testing.com/forum.php?mod=viewthread&tid=353&extra=page%3D1