QTP自动化测试之VBScript基础.docx
《QTP自动化测试之VBScript基础.docx》由会员分享,可在线阅读,更多相关《QTP自动化测试之VBScript基础.docx(14页珍藏版)》请在冰豆网上搜索。

QTP自动化测试之VBScript基础
QTP自动化测试之VBScript基础
要想使用QTP进行自动化测试,必须了解VBScript这门语言,对于使用过ASP或VB开发的人来说,VBScript已经再熟悉不过了,但是没有接触过VBScript的同学也不要灰心,因为这门语言简单易学。
1.VBScript利器
2.HelloWorld
3.数据类型
4.变量
5.常数
6.运算符
1.VBScript利器
子曰:
工欲善其事,必先利其器。
学习一门语言自然是离不开工具及文档,有好的工具及文档在手,学习起来也会得心应手。
在此,我推荐大家一个很不错的编辑工具——VbsEdit,该工具既能编辑代码,又可调试代码,有不错的智能提示,还有很多示例代码。
可惜不是免费使用,不过网上已经有绿色版,您可以搜索下载。
若你已经安装了QTP,那么使用QTP工具也是一个不错的选择。
参考文档可以使用在线版《MicrosoftWindows脚本技术》,也可以从网上搜索下载CHM文件。
2.HelloWorld
每种语言的入门都是一样,从简单的HelloWorld开始,我们也不例外。
如何使用VBScript来弹出一个对话框显示HelloWorld问候语呢?
很简单,代码如下:
1
2
3
4
MsgBox("Helloworld!
")
MsgBox"Helloworld!
"
result=MsgBox("HelloWorld!
",vbOKOnly,"Greeting")
MsgBox"HelloWorld!
",vbOKOnly,"Greeting"
既然在此出现的第一个函数是MsgBox,那么就简单介绍一下该函数,其签名如下:
1
MsgBox(prompt[,buttons][,title][,helpfile,context])
主要参数:
∙prompt:
为要显示的消息,其他带[]参数为可选参数;
∙buttons:
为显示对话框按钮及类型,默认值为0,即只显示“确定”按钮;
∙title:
为对话框标题栏文字。
MsgBox函数也有返回值,当你点击确定或取消按钮时,其返回的值是不一样的。
其他详细内容,大家可以去查阅参考文档,这里就不逐一说明。
3.数据类型
VBScript只有一种数据类型——Variant,它是根据上下文来判断是数字还是字符串。
因为Variant是VBScript中唯一的数据类型,所以它也是VBScript中所有函数的返回值的数据类型。
为了进一步区分数据类型,它包含如下数据子类型:
子类型
描述
Empty
未初始化的Variant。
对于数值变量,值为0;对于字符串变量,值为零长度字符串("")。
Null
不包含任何有效数据的Variant。
Boolean
包含True或False。
Byte
包含0到255之间的整数。
Integer
包含-32,768到32,767之间的整数。
Currency
-922,337,203,685,477.5808到922,337,203,685,477.5807。
Long
包含-2,147,483,648到2,147,483,647之间的整数。
Single
包含单精度浮点数,负数范围从-3.402823E38到-1.401298E-45,正数范围从1.401298E-45到3.402823E38。
Double
包含双精度浮点数,负数范围从-1.79769313486232E308到-4.94065645841247E-324,正数范围从4.94065645841247E-324到1.79769313486232E308。
Date(Time)
包含表示日期的数字,日期范围从公元100年1月1日到公元9999年12月31日。
String
包含变长字符串,最大长度可为20亿个字符。
Object
包含对象。
Error
包含错误号。
您可以使用转换函数(CInt,CStr等等)来转换数据的子类型。
另外,可使用VarType函数返回数据的Variant子类型。
4.变量
4.1.变量声明
变量声明有两种方式——显式与隐式,显式使用Dim、Public、Private语句进行声明,隐式直接使用变量名。
使用隐式声明方式的习惯不好,因为这样有时会由于变量名拼错而导致程序运行出现意外,因此,最好在每个脚本开始第一行使用OptionExplicit语句强制显式声明所有变量。
声明示例如下:
1
2
3
4
Option Explicit
Dim i,conn '声明多个变量时用逗号隔开
Public UserName,Password
Private m_id
注意:
在VBScript中,变量名是不区分大小写,即userName与UserName是指同一个变量。
4.2.命名规则
VBScript中变量命名是有其规则标准的,变量命名必须遵循:
∙第一个字符必须是字母。
∙不能包含嵌入的句点。
∙长度不能超过255个字符。
∙在被声明的作用域内必须唯一。
4.3.作用域与存活期
变量的作用域由声明它的位置所决定。
如果在过程中声明的,则只有该过程可以使用,即过程级变量;如果在过程之外声明的,则该变量可以被脚本中所有过程所使用,即Script级变量。
变量所存在的时间为存活期。
Script级变量的存活期为从被声明开始,直到脚本运行结束为止;过程级变量的存活期仅是过程被调用执行开始到结束的时间。
不同的过程可以使用相同的变量名,因为局部变量只有声明它的过程才能识别。
4.4.变量赋值
给变量赋值很简单,使用等号进行赋值,等号左边为变量名,右边为变量值。
若该变量是对象引用级别的,则需使用Set语句。
示例代码如下:
1
2
3
4
Dim i,conn,ui
i=0
Set conn=CreateObject("ADODB.Connection")
Set ui=New UserInfo
4.5.标量与数组
只包含一个值的变量成为标量变量;有时候为了方便将一组相关值赋给一个变量,则成为数组变量。
区别标量与数组的唯一方式是声明时数组变量名后面带有括号()。
变量声明就不说了,前面已经提到,这里我们看看怎样声明一维数组及多维数组(最大60维——:
)只要您能够理解)。
1
2
3
4
5
6
7
8
9
Dim a(9),table(2,3)
a(0)=1
...
a(9)=11
MsgBox(a
(1)) '输出数组变量值
table(0,0)=1
...
table(2,3)=10
我们也可以声明动态数组(在运行脚本时大小发生变化的数组),使用Dim或ReDim语句,但括号中不包含任何数字。
要使用动态数组,必须随后使用ReDim确定维数和每一维的大小。
若同时使用Preserve关键字,则在重新调整大小时保留数组的内容。
1
2
3
4
Dim count,a()
count=9
ReDim a(count)
ReDim Preserve a(10)
5.常数
常数在VBScript中是表示不变的值,用于代替数字或字符串。
其内部定义了许多常数,都是以vb开头,例如在HelloWorld程序中涉及到的MsgBox常数“vbOKOnly”。
除了MsgBox常数外,还有颜色常数、比较常数、日期和时间常数等等,详见参考文档。
内部自带常数,我们可以直接使用。
当自带常数不能满足我们的需求时,我们也可以自定义常数,在VBScript中是使用Const语句来定义常数,该语句的签名如下:
1
[Public |Private]Const constname=expression
主要参数:
∙constname:
为常数名称,为了区分常数与变量,最好有一套自己的命名规则,这里推荐字母全大写,单词间用下划线分割;
∙expression:
文字或其他常数,或包括除 Is 外的所有算术运算符和逻辑运算符的任意组合。
常数默认是Public级别,您也可以指定为Private级别,在同一行中声明多个常数需要用逗号分割,常数声明中不能使用变量、自定义函数及内部函数。
下面是常数的一些示例代码:
1
2
3
Const PI=3.14 '常数默认为公有。
Private Const STEP_APPLY="Apply" '定义私有常数。
Const STEP_APPLY="Apply",PI =3.14 '在一行上定义多个常数。
6.运算符
VBScript有一套完整的运算符,包括算术运算符、比较运算符、连接运算符和逻辑运算符。
当表达式中含有多个运算符时,它们的运算优先级是:
算术运算符>比较运算符>逻辑运算符。
所有比较运算符的优先级相同,算术运算符和逻辑运算符的优先级如下所示:
6.1.算术运算符
描述
符号
求幂
^
负号
-
乘
*
除
/
整除
\
求余
Mod
加
+
减
-
字符串连接
&
字符串连接(&)运算符不是算术运算符,但是在优先级顺序中,它排在所有算术运算符之后和所有比较运算符之前。
6.2.逻辑运算符
描述
符号
逻辑非
Not
逻辑与
And
逻辑或
Or
逻辑异或
Xor
逻辑等价
Eqv
逻辑隐含
Imp
6.3.比较运算符
描述
符号
等于
=
不等于
<>
小于
<
大于
>
小于等于
<=
大于等于
>=
对象引用比较
Is
Is运算符是对象引用比较运算符。
它并不比较对象或对象的值,而只是进行检查,判断两个对象引用是否引用同一个对象。
要想使用QTP进行自动化测试,必须了解VBScript这门语言,对于使用过ASP或VB开发的人来说,VBScript已经再熟悉不过了,但是没有接触过VBScript的同学也不要灰心,因为这门语言简单易学。
7.条件语句
8.循环语句
9.过程
7.条件语句
VBScript中可以使用以下条件语句:
∙If…Then…Else语句
∙SelectCase语句
7.1.If…Then…Else语句
If…Then…Else语句结构如下:
1
If conditionThen statements[Else elsestatements]
或者使用块形式
1
2
3
4
5
6
7
If conditionThen
[statements]
[ElseIf condition-nThen
[elseifstatements]]...
[Else
[elsestatements]]
End If
主要参数:
∙condition:
为一个(多个)数值或字符串表达式,其运算结果为True或False,若condition为Null,则被视为False。
∙statements:
为condition等于True时执行的一条或多条(以冒号分开)语句。
对于短小简单的测试,可以使用单行形式(第一种语法),但块形式(第二种语法)提供了比单行形式更强的结构化与适应性,比较容易阅读、维护及调试。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
'1.条件为True时
'单行形式
Dim myDate
myDate=#2011-9-8# '日期时间字符串需用#括起来
If myDate'块形式
If i=100Then
c=True
i=0
End If
'2.条件为True和False时
If user.UserName="admin" Then
showAdminPage=True
Else
showAdminPage=False
End If
'3.对多个条件判断
If value=0Then
MsgBox(0)
ElseIf value=1Then
MsgBox(9999)
Else
MsgBox("输入不合法!
")
End If
7.2.SelectCase语句
语法结构如下:
1
2
3
4
5
6
Select Case testexpression
[Case expressionlist-n
[statements-n]]...
[Case Else expressionlist-n
[elsestatements-n]]
End Select
主要参数:
∙testexpression:
任意数值或字符串表达式。
∙statements:
当testexpression与expressionlist-n中的任意部分匹配时,执行的一条或多条语句。
SelectCase结构提供了If...Then...ElseIf结构的另一个变通形式,功能与If...Then...ElseIf类似,但可以使代码更加简练易读,它与Case语句关联使用。
1
2
3
4
5
6
7
8
9
Dim value:
value=5 '多条语句在一行,需用冒号分开
Select Case value
Case 0:
MsgBox(0)
Case 1:
MsgBox(9999)
Case Else
MsgBox("输入不合法!
")
End Select
8.循环语句
VBScript中可以使用以下循环语句:
∙Do...Loop语句
∙While...Wend语句
∙For...Next语句
∙ForEach...Next语句
8.1.Do…Loop语句
当(或直到)条件为True时循环,语法结构如下:
当条件为True时重复执行某语句块。
1
2
3
4
5
Do [{While |Until}condition]
[statements]
[Exit Do]
[statements]
Loop
当条件变为True之前重复执行某语句块。
1
2
3
4
5
Do
[statements]
[Exit Do]
[statements]
Loop [{While |Until}condition]
主要参数:
∙condition:
数值或字符串表达式,其值为True或False。
如果condition为Null,则condition被当作False。
∙statements:
当condition为True时被重复执行的一条或多条命令。
ExitDo可以退出循环体,循环可以嵌套使用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Do Until response=vbNo
myNum=Int(6*Rnd+1) '产生1到6之间的随机数
response=MsgBox(myNum&"想要另一个数吗?
",vbYesNo)
Loop
Dim check,counter
check=True :
counter=0
Do
Do While count<20
counter=counter+1 '增加计数器
If counter=10Then
check=false
Exit Do '终止内循环
End If
Loop
Loop Until Not check
8.2.While…Wend语句
当条件为True时循环,语法结构如下:
1
2
3
While condition
[statements]
Wend
主要参数:
∙condition:
数值或字符串表达式,其值为True或False。
如果condition为Null,则condition被当作False。
∙statements:
当condition为True时被重复执行的一条或多条命令。
While…Wend没有Exit语句,从头一直循环到尾,若要在中途退出,则需用Do…Loop语句。
8.3.For…Next语句
指定循环次数,使用计数器重复运行语句,语法结构如下:
1
2
3
4
5
For counter=startTo end[Step step]
[statements]
[Exit For]
[statements]
Next
主要参数:
∙counter:
用做循环计数器的数值变量。
这个变量不能是数组元素或用户自定义类型的元素。
∙start:
counter的初值。
∙end:
counter的终值。
∙step:
counter的步长。
如果没有指定,则step的默认值为1。
8.4.ForEach…Next语句
对于集合中的每项或数组中的每个元素,重复执行一组语句,语法结构如下:
1
2
3
4
5
For Each elementIn group
[statements]
[Exit For]
[statements]
Next [element]
主要参数:
∙element:
用来枚举集合或数组中所有元素的变量。
对于集合,element可能是Variant变量、通用Object变量或任意指定的Automation对象变量。
对于数组,element只能是Variant变量。
∙group:
对象集合或数组的名称。
9.过程
在VBScript中,过程被分为两类:
Sub过程和Function过程。
9.1Sub过程
语法结构如下:
1
2
3
4
5
[Public [Default]|Private]Sub name[(arglist)]
[statements]
[Exit Sub]
[statements]
End Sub
主要参数:
∙Public:
表示Sub过程可被所有脚本中的所有其他过程访问。
∙Default:
只与Class块中的Public关键字连用,用来表示Sub过程是类的默认方法。
如果在类中指定了不止一个Default过程,就会出错。
∙Private:
表示Sub过程只可被声明该过程的脚本中的其他过程访问。
∙name:
Sub的名称,遵循标准变量命名规则。
∙arglist:
代表在调用时要传递给Sub过程的参数的变量列表。
用逗号隔开多个变量。
其语法为:
[ByVal|ByRef]varname[()],ByVal表示该参数是按值传递的,ByRef表示该参数按引用传递,varname代表参数的变量名称。
如没有显式地指定使用Public或Private,则Sub过程默认为Public。
调用Sub过程时,只需输入过程名及所有参数值,参数值之间使用逗号分隔。
不需使用Call语句,但如果使用了此语句,则必须将所有参数包含在括号之中。
调用Sub过程的两种方式。
一种使用Call语句;另一种则不使用。
两种方式效果相同,如:
CallMySub(a,b)或MySuba,b。
9.2Function过程
语法结构如下:
1
2
3
4
5
6
7
[Public [Default]|Private]Function name[(arglist)]
[statements]
[name=expression]
[Exit Function]
[statements]
[name=expression]
End Function
主要参数:
∙Public:
表示Function过程可被所有脚本中的所有其他过程访问。
∙Default:
只与Class块中的Public关键字连用,用来表示Function过程是类的默认方法。
如果在类中指定了不止一个Default过程,就会出错。
∙Private:
表示Function过程只可被声明该过程的脚本中的其他过程访问。
∙name:
Function的名称,遵循标准变量命名规则。
∙arglist:
代表在调用时要传递给Function过程的参数的变量列表。
用逗号隔开多个变量。
其语法为:
[ByVal|ByRef]varname[()],ByVal表示该参数是按值传递的,ByRef表示该参数按引用传递,varname代表参数的变量名称。
如没有显式地指定使用Public或Private,则Function过程默认为Public。
调用Function过程时,函数名必须用在变量赋值语句的右端或表达式中,如:
b=MyFunction(a)。
要从函数返回一个值,只需将值赋给函数名。
在过程的任意位置都可以出现任意个这样的赋值。
9.3Sub与Function的区别
∙Sub没有返回值,而Function有返回值。
∙Sub不能放在表达式中,而Function可以。