QTP中的一些实用技巧
由于一直以来事情都比较多,最近上课还有其它的事情,所以本来答应一个朋友把脚本帮他写一些,但是耽误了3-4天了,实在不好意思。这里把脚本简单说一下,我们分析一下。当时问题时这样的,“我的错误的用户名就没办法登陆”,其实含义就是脚本最好能处理成功的用户名错误的用户名,那么这里涉及到脚本的设计。
目标如下:
1. 脚本需要处理成功和失败的用户的登陆
2. 数据驱动
设计开发脚本如下:
第一步录制脚本如下
Browser("智能变电巡检仪系统 4.0").Page("智能变电巡检仪系统 4.0").WebEdit("txtLoginName").Set "吕巍"
Browser("智能变电巡检仪系统 4.0").Page("智能变电巡检仪系统 4.0").WebButton("登 录").set ""
Browser("智能变电巡检仪系统 4.0").Page("Page").Syn
Browser("智能变电巡检仪系统 4.0").Close
以上为录制的正确的用户名,下边录制错误的用户名
Browser("智能变电巡检仪系统 4.0").Page("智能变电巡检仪系统 4.0").WebEdit("txtLoginName").Set "xx"
Browser("智能变电巡检仪系统 4.0").Page("智能变电巡检仪系统 4.0").WebButton("登 录").set ""
出现错误提示“该用户不存在”
第二步 增强脚本
现在需要设计的是一套脚本驱动所有的测试数据,这样可以驱动所有的用例数据,qtp中提供了datatable。
但是有数据驱动也要做一个事情就是如何处理错误的用户名和正确的用户名,如何结合起来呢?
这里我把datatable看作存放测试用例的地方,里面放入测试数据,还放入测试的预期结果。这样我的设计已经出现雏形了。
我把datatable设计为三列
usernamepassword status
吕x
xxx xxxx 该用户不存在
第三列放入最后执行的结果,我设计的是空为成功登陆,如果有信息就用实际运行的结果和这一列对比.好了万事俱备只欠东风了
修改脚本如下:
Dim iStatus
Browser("智能变电巡检仪系统 4.0").Page("智能变电巡检仪系统 4.0").WebEdit("txtLoginName").Set DataTable("username", dtLocalSheet)
Browser("智能变电巡检仪系统 4.0").Page("智能变电巡检仪系统 4.0").WebButton("登 录").set DataTable("password", dtLocalSheet)
iStatus = DataTable("status", dtLocalSheet)
If iStatus=""Then
Browser("智能变电巡检仪系统 4.0").Close
End If
If iStatus="该用户不存在" Then
Reporter.ReportEvent micFail, "登陆", "登陆失败."
End If
Browser("智能变电巡检仪系统 4.0").Close
第三步,设置脚本运行过程
打开 tests-〉settings
设置RUN TAB页面下 Datatable iterations中 Run On all rows
这样就完成了整个脚本的设计工作,以上通过一个简单例子吧脚本的设计和软件的功能结合起来,达成脚本的设计效果。
QTP的错误恢复场景机制
在脚本运行过程中,可能会出现一些非预期的事件、错误、程序崩溃等情况,阻止脚本继续执行下去,测试脚本可能会一直暂停执行直到某些界面操作被执行才能恢复。
为了处理这类型的错误,QTP通过创建Recovery Scenarios,并关联到某个测试脚本。可以把这些定义的Recovery Scenarios称为恢复场景,这些恢复场景会被相应的事件触发而执行。
Recovery Scenarios的设计目的是用于处理那些不可预见的事件,例如,可以定义一个Recovery Scenario用于处理打印错误,这样当运行脚本过程中打印机出现错误时,Recovery Scenario就会指导QTP执行某个操作,例如单击打印错误提示框的默认按钮。对于那些可预见的错误,则应该使用IF语句在脚本中处理,而不要依赖Recovery Scenario。
在QTP中使用Dictionary对象
VBScript的Dictionary 对象与PERL的关联数组(associative array)类似,其中存储的内容可以是任何数据,每一个存储的数据都与一个唯一的键(Key)关联,键用于获取每一项数据,键通常是整型或字符串类型。
在QTP中,可以把Dictionary 当成数组来用,而且可以随时添加数据,而不需要预先定义大小。下面是一个使用的例子:
' 创建Dictionary对象
Set Dic = CreateObject("Scripting.Dictionary")
' 添加Dictionary的key和value
For Iterator = 1 To 3 Step 1
Dic.Add CStr(Iterator),Iterator & "_Value"
Next
' 循环读取Dictionary的key和value
For Iterator = 1 To Dic.Count Step 1
MsgboxDic.Item(CStr(Iterator))
Next
DicArray = Dic.Items
'For I = 0 To Dic.Count
For I = 0 To UBound(DicArray)
Msgbox DicArray(I)
Next
' 判断是否存在某个Key,如果存在,则把其去掉
If Dic.Exists("2") Then
Msgbox Dic.Item("2")
Dic.Remove("2")
End If
Msgbox Dic.Count
' 清空所有 Key和Value
Dic.RemoveAll()
Msgbox Dic.Count
页:
[1]