QTP自动化测试之VBScript基础(上)
要想使用QTP进行自动化测试,必须了解VBScript这门语言,对于使用过ASP或VB开发的人来说,VBScript已经再熟悉不过了,但是没有接触过VBScript的同学也不要灰心,因为这门语言简单易学。
1. VBScript利器
2. Hello World
3. 数据类型
4. 变量
5. 常数
6. 运算符
1. VBScript利器
子曰:工欲善其事,必先利其器。学习一门语言自然是离不开工具及文档,有好的工具及文档在手,学习起来也会得心应手。在此,我推荐大家一个很不错的编辑工具——VbsEdit,该工具既能编辑代码,又可调试代码,有不错的智能提示,还有很多示例代码。可惜不是免费使用,不过网上已经有绿色版,您可以搜索下载。若你已经安装了QTP,那么使用QTP工具也是一个不错的选择。参考文档可以使用在线版《Microsoft Windows脚本技术》,也可以从网上搜索下载CHM文件。
2. Hello World
每种语言的入门都是一样,从简单的Hello World开始,我们也不例外。如何使用VBScript来弹出一个对话框显示Hello World问候语呢?很简单,代码如下:
1
2
3
4
|
MsgBox(
"Hello world!"
)
MsgBox
"Hello world!"
result = MsgBox(
"Hello World!"
, vbOKOnly,
"Greeting"
)
MsgBox
"Hello World!"
, 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语句进行声明,隐式直接使用变量名。使用隐式声明方式的习惯不好,因为这样有时会由于变量名拼错而导致程序运行出现意外,因此,最好在每个脚本开始第一行使用Option Explicit语句强制显式声明所有变量。声明示例如下:
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开头,例如在Hello World程序中涉及到的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 运算符是对象引用比较运算符。它并不比较对象或对象的值,而只是进行检查,判断两个对象引用是否引用同一个对象。