功能自动化测试之QTP编写测试脚本(二)
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家!接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/103766798二、使用 VBScript 处理脚本6.使用环境变量6.1 查看内置环境变量注意√ 内置环境变量区分大小写。...
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家!
接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/103766798
二、使用 VBScript 处理脚本
6.使用环境变量
6.1 查看内置环境变量
-
注意
√ 内置环境变量区分大小写。 -
environment(“LocalHostName”)
√ 客户机主机名 -
environment(“OS”)
√ 操作系统名称 -
environment(“OSVersion”)
√ 操作系统版本 -
environment(“UserName”)
√ 计算机登录用户名 -
environment(“ProductDir”)
√ QTP 的安装路径 -
environment(“ActionName”)
√ 操作/动作的名称 -
Environment(“TestIteration”)
√ 迭代次数,用于 Global 表 -
Environment(“ActionIteration”)
√ 迭代次数,用于 Global 以外的普通数据表 -
在QTP设置中查看内置的环境变量

-
打印出主机名、系统、系统版本、用户名

-
设置脚本数据表从1行运行到3行,打印出迭代次数

-
运行脚本打印出来的迭代次数与实际一致

-
此时将数据表迭代设置从4运行到6,查看打印结果还正确,TestIteration用于global表中的运行的行数

【例 1】使用环境变量控制打开软件一次。
- 通过以上TestIteration例子,那么可以完成当数据表迭代次数为1时才打开软件其他则不重复打开软件,也就是说在数据表global中除了运行到第一行时需要打开软件其他则进行登录操作即可

6.2 自定义环境变量赋值
environment(“变量名”)=值
【例 1】将代理名称存入环境变量。
7.使用脚本添加检查点
- 对象名.checkProperty 属性名,属性值,超时时间
√ 在规定时间内检查对象属性是否符合指定值要求。
√ 加密数据的 text 属性无法获得。
√ 属性值一般使用
● micGreaterThan(值)
● micLessThan(值)
● micGreaterThanOrEqual(值)
● micLessThanOrEqual(值)
● micNotEqual(值)
● micRegExpMatch(值)
【例 1】检查输入错误账号后是否提示正确的错误信息。
Set cuo=dialog(“登录”).Dialog(“航班预订”).Static(“文本位置原始的显示文字”) cuo.CheckProperty “text”, “密码为 ““MERCURY”””,3
- Static 标签文字必须入库;
- 只能进行精确匹配。
- 在脚本中使用命令添加检查点之前,需要将该检查点添加到对象库中,然后通过在脚本合适的位置进行添加

- 运行代码,检查结果预期一致

【例 2】检查机票数是否大于 0
- 运行脚本,查看结果显示检查通过

8.在脚本中使用正则表达式
8.1 正则表达式对象
-
set 对象名=new regexp
√ 创建正则表达式对象 -
对象名.pattern
√ 要查找的符合正则表达式要求的字符串 -
对象名.ignoreCase
√ 忽略英文字母大小写
√ 默认区分大小写 -
对象名.global
√ true 表示找所有项
√ 默认 false 表示找第一项 -
对象名.test(字符串)
√ 返回能否找到匹配字符串的布尔值 -
set 对象=对象名.execute(字符串)
√ 在字符串中进行查找,结果存入对象中
【例 1】在多行文本中查找指定子串的行
- 首先准备多行字符串如下

- 创建正则表达式对象,匹配出ch开头不区分大小的写所有字符串

8.2 使用正则表达式选择列表项
【例 1】使用正则表达式选择班次
- 首先打印出航班列表中的每一项,但是这种是无法进行正则匹配的

- 通过打印航班窗口对象的GetContent内容,将多行字符串显示在一行中,而以上的方式是多行,那么就无法通过正则进行匹配

- 通过正则匹配打印出08点的航班,并进行选择

- 以上脚本如果正则没有匹配到,那么则会报错,为了防止出错,可以进行if判断,若匹配不成功 则选择第一个航班

8.3 检查点中使用正则表达式
【例 1】检查输入错误账号后是否提示正确的错误信息。
- 使用micRegExpMatch函数对检查的文本进行正则匹配

- 运行结果,检查通过

9.使用脚本处理数据表
9.1 操作 sheet 表
- 增加 sheet 表
√ DataTable.AddSheet"表名"
- 获得/打开 Sheet 表
√ DataTable.GetSheet "表名"或表编号
✰ 编号从 1 开始
✰ 表名区分大小写。


- 删除 Sheet 表
√ DataTable.DeleteSheet "表名"或表编号
✰ 编号从 1 开始
9.2 操作 sheet 表中的行和列
- 增加参数/列
√ DataTable.GetSheet("表名"或表号).AddParameter 参数名,值
✰ 值必须加
✰ 插入参数重名时,表中会自动增加一列,列名后自动加 1
✰ 注意:使用命令操作数据表时,数据在代码运行时可见,结果分析中的运行时表格中可见。

- 参数赋值/为指定列指定行赋值
√ DataTable.GetSheet(“表名”).GetParameter(列号或"列名").ValueByRow(行号)=值
- 获得/读取参数(值)/读取指定列指定行的数据
√ DataTable.GetSheet(表号).GetParameter(列号或"列名").ValueByRow(行号)

- 获得参数名
√ 变量名=DataTable.GetSheet(“表名”).GetParameter(列号).Name
- 删除参数
√ DataTable.GetSheet(“表名”). DeleteParameter "列名"或列号
✰ 列号从 1 开始。
9.3 统计 sheet 表中相关个数
- 获得表总个数
√ DataTable.GetSheetCount
- 获得参数总个数(列数)
√ DataTable.GetSheet(表号).GetParameterCount
- 获得行数
√ DataTable.GetSheet(表号).GetRowCount
9.4 导入导出 sheet 表
- 导出数据表
√ DataTable.ExportSheet “excel 文件路径”,"表名"或表号
- 导入数据表
√ DataTable.ImportSheet “excel 文件路径”,excel 工作表编号,“datatable 的表名”
● excel 工作表编号表示 Excel 中第几个 sheet,编号从 1 开始,也可以写工作表的名字。
● datatable 表名必须事先存在。

10.访问数据库
10.1 基本步骤
-
创建数据库连接对象
Set conn=CreateObject(“adodb.connection”) -
指定数据源
conn.ConnectionString = "provider=OLEDB 驱动名称;Data Source=数据库地址;其他
参数
-
连接数据库 conn.open
√ 连接状态 conn.state
✰ =1 成功
✰ =0 失败 -
创建记录集对象
Set rs=createObject(“adodb.recordset”) -
指定 sql 语句
sql=“select order_number,customer_name from orders” -
打开表获得数据 rs.Open sql,conn,3,1
√ 3:向前向后的游标
√ 1:只读数据
√ 打开表后,如果表里有数据,则行指针默认指向第 1 行 -
记录行数
√ rs.recordcount
-
记录集指针/行指针
√ 表示正在处理的记录位置,简单说就是现在正在处理第几行
√ rs.bof
✰ 是否位于第一条记录之前
√ rs.eof
✰ 是否位于最后一条记录之后
-
移动行指针
√ rs.movePrevious
✰ 指向前一行
√ rs.moveNext
✰ 指向下一行
-
rs(i)
√ r获得当前行第 i 列的数据/值,i 从 0 开始
√ r也支持 rs(“列名”)的写法

-
rs.Fields(i).name
√ r获得第 i 列的列名
-
将数据显示在数据表中
datatable.AddSheet “Flight”
datatable.GetSheet(“Flight”).AddParameter rs.Fields(0).Name,rs(0) datatable.GetSheet(“Flight”).AddParameter rs.Fields(1).Name,rs(1)
For i=2 to rs.RecordCount
rs.MoveNext
datatable.GetSheet(“Flight”).GetParameter(1).ValueByRow(i)=rs(0) datatable.GetSheet(“Flight”).GetParameter(2).ValueByRow(i)=rs(1)
Next

-
关闭记录集和数据库
√ rs.close
√ conn.close -
释放记录集数据库对象
√ Set rs = Nothing
√ Set conn = Nothing
10.2 不同数据库的连接字符串
-
访问 Access2010 conn.ConnectionString=“provider=microsoft.ace.oledb.12.0;Data Source=E:\HP\QuickTest Professional\samples\flight\app\flight32.mdb”

-
访问 SQL Server 2008
conn.ConnectionString=“Provider=SQLOLEDB.1;Data Source= 服务器地址 ; Persist Security Info=False;User ID=sa;password=数据库密码;Initial Catalog=数据库名” -
访问 Oracle11g
conn.ConnectionString=“Provider=OraOLEDB.Oracle.1;User
ID=system;Password=123456;Data Source=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 服 务 器 IP)(PORT = 1521))) (CONNECT_DATA =(SERVICE_NAME = orcl)));Persist Security Info=False”
三、描述性编程
1.为什么使用描述性编程
-
录制脚本会依赖于对象库,没有添加到对象库的对象在运行脚本时会出错。
-
描述性编程不依赖于对象库的存在。
-
使用菜单录制不成功时,可以考虑描述性编程。
2.直接描述
对象类型(“属性 1:=属性 1 的值”,“属性 2:=属性 2 的值”,…)
√ 描述性编程具有“后续强迫性”,一旦语句使用了描述性编程,则该语句到结束必须一直都用描述性编程的方式。
√ 如属性值中有( )等特殊字符,需要使用\进行转义。
3.描述性编程实战
3.1 文本框及按钮控件的描述性编程
- 首先打开flight软件,通过探测器获取登录框的属性包括代理名称

- 同理密码跟代理名称一样输入登录下的只是名字不同,所以直接复制改名即可

- 确定为按钮,不是文本输入框,所以需要通过探测器探测出

- 运行脚本,成功登录

3.2 对象属性值重复时的描述性编程
- 同理和之前一样使用探测器获取窗口上的航班日期对象,运行时提示有多个对象匹配

- 原有可能是航班预订界面中存在多个航班日期对象,所以需要在winobject中添加类名Class Name的值来进行多项指定

3.3 下拉列表及列表框的描述性编程
- 同理编写起点和终点的脚本,并运行测试

- 点击航班——选择航班表——点击确定按钮

3.4 控件中含特殊字符的描述性编程
- 插入名称

- 对特殊字符进行转义

- 运行脚本,插入订单成功

- 最后关闭航班预订窗口

- 编写脚本和录制脚本不一样,录制脚本后会在对象库生成对象,而编写脚本却不会在对象库中生成对象

四、自定义函数
1.sub 函数
sub 函数名(参数表)
函数体
end sub
- 无参数也须用括号。
- 无返回值。
- 调用
√ 无参数
✰ call 函数名
✰ 或直接用函数名(括号可省)
√ 有参数
✰ 函数名(参数表)
▲ 直接写函数名调用函数时,括号用空格代替。
▲ 使用 call 调用时括号不能省略。
2.function 函数
function 函数名(参数表)
函数体
函数名=返回值
end function
- 有返回值,函数名即返回值,一般写法是“函数名=返回值”。
- 调用
√ 变量=函数名(参数表)
✰ 括号不能省略。
3.函数复用
3.1 文件→新建函数库

- 在新建的库中创建如下函数,并保存到桌面

3.2 新建测试,导入函数
- 新建测试,然后导入桌面上保存的库,在测试中进行调用

五、批量运行测试
-
开始菜单→程序→QTP→Tools→Test Batch Runner
√ 按顺序依次运行,不能同时运行。 -
注意
√ 需要开放 QTP 允许外部工具调用的权限
√ 选项→运行→允许其它 HP 产品运行 -
首先在桌面上准备两个脚本,并且保证这两个脚本运行没有问题,然后在选项中勾选其他测试组件

-
打开批量运行工具

-
添加测试脚本

-
点击运行按钮,则运行依次运行所有添加的脚本

-
查看结果只能通过打开桌面上的HP Run Results Viewer查看结果,一个一个的查看不能一次性查看所有运行的脚本结果


更多推荐


所有评论(0)