由于QTP内嵌了类似Excel表格的DataTable数据表,那么使用Excel文件为QTP脚本传递测试数据也就变得顺理成章的事情了。
将Excel中的各个Sheet的数据导入到QTP数据表中,就需要用到QTP提供的导入函数:DataTable.ImportSheet(FileName,SheetSource,SheetDest),第一个参数为导入的文件名称及路径,SheetSource即导入Excel文件中的那个Sheet名称,SheetDest即为QTP的数据表中的某一个SheetName,这个Sheet可以为某个操作的ADTSheet名称,也可以为NewSheet名称。
提示:导入的数据在测试运行的过程中是可以看见的,但是当测试运行完成后,导入的数据也会消失。这个属于Run-Time DataTable
具体的脚本实现如下:
导入到本操作数据表中
Call DataTable.ImportSheet("C:\Data.xls","Global","Action1") / * 导入Data.xls文件中的Global数据表的数据于本地数据表“Action1”,* /
导入增加的Sheet中
DataTable.AddSheet(“NewSheetName”)
Call DataTable.ImportSheet("C:\Data.xls","Global"," NewSheetName ") / * 导入Data.xls文件中的GlobalSheet表的数据于新建数据表“NewSheetName”中,* /
如果你的全部数据都保存在Excel文件中,可以使用一下语句:
DataTable.ImportSheet(FileName) //直接导入到本测试的数据表中,GDTSheet对应于文件中的GlobalSheet的数据,其他的都依次存放。
那么数据的导出就和导入差不多了,只是参数少了一个而已
DataTable.Export(FileName) //把测试数据表的数据全部导出到文件中
DataTable.ExportSheet(FileName, DTSheet) //把测试数据表中名称为DTSheet的数据表Sheet的数据导入到文件中
Filepath=PathFinder.Locate(“filename”)
DataTable.Import(filepath)
这只针对excel表只存在一个sheet,如果存在多个sheet,就通过ImportSheet来指定sheet表
Filepath=PathFinder.Locate(“global.xsl”
DataTable.AddSheet(“qtpsheet”)
DataTable.ImportSheet filepath,”mysheet”,”qtpsheet”将excel中的mysheet表导入到qtp的qtpsheet中。
原始脚本录制:
Browser("LightPole").Page("LoginPg").Sync '打开LightPole的网站
Browser("LightPole").Refresh '刷新当前页面
Browser("LightPole").Page("LoginPg").Link("Company").Click '点击Company链接
Browser("LightPole").Page("Company").Sync ' Company链接页面打开
Browser("LightPole").Close '关闭当前页面
*******************************
参数化 (一)
Dim mylink '定义一个变量mylink
mylink="Press" '给这个变量赋值为Press
Browser("LightPole").Page("LoginPg").Sync
Browser("LightPole").Refresh
Browser("LightPole").Page("LoginPg").Link("text:="&mylink).Click '把原来录制脚本时候的链接参数化(用描述性编程"text:="&mylink)
Browser("LightPole").Page("text:="&mylink).Sync '可以回避这个页面,对应打开的页面也应该参数化,页面也参数化,和链接保持一致
Browser("LightPole").Close '关闭当前页面
运行这个脚本就会打开Press链接对应的页面 (注意:在运行脚本的时候把其它的IE窗口关掉,否则的话可能出现对象库未定义的问题)
*************************************************
参数化 (二) 把参数放在QTP自带的Datatable里,然后QTP会循环执行,用datatable里面指定列的每一行参数
前提:在datatable里面输入指定的参数,参见图片:para.jpg
Dim mylink
mylink=DataTable("A",dtGlobalSheet) '指定列为A
Browser("LightPole").Page("LoginPg").Sync
Browser("LightPole").Refresh
Browser("LightPole").Page("LoginPg").Link("text:="&mylink).Click
Browser("LightPole").Page("text:="&mylink).Sync
Browser("LightPole").Close
************************************************************
参数化(三)
把excel表格中的数据导入(import)到QTP的datatable中,制定其导入的“文件名”,sheet名,把excel的数据导入到本地第几个datatable里
DataTable.ImportSheet(FileName,SheetSource,SheetDest)
Datatable.ImportSheet "参数1" ,参数2,参数3
参数1:要导入的excel文件的绝对路径
参数2:要导入的excel文件的第几个sheet
参数3:要导入到本地datatable的第几个表中
关于一下两个例子的备注说明:
注1: excel表的内容
excel:地址d:\\mydata.xls;
sheet1: sheet2:
mylink mylink
Company Blog
Press
注2.本地datatable的两个表的名称:1.Golbal;2.Action1
例1:
Datatable.ImportSheet "d:\\mydata.xls" ,2,2 '把excel文件中第二个sheet的数据导入到本地第2个datatable的数据表格中
Dim mylink
mylink=DataTable("lindk","Action1") '所以在这里就要调用本地第二个datatable的数据
msgbox mylink
Browser("LightPole").Page("LoginPg").Sync
'Browser("LightPole").Refresh
Browser("LightPole").Page("LoginPg").Link("text:="&mylink).Click
Browser("LightPole").Page("text:="&mylink).Sync
Datatable.SetNextRow
Browser("LightPole").Close
运行结果应该是:Msgbox应该弹出Blog。
调用本地的第二个datatable时候,程序不会自动执行循环去遍历所有的参数,此时需要使用循环语句,判断本地其他数据表中数据的个数(遍历次数);只有在本地的Global中的数据才能自动遍历执行。
例2:
Datatable.ImportSheet "d:\\mydata.xls" ,1,1 '把excel文件中第一个sheet的数据导入到本地第二个datatable的数据表格中
Dim mylink
mylink=DataTable("lindk",dtGlobalSheet) '所以在这里就要调用本地第二个datatable的数据
msgbox mylink
Browser("LightPole").Page("LoginPg").Sync
'Browser("LightPole").Refresh
Browser("LightPole").Page("LoginPg").Link("text:="&mylink).Click
Browser("LightPole").Page("text:="&mylink).Sync
Datatable.SetNextRow
Browser("LightPole").Close
运行结果因该是:Msgbox应该弹出Company,再一遍弹出Press。